H.264数据通过rtp分片发送

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

我的公众号已经开通,公众号会同步发布。
欢迎关注我的公众号

在这里插入图片描述

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

mjlong123123

你的鼓励时我创作最大的动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值