代码之家  ›  专栏  ›  技术社区  ›  stevendesu

为什么MP4 mdat atom不以H.264 NALU启动代码开始?

  •  0
  • stevendesu  · 技术社区  · 7 年前

    我正在尝试调查生成的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).
    

    为了协助调查,我 ffmpeg 以同样的方式对同一视频进行编码,以便我可以比较这两个文件。但我注意到 ffmpeg -视频样本不以编码文件开头 0x000001 0x00000001 .

    我试着查看MP4规范和H.264规范,以理解为什么有时需要这个开始代码,但在这种情况下不是必需的,但实际上有数百页,我在一天的阅读中找不到任何东西。

    ffmpeg -生成的文件在此处可用: http://files.stevendesu.com/test.mp4

    如果用MP4 atom解析器打开它,您将注意到第一个 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开始代码开始的?

    1 回复  |  直到 7 年前
        1
  •  0
  •   stevendesu    6 年前

    只有附件B文件将包含 000001