H264码流格式有多种打包格式,但都会用到基本的数据单元,也即NALU单元,本文重点介绍NALU结构单元,下面我们就来聊聊关于H264码流格式之NALU详解?接下来我们就一起去了解一下吧!

H264码流格式之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

负荷数据

负荷数据长度

负荷数据可以是序列参数集或图像参数集等。

3. nal_ref_idc

当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_type

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帧作用是分隔图像,分隔符前表示一帧图像的结束,分隔符后标识一帧新的图像。

5. RBSP

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数据部分

,