<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>

合并ffmpeg切割的hls音视频碎片文件


 /***
*https://stackoverflow.com/questions/38123693/how-to-concatenate-merge-two-videos-in-a-new-video-file-in-java
* @param aggregate 合并待输出文件
* @param segments MPEG transport stream(FFMpeg mpegts)、 MPEG-2 TS视频;波形声音
* @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
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 %s\n",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);
}

最新文章

  1. apache2 tomcat https配置-被忽悠进了CentOS 6
  2. 【百度SEO优化】如何让蜘蛛爬行你的网站
  3. C#中gridView常用属性和技巧介绍
  4. 浅谈PHP神盾的解密过程
  5. git问题 next fetch will store in remotes/origin
  6. grub2手动引导ubuntu
  7. web.xml 的加载顺序
  8. Swift - 使用xib添加新界面
  9. sql操作一般函数
  10. __new__、__init__、__call__三个特殊方法
  11. selinux学习
  12. python开发之路:python数据类型(老王版)
  13. es6数组
  14. 【模板】多项式乘法(FFT)
  15. PyCharm 常用习惯设置
  16. C#程序如何捕捉未try/catch的异常——不弹“XXX已停止工作”报错框
  17. Office办公 Winrar如何批量把每个文件夹分别压缩成不同的压缩包
  18. 解决 SQL Server 所有帐号无 sysadmin 权限,且未启用 SQL Server 身份验证,sa 帐号也未启用的问题
  19. Kettle有什么功能
  20. 教你使用markdown画程序流程图

热门文章

  1. CodeForces - 1221E Game With String 分类讨论
  2. 平衡树treap 0基础详解
  3. 【线段树 矩阵乘法dp】8.rseq
  4. docker: Error response from daemon: invalid mount config for type &quot;bind&quot;: bind source path does not exist: /tmp/tfserving/
  5. Maven打Dubbo可执行Jar
  6. SQL拼串--小问题大毛病
  7. ios的uc浏览器图片加载不出来原因
  8. 09 深科技相关表结构 (未完成)、git
  9. Spring中,请求参数处理
  10. MacOS使用zsh &amp; oh-my-zsh