=================================================================
音视频入门基础: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):
根据《音视频入门基础:H.264专题(1)——H.264官方文档下载》下载的H.264官方文档《T-REC-H.264-202108-I!!PDF-E.pdf》,第63页:
forbidden_zero_bit 的值应为0。
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页:
nal_unit_type表示NALU 的类型,见《T-REC-H.264-202108-I!!PDF-E.pdf》,第65页: