此用例是一项服务,手动将一系列未压缩的 .wav 媒体片段编码为 .m4s 片段,以便通过 MPEG-DASH 广播,使用 ffmpeg 将 .wav 压缩为 .aac,并使用 sannies/mp4parser 将 aac 音频组装为 .m4s 片段。 m4s 媒体片段。
我创建这个公共 GitHub 项目 https://github.com/charneykaye/encode-fmp4-demo完整地重现该问题。
例如,这是自定义的ChunkFragmentM4sBuilder.java https://github.com/charneykaye/encode-fmp4-demo/blob/main/src/main/java/com/charneykaye/ChunkFragmentM4sBuilder.java class.
This log https://github.com/charneykaye/encode-fmp4-demo/blob/main/notes/via-java-mp4parser-v2/ChunkFragmentM4sBuilderTest.log.txt是
从ChunkFragmentM4sBuilderTest.java https://github.com/charneykaye/encode-fmp4-demo/blob/main/src/test/java/com/charneykaye/ChunkFragmentM4sBuilderTest.java这导致
连接的测试输出测试-java-mp4parser.mp4 https://github.com/charneykaye/encode-fmp4-demo/blob/main/notes/via-java-mp4parser-v2/test-java-mp4parser.mp4看来
没事:
但是,当我使用 VLC 播放附带的播放列表和片段时,我在日志中看到以下失败:
mp4: Fragment sequence discontinuity detected 163497124 != 0
当 VLC 播放以下 DASH 播放列表时会发生此错误:
- 测试5.mpd https://github.com/charneykaye/encode-fmp4-demo/blob/main/notes/via-java-mp4parser-v2/test5.mpd
- 测试5-128k-163497124.m4s https://github.com/charneykaye/encode-fmp4-demo/blob/main/notes/via-java-mp4parser-v2/test5-128k-163497124.m4s
- 测试5-128k-163497125.m4s https://github.com/charneykaye/encode-fmp4-demo/blob/main/notes/via-java-mp4parser-v2/test5-128k-163497125.m4s
- 测试5-128k-163497126.m4s https://github.com/charneykaye/encode-fmp4-demo/blob/main/notes/via-java-mp4parser-v2/test5-128k-163497126.m4s
- test5-128k-IS.mp4 https://github.com/charneykaye/encode-fmp4-demo/blob/main/notes/via-java-mp4parser-v2/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 https://github.com/charneykaye/encode-fmp4-demo/blob/main/notes/via-java-mp4parser-v2/ChunkFragmentM4sBuilderTest.log.txt
- test5-128k-IS.mp4 https://github.com/charneykaye/encode-fmp4-demo/blob/main/notes/via-java-mp4parser-v2/test5-128k-IS.mp4
- 测试-java-mp4parser.mp4 https://github.com/charneykaye/encode-fmp4-demo/blob/main/notes/via-java-mp4parser-v2/test-java-mp4parser.mp4
VLC 消息只是一个信息条目,而不是错误。这是预期的,因为起始序列号对应于实时边缘。
一旦实时边缘超过了所提供的这 3 个片段中最后一个片段的时间,您就无法播放该清单。您需要继续生成与当前时间相对应的新段。
您可以通过使清单静态、添加段列表并修改起始编号来轻松测试这一点。
您的段看起来是自初始化的,但并未如此声明,这会导致问题。它还浪费带宽,因为您已经提供了初始化段。
提醒一下您应该:
- 一个 init 段
ftyp
and moov
- 一系列媒体片段
styp
(选修的),moof
, mdat
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)