rtp中的组合封包以及分片封包

【版权申明】转载请附上出处链接

rtp中的组合封包以及分片封包

RTP的PayLoad部分:

Rtp负载第一个字节的结构如下,它和H.264的NALU头结构完全一致。

  +---------------+
  |0|1|2|3|4|5|6|7|
  +-+-+-+-+-+-+-+-+
  |F|NRI|  Type   |
  +---------------+

  需要注意的是,其中Type表示媒体类型。当为1~23时,与NALU中的Type是一致的定义。除此以外还可取以下值:

序号类型解释
24STAP-A单一时间的组合包
25STAP-B单一时间的组合包
26MTAP16多个时间的组合包
27MTAP24多个时间的组合包
28FU-A分片的单元
29FU-B分片的单元

单一NALU模式:

对于NALU的长度小于MTU(1500)的包,一般采用单一NALU模式。即一个rtp包就是一个NALU,不需要分成多个rtp包发送到客户端并重新组合在一起。

对于一个原始的 H.264 NALU常由[Start Code / NALU Size] [NALU Header] [NALU Payload]三部分组成。

  • 其中[Start Code]用于标示这是一个NALU 单元的开始,必须是0x00000001或0x000001;
  • [NALU Size]常见于h264原始码流/packet-h264码流中,用于告诉我们该NALU多大。与[Start Code]只存在其一;
  • [NALU Header]仅一个字节,其后都是NALU内容的开始。

在rtp单一NALU传输模式中,[NALU Header]和[NALU Payload]将会被传输,且[NALU Header]将会被当成上面的(Rtp负载第一个字节)|F|NRI|type|被解析,如下所示:

   0                   1                   2                   3
   0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  |F|NRI|  type   |                                               |
  +-+-+-+-+-+-+-+-+                                               |
  |                                                               |
  |               Bytes 2..n of a Single NAL unit                 |
  |                                                               |
  |                               +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  |                               :...OPTIONAL RTP padding        |
  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

组合封包模式:

当NALU的长度特别小时,可以把几个NALU封在一个RTP包中。
下面的是STAP-A模式,如果是STAP-B的话会多加入一个DON域。

   0                   1                   2                   3
   0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  |                          RTP Header                           |
  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  |STAP-A NAL HDR |         NALU 1 Size           | NALU 1 HDR    |
  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  |                         NALU 1 Data                           |
  :                                                               :
  +               +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  |               | NALU 2 Size                   | NALU 2 HDR    |
  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  |                         NALU 2 Data                           |
  :                                                               :
  |                               +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  |                               :...OPTIONAL RTP padding        |
  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

分片封包模式:

当NALU的长度超过MTU时,就必须对NALU进行分片封包。也称为Fragmentation Units(FUs)。这里使用FU-A。

   0                   1                   2                   3
   0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  | FU indicator  |   FU header   |                               |
  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+                               |
  |                                                               |
  |                         FU payload                            |
  |                                                               |
  |                               +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  |                               :...OPTIONAL RTP padding        |
  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

与单一封包不一样的是,|F|NRI|type|变成了|FU indicator|FU header|。其实,|FU indicator|就是|F|NRI|type|,但是额外增加了|FU header|用于标识当前分片的状态,如下所示:

  +---------------+
  |0|1|2|3|4|5|6|7|
  +-+-+-+-+-+-+-+-+
  |S|E|R|  Type   |
  +---------------+
  • S,为1表示分片的开始;
  • E,为1表示分片的结束;
  • R,保留位;
  • Type就是NALU头中的Type,取1-23值。

官方文档地址:

rfc3550
rfc1889

RFC1889中文版

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

安河桥

你的鼓励将是我创作的最大动力

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

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

打赏作者

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

抵扣说明:

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

余额充值