forked from j62/ctbrec
64 lines
2.2 KiB
Java
64 lines
2.2 KiB
Java
package org.taktik.mpegts;
|
|
import static java.nio.file.StandardOpenOption.CREATE;
|
|
import static java.nio.file.StandardOpenOption.WRITE;
|
|
|
|
import java.io.File;
|
|
import java.io.IOException;
|
|
import java.nio.channels.FileChannel;
|
|
import java.util.Arrays;
|
|
|
|
import org.taktik.mpegts.sinks.ByteChannelSink;
|
|
import org.taktik.mpegts.sinks.MTSSink;
|
|
import org.taktik.mpegts.sources.MTSSource;
|
|
import org.taktik.mpegts.sources.MTSSources;
|
|
import org.taktik.mpegts.sources.MultiplexingMTSSource;
|
|
import org.taktik.mpegts.sources.MultiplexingMTSSource.MultiplexingMTSSourceBuilder;
|
|
|
|
public class Merger {
|
|
|
|
public static void main(String[] args) throws IOException {
|
|
File[] files = new File("/home/henni/devel/ctbrec/remux-ts-mp4/src/test/resources").listFiles((f) -> f.getName().startsWith("63"));
|
|
//File[] files = new File("/home/henni/devel/ctbrec/mpegts-streamer/src/test/resources/yesikasaenz/2018-09-04_23-30").listFiles((f) -> {
|
|
// return f.getName().startsWith("media") && f.getName().endsWith(".ts");
|
|
// });
|
|
Arrays.sort(files);
|
|
|
|
MultiplexingMTSSourceBuilder builder = MultiplexingMTSSource.builder()
|
|
.setFixContinuity(true);
|
|
|
|
|
|
for (File file : files) {
|
|
MTSSource source = MTSSources.from(file);
|
|
builder.addSource(source);
|
|
}
|
|
|
|
File out = new File("merged.ts");
|
|
FileChannel channel = null;
|
|
try {
|
|
channel = FileChannel.open(out.toPath(), CREATE, WRITE);
|
|
MTSSource mtsSource = builder.build();
|
|
MTSSink sink = ByteChannelSink.builder().setByteChannel(channel).build();
|
|
|
|
// build streamer
|
|
Streamer streamer = Streamer.builder()
|
|
.setSource(mtsSource)
|
|
.setSink(sink)
|
|
.build();
|
|
|
|
// Start streaming
|
|
streamer.stream();
|
|
|
|
// synchronized (streamer) {
|
|
// System.out.println("Waiting for streamer to finish");
|
|
// streamer.wait();
|
|
// System.out.println("Streamer finished");
|
|
// }
|
|
} catch(Exception e) {
|
|
e.printStackTrace();
|
|
} finally {
|
|
channel.close();
|
|
}
|
|
}
|
|
|
|
}
|