How to write java multimedia file encoding and how to process tool class code

Keywords: Java Apache kafka encoding

This article mainly introduces the use and analysis of java multimedia file coding and processing tool class. The example code is very detailed in this paper. It has certain reference value for everyone's study or work. Friends who need it can refer to it.

Introduce

<dependency>
        <groupId>org.apache.storm</groupId>
        <artifactId>storm-core</artifactId>
        <version>1.1.0</version>
      </dependency>
      <dependency>
        <groupId>org.apache.storm</groupId>
        <artifactId>storm-kafka</artifactId>
        <version>1.0.4</version>
      </dependency>
 <dependency>
      <groupId>org.jcodec</groupId>
      <artifactId>jcodec</artifactId>
      <version>0.2.5</version>
      <scope>test</scope>
    </dependency>
    <dependency>
      <groupId>io.humble</groupId>
      <artifactId>humble-video-all</artifactId>
      <version>0.3.0</version>
    </dependency>
    <dependency>
      <groupId>org.mp4parser</groupId>
      <artifactId>isoparser</artifactId>
      <version>1.9.39</version>
    </dependency>

Code

/***
   *https://stackoverflow.com/questions/38123693/how-to-concatenate-merge-two-videos-in-a-new-video-file-in-java
   * @param aggregate Merge Output Files
   * @param segments MPEG transport stream(FFMpeg mpegts), MPEG-2 TS Video; waveform sound
   * @throws InterruptedException
   * @throws IOException
   */
private void merge(File aggregate, Collection<File> segments) throws InterruptedException, IOException {
    Muxer muxer = Muxer.make(aggregate.toString(), MuxerFormat.getFormat(96), "wav");
    final MediaPacket packet = MediaPacket.make();
    long dts_offset = 0;
    long pts_offset = 0;
    for (File segment : segments) {
        Demuxer demuxer = Demuxer.make();
        //option https://ffmpeg.org/ffmpeg-formats.html
        demuxer.open(segment.toString(), null, false, true, null, null);
        if (muxer.getState() == Muxer.State.STATE_INITED) {
            int numStreams = demuxer.getNumStreams();
            for (int s = 0; s < numStreams; s++) {
                DemuxerStream demuxerStream = demuxer.getStream(s);
                Decoder decoder = demuxerStream.getDecoder();
                muxer.addNewStream(decoder);
            }
            muxer.open(null, null);
        }
        long dts_max = 0;
        long pts_max = 0;
        while (demuxer.read(packet) >= 0) {
            if (packet.isComplete()) {
                packet.setDts(packet.getDts() + dts_offset);
                packet.setPts(packet.getPts() + pts_offset);
                dts_max = packet.getDts() + 1;
                pts_max = packet.getPts() + 1;
                muxer.write(packet, false);
            }
        }
        dts_offset = dts_max;
        pts_offset = pts_max;
        demuxer.close();
    }
    muxer.close();
}

test

@Test
  public void testFormat()
  {
    MuxerFormat format = MuxerFormat.getFormat(128);
    System.out.println(format);
    Collection<MuxerFormat> formats = MuxerFormat.getFormats();
    formats.stream().forEach(this::out);
}
void out(MuxerFormat format)
  {
    System.out.printf("%s %sn",format.getName(),format.getMimeType());
  }
  @Test
  public void test() throws IOException, InterruptedException {
    String directory = "C:\Users\Administrator\AppData\Local\Temp\8ad088a2-0bb3-41dc-89d9-2c57ef8414b0";
    List<File> files = Files.list(Paths.get(directory)).map(path -> path.toFile()).filter(file -> file.getName().endsWith(".ts"))
        .collect(Collectors.toList());
    File dest = new File(directory+"\dest.wav");
    merge(dest,files);
  }

Java's multimedia file encoding, processing tools parsing content is explained here, in fact, programming is an open answer, there are different ideas or other methods can be realized in the comments below, look forward to your speech.

Posted by Celadon on Sat, 05 Oct 2019 14:56:01 -0700