关于android:H264数据通过rtp分片发送

4次阅读

共计 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 数据分三种类型

  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)

正文完
 0