一、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数据分三种类型

  1. 单包发送
  2. 组包发送
  3. 分片发送

因为视频数据通常都比拟大,所以少数状况下须要进行分片发送。分片后的数据依照上面的格局组织。

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)