=================================================================
音视频入门基础:H.264专题系列文章:
音视频入门基础:H.264专题(1)------H.264官方文档下载
音视频入门基础:H.264专题(2)------使用FFmpeg命令生成H.264裸流文件
音视频入门基础:H.264专题(3)------EBSP, RBSP和SODB
音视频入门基础:H.264专题(4)------NALU Header:forbidden_zero_bit、nal_ref_idc、nal_unit_type简介
音视频入门基础:H.264专题(5)------FFmpeg源码中 解析NALU Header的函数分析
音视频入门基础:H.264专题(6)------FFmpeg源码:从H.264码流中提取NALU Header、EBSP、RBSP和SODB
音视频入门基础:H.264专题(7)------FFmpeg源码中 指数哥伦布编码的解码实现
音视频入门基础:H.264专题(8)------H.264官方文档的描述符
=================================================================
一、引言
AnnexB 格式的H.264码流的NALU去掉0x000001或0x00000001的起始码后,其第一个字节为占用 1 位的forbidden_zero_bit + 占用 2 位 的nal_ref_idc + 占用 5 位的nal_unit_type。它们加起来刚好8位,也就是1个字节,一般被我们称为NALU Header(NAL Unit Header):
二、forbidden_zero_bit
根据《音视频入门基础:H.264专题(1)------H.264官方文档下载》下载的H.264官方文档《T-REC-H.264-202108-I!!PDF-E.pdf》,第63页:
forbidden_zero_bit 的值应为0。
根据第308页:
如果forbidden_zero_bit 的值为1,说明比特流语法出错了,字节对齐可能已经丢失,此时可以丢弃所有的比特流数据,直到之后检测到字节对齐。
三、nal_ref_idc
nal_ref_idc的取值范围为0到3,值越高表示它对应的NALU越重要。当解码器在解码处理不过来的时候,可以丢掉nal_ref_idc为0的NALU。一般来讲,如果解码时某个NALU被其它Slice所依赖,说明该NALU比较重要。如果该NALU不需要被其它Slice依赖,说明该NALU不重要。
根据H.264官方文档《T-REC-H.264-202108-I!!PDF-E.pdf》,第11页:
非参考图片就是:nal_ref_idc为0的图片,它不会被其它图片用作帧内预测。
根据《T-REC-H.264-202108-I!!PDF-E.pdf》,第13页:
参考图片就是:nal_ref_idc不为0的图片。解码过程中被后续的图片用于帧内预测。
根据第64页:
Sequence parameter set(sps)、 Picture parameter set(pps)、 Coded slice of an IDR picture(IDR SLICE)的nal_ref_idc不能为0(一般值是3)。 Supplemental enhancement information (补充增强信息SEI)、 Access unit delimiter(分隔符)、 End of sequence(序列结束符)、 End of stream(码流结束符)、 Filler data(填充数据)的nal_ref_idc应为0。
参考:《 设置encode PPS和SPS》
《 nal_ref_idc value for the last frame in GOP when B frame is there for x264 encoding》
《 Breif Description of nal_ref_idc Value in H.246 NALU》
四、nal_unit_type
nal_unit_type表示NALU 的类型,见《T-REC-H.264-202108-I!!PDF-E.pdf》,第65页: