这个H264 NAL标头是什么意思?

时间:2009-11-06 04:58:23

标签: h.264

0000 0109 1000 0001 6742 0020 e900 800c
3200 0001 68ce 3c80 0000 0001 6588 801a

据我所知, 0000 01 是识别NAL单位的起始前缀代码。 “09 ....”是什么意思?它是头类型字节吗?

4 个答案:

答案 0 :(得分:36)

0x000001是NAL起始前缀代码(它也可以是0x00000001,取决于编码器实现)。 0x09是0b00001001,表示F = 0,NRI = 0,类型为0b01001。该特定类型是访问单元定界符。请注意,紧接着是由0x67定义的另一个NAL单元,它是NAL类型7,它是序列参数集。

还有图片参数集:

00 0001 68 ...

...以及关键帧的开头:

<00> 0000 0001 65 ...

答案 1 :(得分:12)

确定您正在查看哪种NAL的关键参考是http://www.itu.int/rec/T-REC-H.264-201304-S。具体而言,第63页的表格(截至2014年1月)列出了所有有效的NAL类型。

要弄清楚你要看的是前4个字节。如果NAL处于“附件B”框架中,则它们将是 00 00 01 00 00 00 01 。在H.264比特流中禁止/禁止此序列,因此如果您看到它,您肯定知道您正在查看NAL的开头。 NAL类型是1之后的5个低位。在代码中:

int nalType = p[2] == 1 ? (p[3] & 0x1f) : (p[4] & 0x1f);

同样在H.264术语中,IDR表示I帧,非IDR表示P或B帧。

通过以上信息,我们可以查看上面的流并查看访问单元分隔符,然后是SPS,PPS和第一个I-Frame。

答案 2 :(得分:7)

    0000 0109 1000 0001 6742 0020 e900 800c
    3200 0001 68ce 3c80 0000 0001 6588 801a

-> 000001| 09 (AUD)| 10 | 000001 | 67(SPS) | xxxx (SPS data)
   xx | 000001 | 68 (PPS)| xxxx (PPS data)

AUD,SPS,PPS是NALU的类型(网络抽象层单位) NALU有大约31种类型。

09澳元是指访问单位分隔符。

  

访问单位分隔符(AUD)。 AUD是可选的NALU   用于分隔基本流中的帧。这不是必需的   (除非容器/协议另有说明,如TS),并且是   通常不包括为了节省空间,但它可能是有用的   找到一个帧的开头,而不必完全解析每个NALU。

查看此answer以获取更多信息。

我还有question关于如何解码h264流(在iOS中)。

答案 3 :(得分:2)

定义数据包类型。格式为:

+---------------+
|0|1|2|3|4|5|6|7|
+-+-+-+-+-+-+-+-+
|F|NRI|  Type   |
+---------------+

你确定这是一个h.264 NAL标题吗?根据您提供的内容,这似乎不是您提供的上下文的标题。