首页 > 解决方案 > 分析奇特的avcC原子结构

问题描述

我需要一些帮助来了解avcC我正在尝试分析的特定 mp4 样本的原子结构。

十六进制转储:

00 00 00 38 61 76 63 43 01 64 00 1F FF E1 00 1C 67 64 00 1F AC D9 80 50 05 BB 01 6A 02 02 02 80 00 00 03 00 80 00 00 1E 07 8C 18 E 9 7 1 2C 8B FD F8 F8 00 00 00 00 13 63 6F 6C 72

这是我从上面理解的:

00 00 00 38avcC 原子的大小

61 76 63 43avcC 签名

01配置版本

64AVCProfileIndication

00profile_compatibility

1FAVCLevelIndication

FF111111b + lengthSizeMinusOne

E1111b + numOfSequenceParameterSets(在本例中为 1 SPS)

00 1CSPS 长度(在本例中为 28 字节)

67 64 00 1F AC D9 80 50 05 BB 01 6A 02 02 02 80 00 00 03 00 80 00 00 1E 07 8C 18 CDSPS 数据(如上 28 字节)

01numOfPictureParameterSets(在本例中为 1 PPS)

00 05PPS 长度

这就是问题的开始。根据前面字节给出的 PPS 长度,接下来的 5 个字节应该是 PPS 数据:68 E9 7B 2C 8B

但是根据 avcC 头,原子的总长度是 56 个字节(0x38),这意味着应该包括以下 4 个字节:FD F8 F8 00

但问题是 PPS 长度为 5 个字节(0x05)。那么这最后 4 个字节到底是什么?

然后遵循colr原子的标题:

00 00 00 13colr原子的大小

63 6F 6C 72颜色签名

我已经检查过,长度确实是 19 个字节(0x13)。

问题在于 avcC 原子和我正在分析的特定 mp4 样本(我也检查了其他样本,但它们没有这种特性)。

您可以在此处找到示例。

编辑

mp4infoBento4 套件中的工具将以下内容报告为 avcC 原子的大小:8+48

mp4dump报告:

AVC SPS: [6764001facd9805005bb016a02020280000003008000001e078c18cd]

AVC PPS: [68e97b2c8b]

因此,它根据在 avcC 标头中找到的内容正确地将原子的总大小报告为 56 字节(0x38),但 SPS/PPS 数据的分析方式与上述相同。我仍然不明白最后 4 个字节是什么或它们属于哪里。

标签: mp4h.264

解决方案


我没有得到任何答案,但幸运的是更仔细地阅读ISO 14496-15解决了这个问题:

if( profile_idc == 100 || profile_idc == 110 ||
    profile_idc == 122 || profile_idc == 144 )
{
   bit(6) reserved = ‘111111’b;
   unsigned int(2) chroma_format;
   bit(5) reserved = ‘11111’b;
   unsigned int(3) bit_depth_luma_minus8;
   bit(5) reserved = ‘11111’b;
   unsigned int(3) bit_depth_chroma_minus8;
   unsigned int(8) numOfSequenceParameterSetExt;
   for (i=0; i< numOfSequenceParameterSetExt; i++) {
      unsigned int(16) sequenceParameterSetExtLength;
      bit(8*sequenceParameterSetExtLength) sequenceParameterSetExtNALUnit;
   }
}

显然,根据所使用的配置文件,avcC atom 的末尾可能存在 4+ 个字节的序列。在我上面的示例中,配置文件是 100 ( 0x64),因此它符合标准。所以最后4个字节是:

FD=111111保留位,剩余01表示色度二次采样 4:2:0

F8=11111保留位,剩余000表示亮度位深度为 8

F8=11111保留位,剩余000表示色度位深度为 8

00= 零 SPS 扩展


推荐阅读