共计 1083 个字符,预计需要花费 3 分钟才能阅读完成。
一、H264 的 nalu 的组成
- start code [00 00 00 01]
- nalu header
- nalu payload
nalu header
+---------------+
|0|1|2|3|4|5|6|7|
+-+-+-+-+-+-+-+-+
|F|NRI| Type |
+---------------+
F(forbidden_zero_bit)H.264 标准中规定必须为 0
NRI(nal_ref_idc)00~11, 数值越大示意数据越重要。关键帧、sps、pps 都不能为 00。
Type 1-12 由 H.264 应用,13-23 保留,24-31 被其它协定应用,比方 rtp 分片时应用。
0 没有定义
1-23 NAL 单元 单个 NAL 单元包
1 不分区,非 IDR 图像的片
2 片分区 A
3 片分区 B
4 片分区 C
5 IDR 图像中的片
6 补充加强信息单元(SEI)
7 SPS
8 PPS
9 序列完结
10 序列完结
11 码流借宿
12 填充
13-23 保留
24 STAP-A 繁多工夫的组合包
25 STAP-B 繁多工夫的组合包
26 MTAP16 多个工夫的组合包
27 MTAP24 多个工夫的组合包
28 FU-A 分片的单元
29 FU-B 分片的单元
30-31 没有定义
二、通过 rtp 发送 H.264 数据
通常通过 rtp 发送 H.264 数据分三种类型
- 单包发送
- 组包发送
- 分片发送
因为视频数据通常都比拟大,所以少数状况下须要进行分片发送。分片后的数据依照上面的格局组织。
fu indicator(8) + fu header(8) + data
fu indicator
+---------------+
|0|1|2|3|4|5|6|7|
+-+-+-+-+-+-+-+-+
|F|NRI| Type |
+---------------+
|F|NRI| 下面都曾经介绍过了这里不再解释了,咱们能够间接拷贝 nalu 中的 |F|NRI|。
Type 的值取 28(留神:这里采纳 FU- A 分片类型解决)
fu header
+---------------+
|0|1|2|3|4|5|6|7|
+-+-+-+-+-+-+-+-+
|S|E|R| Type |
+---------------+
|S| 为 1 时示意 nalu 分片发送的开始,这时 |E| 必须为 0
|E| 为 1 是示意 nalu 分片发送的完结,这时 |S| 必须为 0
|R| 为保留位,设置为 0
Type 拷贝 nalu 头中的 Type 值。
sps 和 pps 的发送
sps 的 nalu 类型是 7,pps 的 nalu 类型是 8. 这两个数据是解码器所必须的,所以在 rtp 直播中,app 须要间断性的发送 sps 和 pps,这样能力保障接收端可能失常解码视频。(留神:距离发送的时候保障发送 sps 和 pps 后紧跟着的是 I frame)