Java mp4parser fragment sequence discontinuity(Java mp4解析器片段序列不连续)
问题描述
此使用案例是一项服务,它手动将一系列未压缩的.wav媒体段编码为.m4s片段以通过mpeg-dash进行广播,并使用ffmpeg将.wav压缩为.aac,并使用sannies/mp4parser将AAC音频组装为.m4s媒体片段。
我创建了this public GitHub project以完整复制该问题。
例如,下面是自定义ChunkFragmentM4sBuilder.java类。
这log是 来自ChunkFragmentM4sBuilderTest.java,其结果是 连接的测试输出test-java-mp4parser.mp4显示为 没事:
但是,当我使用VLC播放发送的播放列表和片段时,我在日志中看到以下故障:
mp4: Fragment sequence discontinuity detected 163497124 != 0
当VLC播放以下短划线播放列表时发生此错误:
- test5.mpd
- test5-128k-163497124.m4s
- test5-128k-163497125.m4s
- test5-128k-163497126.m4s
- test5-128k-IS.mp4
下面是我的自定义片段生成器类的最新实现和其他注意事项:
Files.deleteIfExists(Path.of(m4sFilePath));
AACTrackImpl aacTrack=new AACTrackImpl(new FileDataSourceImpl(aacFilePath));
Movie movie=new Movie();
movie.addTrack(aacTrack);
Container mp4file=new ChunkFragmentM4sBuilder(seqNum).build(movie);
FileChannel fc=new FileOutputStream(m4sFilePath).getChannel();
mp4file.writeContainer(fc);
fc.close();
- ChunkFragmentM4sBuilderTest.log.txt
- test5-128k-IS.mp4
- test-java-mp4parser.mp4
vlc
推荐答案消息只是一个信息条目,不是错误。这是预期的,因为起始序列号对应于活动边缘。
一旦实时边缘超过了所提供的3个片段中的最后一个片段的时间,您就不能播放该清单。您需要继续生成与当前时间对应的新段。您可以通过将清单设置为静态、添加段列表并修改起始编号来轻松测试此功能。
您的段看起来是自初始化的,但并未声明为自初始化,这将导致问题。它还会浪费带宽,因为您已经提供了一个初始化段。
提醒您:
- 包含
ftyp
和moov
的初始化段 - 一系列
styp
(可选)、moof
、mdat
这篇关于Java mp4解析器片段序列不连续的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!
本文标题为:Java mp4解析器片段序列不连续
基础教程推荐
- 如何使用 Stream 在集合中拆分奇数和偶数以及两者的总和 2022-01-01
- 在螺旋中写一个字符串 2022-01-01
- 如何对 HashSet 进行排序? 2022-01-01
- Spring Boot Freemarker从2.2.0升级失败 2022-01-01
- 如何在不安装整个 WTP 包的情况下将 Tomcat 8 添加到 Eclipse Kepler 2022-01-01
- 如何强制对超级方法进行多态调用? 2022-01-01
- 首次使用 Hadoop,MapReduce Job 不运行 Reduce Phase 2022-01-01
- 由于对所需库 rt.jar 的限制,对类的访问限制? 2022-01-01
- 如何使用 Eclipse 检查调试符号状态? 2022-01-01
- Java 中保存最后 N 个元素的大小受限队列 2022-01-01