一、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)