H264码流格式之NALU详解(H264码流格式之NALU详解)
H264码流格式有多种打包格式,但都会用到基本的数据单元,也即NALU单元,本文重点介绍NALU结构单元,下面我们就来聊聊关于H264码流格式之NALU详解?接下来我们就一起去了解一下吧!
H264码流格式之NALU详解
H264码流格式之NALU1. 简介H264码流格式有多种打包格式,但都会用到基本的数据单元,也即NALU单元,本文重点介绍NALU结构单元。
2. NALU结构NALU(Network Abstract Layer Unit)全称为网络抽象层单元,NALU类型包括VCL(Video Coding Layer ,全称为视像编码层)单元和非VCL NAL单元。
NALU格式由一个字节头信息和原始字节序列负荷数据组成,即NALU Header RBSP,如下所示:
字段 |
位宽 |
说明 | |
NALU Header |
forbidden_zero_bit |
1bit |
禁止位,协议规定为0。 |
nal_ref_idc |
2bit |
重要性指示位,取值范围0~3。值越大,代表NALU越重要,就需要优先被保护。 | |
nal_unit_type |
5bit |
负荷数据类型。值为1-5时,表示RBSP里面包含的数据为条带数据,统称为VCL NAL单元,其他的NALU则称为非VCL NAL单元。 | |
RBSP |
负荷数据 |
负荷数据长度 |
负荷数据可以是序列参数集或图像参数集等。 |
当NAL单元为序列参数集,或图像参数集,或一个参考图像条带,或一个参考图像的条带数据分割时,nal_ref_idc不应等于0。
当nal_unit_type 等于 6、9、10、11 或 12 的 NAL 单元时,nal_ref_idc应等于 0。
当一张图像的其中一个条带的NAL单元的nal_ref_idc为0时,则该图像的所有条带的NAL单元的nal_ref_idc都为0。
4. nal_unit_typenal_unit_type是指包含在 NAL 单元中的 RBSP 数据结构的类型,Nal 单元类型码,如下所示:
Nal_ref_type |
内容 |
0 |
未指定 |
1 |
不分区,非IDR图像的片 |
2 |
片分区A |
3 |
片分区B |
4 |
片分区C |
5 |
IDR图像中的片 |
6 |
辅助增强信息 (SEI) |
7 |
SPS 序列参数集 |
8 |
PPS 图像参数集 |
9 |
访问单元分隔符AUD |
10 |
序列结束 |
11 |
流结尾 |
12 |
填充数据 |
13 |
序列参数集扩展 |
14....18 |
保留 |
19 |
未分割的辅助编码图像的编码条带 |
20...23 |
保留 |
24...31 |
未指定 |
其中1~12由H.264使用,24~31由H.264以外的应用使用。
IDR帧作用是立即刷新图像,解码器收到IDR帧后,先清空参考帧队列,重新查找SPS数据和PPS数据,重新建立新的参考队列。
AUD帧作用是分隔图像,分隔符前表示一帧图像的结束,分隔符后标识一帧新的图像。
5. RBSPRBSP(Raw Byte Sequence Payload)全称原始字节序列负荷。不同的负荷类型,负荷数据代表不同的数据。
5.1 当nal_unit_type为7时,负荷数据为序列参数集。H264码流格式是AVCC的情况,如下所示:
SPS各字段表示如下:
字节序号 |
值(十六进制) |
说明 |
1,2 |
0x00, 0x1d |
Nal单元数据长度 |
3 |
0x67 |
二进制表示01100111,nal_ref_idc为3,nal_unit_type为7,即SPS |
4-31 |
0x64-0x92 |
SPS数据部分 |
5.1 当nal_unit_type为8时,负荷数据为图像参数集,H264码流格式是AVCC的情况,如下所示:
PPS 各字段表示如下:
字节序号 |
值(十六进制) |
说明 |
1 |
0x01 |
PPS的个数 |
2,3 |
0x00, 0x06 |
PPS的数据长度 |
4 |
0x68 |
二进制表示01101000,nal_ref_idc为3,nal_unit_type为8,即PPS。 |
5-9 |
0xeb-0xc0 |
PPS数据部分 |
免责声明:本文仅代表文章作者的个人观点,与本站无关。其原创性、真实性以及文中陈述文字和内容未经本站证实,对本文以及其中全部或者部分内容文字的真实性、完整性和原创性本站不作任何保证或承诺,请读者仅作参考,并自行核实相关内容。文章投诉邮箱:anhduc.ph@yahoo.com