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

https://blog.csdn.net/MACMACip/article/details/106569065

【版权申明】转载请附上出处链接
1
rtp中的组合封包以及分片封包
RTP的PayLoad部分:
Rtp负载第一个字节的结构如下,它和H.264的NALU头结构完全一致。

  +---------------+
  |0|1|2|3|4|5|6|7|
  +-+-+-+-+-+-+-+-+
  |F|NRI|  Type   |
  +---------------+
1
2
3
4
5
  需要注意的是,其中Type表示媒体类型。当为1~23时,与NALU中的Type是一致的定义。除此以外还可取以下值:

序号    类型    解释
24    STAP-A    单一时间的组合包
25    STAP-B    单一时间的组合包
26    MTAP16    多个时间的组合包
27    MTAP24    多个时间的组合包
28    FU-A    分片的单元
29    FU-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        |
  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
1
2
3
4
5
6
7
8
9
10
11
组合封包模式:
当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        |
  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
分片封包模式:
当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        |
  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
1
2
3
4
5
6
7
8
9
10
11
与单一封包不一样的是,|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   |
  +---------------+
1
2
3
4
5
S,为1表示分片的开始;
E,为1表示分片的结束;
R,保留位;
Type就是NALU头中的Type,取1-23值。
官方文档地址:

rfc3550
rfc1889

RFC1889中文版
————————————————
版权声明:本文为CSDN博主「安河桥」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/MACMACip/article/details/106569065

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值