NALU Header (1 byte)
|0bit |1-2bit |3-7bit
|F(1bit) |NRI(2bits) |Type(5bits) |
F: forbidden_zero_bit.
在 H.264 规范中规定了这一位必须为 0.
NRI: nal_ref_idc.
取 00 ~ 11, 指示这个 NALU 的重要性, 值越大表示这个NALU越重要,如 00 取值表示NALU 解码器可以丢弃它而不影响图像的回放,11取值表示必须完整保护.
Type: nal_unit_type.
这个 NALU 单元的类型. 取值如下:
0 没有定义
1-23 NAL单元 单个 NAL 单元包. (参考标准nal_unit_type表定义,1-19已指定,20-23保留,23-31未指定)
[NALU Payload]
H.264 Payload 格式定义了三种不同的基本的负载(Payload)结构. 接收端可能通过 RTP Payload
的第一个字节来识别它们. 这一个字节类似 NALU 头的格式, 而这个头结构的 NAL 单元类型字段
则指出了代表的是哪一种结构, 此字节结构跟H.264 NALU结构一样,不同处是字段Type的取值。
字段 Type: 这个 RTP payload 中 NAL 单元的类型. 这个字段和 H.264 中类型字段的区别是, 当 type
的值为 24 ~ 31 表示这是一个特别格式的 NAL 单元, 而 H.264 中, 只取1~23 是有效的值.
0-23 见NALU说明
24 STAP-A 单一时间的组合包
24 STAP-B 单一时间的组合包
26 MTAP16 多个时间的组合包
27 MTAP24 多个时间的组合包
28 FU-A 分片的单元
29 FU-B 分片的单元
30-31 没有定义
RTP负载打包 -- NAL单元
*******************************************************************************
对于 NALU 的长度小于 MTU 大小的包, 一般采用单一 NAL 单元模式.
对于一个原始的 H.264 NALU 单元常由 [Start Code] [NALU Header] [NALU Payload] 三部分组成, 其中 Start Code 用于标示这是一个
NALU 单元的开始, 必须是 "00 00 00 01" 或 "00 00 01", NALU 头仅一个字节, 其后都是 NALU 单元内容.
打包时去除 "00 00 01" 或 "00 00 00 01" 的开始码, 把其他数据封包的 RTP 包即可.
如Sequence Parameter Set:
00 00 00 01 67 42 00 1E E9 01 40 7B 20
打包为RTP Payload时,直接去掉[00 00 00 01]即可:
67 42 00 1E E9 01 40 7B 20