用于创建单个.m4s片段的Java mp4parser-无效的moov框 [英] Java mp4parser to create a single .m4s fragment— invalid moov box

查看:24
本文介绍了用于创建单个.m4s片段的Java mp4parser-无效的moov框的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

此用例是一项服务,它手动将一系列未压缩的.wav媒体片段编码为.m4s片段,以便通过MPEG-DASH进行广播,并使用ffmpeg将.wav压缩为.aac 和sannies/mp4parser将AAC音频组合成.m4s媒体片段。

我创建了this public GitHub project以完整复制该问题。

例如,下面是自定义CustomFragmentMp4Builder.java类。

必须能够使用序列号(索引)指定此单个.m4s片段,以便为每个媒体段手动递增。

目标是构建包含SegmentTypeBoxSegmentIndexBoxMovieFragmentBox框类型的.m4s片段。作为参考,我已经使用mp4parser检查了通过ffmpeg -f hls生成的.m4s片段。此规格可用here as a .yaml file

我的实现创建了一个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)

预期的框类型SegmentTypeBoxSegmentIndexBoxMovieFragmentBox确实出现在输出中:

但是,在文件的末尾出现一个未知类型的框:

推荐答案

您的m4s段无效,因为mdat原子大小不正确。

例如test5-128k-151304042.m4s中的mdat被标记为长度为16个字节,但末尾有数据,文件大小为164884。

解析器然后尝试读取无效的偏移量。avc5不是一个原子,而实际上是字符串&Lavc58.54.100&的一部分。读取为3724673100的长度也是无效的,并且大于32位整数的最大值,因此转换为INT无效。


在您的实施中:

ParsableBox moov = createMovieFragmentBox(movie);
isoFile.addBox(moov);
List<SampleSizeBox> stszs = Path.getPaths(moov, "trak/mdia/minf/stbl/stsz");
// ...

protected MovieFragmentBox createMovieFragmentBox(Movie movie) {
    MovieFragmentBox mfb = new MovieFragmentBox();
    // ...
}

这不是moov原子,这是moof。其中没有stsz,并且您的样本大小之和为0,因此mdat的总计算大小为16+0。

moov应该在初始化段中。

这篇关于用于创建单个.m4s片段的Java mp4parser-无效的moov框的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆