我正在尝试调查生成的MP4问题,该错误返回错误:
[mov,mp4,m4a,3gp,3g2,mj2 @ 0x55f0ae819080] Failed to add index entry
Last message repeated 277 times
[h264 @ 0x55f0ae81c300] Invalid NAL unit size (-800932280 > 6).
第一个帧解码完美,以后的所有帧均无法解码。这样会产生0.042秒的持续时间的视频。
为帮助进行调查,我以相同的方式ffmpeg
对同一视频进行编码,以便可以比较这两个文件。但是,我注意到,在ffmpeg
编码的文件中,视频样本并非以0x000001
或0x00000001
开头。
我尝试浏览了MP4规范和H.264规范,以了解为什么有时有时需要此起始代码,但在这种情况下却不需要此起始代码,但是从字面上看,它有数百页,并且在阅读的当天我什么都找不到
ffmpeg
生成的文件在此处可用:http://files.stevendesu.com/test.mp4
如果您使用MP4原子解析器打开它,您会注意到第一个mdat
原子开始:
0000 6DF4 6D64 6174 0000 04BF 6588 8101
1788 8C12 0001 1498 3800 188E 003F FFFC
...
前8个字节有意义:00006DF4
(28148)= mdat
原子的大小,6D646174
= ASCII中的“ mdat”
此后,mdat
原子以0x000004
开始。根据前面的traf
中的moof
原子,第一个视频样本(持续时间为800/16000秒,大小为19899字节)应从此处准确开始。因此0x000004
是第一个视频样本的前3个字节。
该视频样本不是以NALU起始代码开头,或者是我不理解的NALU周围有一些标头/包装。
任何人都可以向我解释为什么该视频示例不以NALU起始代码开头吗?
答案 0 :(得分:0)
仅附件B文件将包含000001
起始代码。我有AVCC数据。