H264码流格式有多种打包格式,但都会用到基本的数据单元,也即NALU单元,本文重点介绍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。
nal_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帧作用是分隔图像,分隔符前表示一帧图像的结束,分隔符后标识一帧新的图像。
RBSP(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数据部分 |
| 留言与评论(共有 0 条评论) “” |