此用例是一项服务,它手动将一系列未压缩的 .wav 媒体片段编码为.m4s片段以通过MPEG-DASH进行广播,使用ffmpeg将 .wav 压缩为 .aac 并使用 sannies/mp4parser将 aac 音频组装成. m4s媒体片段。
我创建了这个公共 GitHub 项目来完整地重现这个问题。
例如,这是自定义的CustomFragmentMp4Builder.java类。
至关重要的是,我们能够使用序列号(索引)指定这个单个 .m4s 片段,我们将为每个媒体片段手动递增该序列号。
目标是构建一个包含盒子类型、和的.m4s片段。作为参考,我使用mp4parser来检查通过.m4s生成的片段。该规范在此处以 .yaml 文件的形式提供SegmentTypeBox
SegmentIndexBox
MovieFragmentBox
ffmpeg -f hls
我的实现创建了一个没有错误的 MP4。但是,当单元测试尝试读取 ChunkMp4Builder 刚刚写入临时文件夹的文件时:
java.lang.RuntimeException: A cast to int has gone wrong. Please contact the mp4parser discussion group (3724673092)
at org.mp4parser.tools.CastUtils.l2i(CastUtils.java:30)
at org.mp4parser.support.AbstractBox.parse(AbstractBox.java:97)
at org.mp4parser.AbstractBoxParser.parseBox(AbstractBoxParser.java:116)
at org.mp4parser.BasicContainer.initContainer(BasicContainer.java:107)
at org.mp4parser.IsoFile.<init>(IsoFile.java:57)
at org.mp4parser.IsoFile.<init>(IsoFile.java:52)
at com.charneykaye.TestBase.getMp4Boxes(TestBase.java:116)
at com.charneykaye.CustomFragmentMp4BuilderTest.run(CustomFragmentMp4BuilderTest.java:78)
预期的框类型SegmentTypeBox
、SegmentIndexBox
和MovieFragmentBox
do 出现在输出中:
但是,在文件末尾出现了一个未知类型的框: