微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

分析奇特的avcC原子结构

如何解决分析奇特的avcC原子结构

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

十六进制转储:

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 CD 01 00 05 68 E9 7B 2C 8B FD F8 F8 00 00 00 00 13 63 6F 6C 72

以上是我的理解:

00 00 00 38 avcC 原子的大小

61 76 63 43 avcC 签名

01 配置版本

64 AVCProfileIndication

00 profile_compatibility

1F AVCLevelIndication

FF 111111b + lengthSizeMinusOne

E1 111b + numOfSequenceParameterSets(在本例中为 1 SPS)

00 1C SPS 长度(在本例中为 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 CD SPS 数据(如上所述 28 字节)

01 numOfPictureParameterSets(在本例中为 1 PPS)

00 05 PPS 长度

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

但是根据avcC头,atom的总长度是56字节(0x38),也就是说应该包括以下4个字节:FD F8 F8 00

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

然后是 colr 原子的头部:

00 00 00 13 颜色原子的大小

63 6F 6C 72 颜色签名

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

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

您可以找到示例 here

编辑

Bento4 套件中的

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

还有 mp4dump 报告:

AVC SPS: [6764001facd9805005bb016a02020280000003008000001e078c18cd]

AVC PPS: [68e97b2c8b]

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

解决方法

我没有得到任何答案,但幸运的是对 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 原子的末尾可能存在 4 个以上的字节序列。在我上面的示例中,配置文件是 100 (0x64),因此它符合条件。所以最后4个字节是:

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

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

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

00 = 零 SPS 扩展

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。