0000 0109 1000 0001 6742 0020 e900 800c
3200 0001 68ce 3c80 0000 0001 6588 801a
据我所知, 0000 01 是识别NAL单位的起始前缀代码。 “09 ....”是什么意思?它是头类型字节吗?
答案 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标题吗?根据您提供的内容,这似乎不是您提供的上下文的标题。