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中文版

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
### 回答1: AAC(Advanced Audio Coding)是一种基于MPEG-2标准的音频压缩编码格式,它采用了高效的压缩算法,能够在保留较高音质的同时减小文件大小。RTP(Real-time Transport Protocol)是一种实时传输音视频数据的协议,用于在互联网上传输音视频流。 AAC封包和解包是将AAC音频数据封装成RTP数据包,并在接收端将RTP数据包解包还原成AAC音频数据的过程。 在进行AAC封包时,需要首先将原始的AAC音频数据按照RTP格式进行封装。封包的过程包括以下几个步骤: 1. 分片:将原始的AAC音频数据分成较小的数据块,以便在网络上传输。 2. 添加RTP头部:为每个数据块添加RTP头部,包括序列号、时间戳等信息,用于接收端进行数据恢复。 3. 添加RTP扩展头部(可选):添加一些额外的信息,如源地址、目的地址等。 4. 添加UDP头部:将封装好的RTP数据包添加UDP头部,以便进行网络传输。 在进行AAC解包时,需要将接收到的RTP数据包解析还原成原始的AAC音频数据。解包的过程包括以下几个步骤: 1. 去除UDP头部:将接收到的数据包去除UDP头部,获取RTP数据包。 2. 解析RTP头部:解析RTP头部获取序列号、时间戳等信息。 3. 去除RTP头部:将RTP头部去除,获取原始的AAC音频数据块。 4. 还原AAC音频数据:将获取到的音频数据块还原成原始的AAC音频数据。 封包和解包使得AAC音频数据能够以RTP数据包的形式在网络上进行实时传输和接收,保证了音频数据的完整性和一定程度的实时性。这对于需要进行音频传输的应用场景非常有用,如实时语音通话、音频会议等。 ### 回答2: RTP(实时传输协议)是一种用于实时数据传输的协议,可以将音频、视频和其他多媒体数据封装并实时传输。AAC(Advanced Audio Coding)是一种高级音频编码格式,能够提供较高的音质和较低的数据率。 在将AAC封装成RTP包时,需要进行以下步骤: 1. 分割AAC帧:AAC编码的音频数据通常以帧的形式存储,需要将这些帧进行分割,以便封装成RTP包。 2. 添加RTP头部:根据RTP协议的规范,需要为每个AAC帧添加RTP头部,包括序列号、时间戳和同步源等信息。 3. 打包RTP包:将添加了RTP头部的AAC帧按照一定的顺序和格式打包RTP包,可以使用UDP协议进行传输。 解包RTP的AAC音频数据时,需要进行以下步骤: 1. 解析RTP头部:从接收到的RTP提取出RTP头部的信息,包括序列号、时间戳和同步源等。 2. 解析AAC帧:根据AAC编码的格式,将RTP的数据解析成原始的AAC帧。 3. 合并帧数据:如果收到多个RTP包含有同一帧的不同部分数据,需要将这些部分数据进行合并,还原出完整的AAC帧。 4. 进行解码:将还原出的AAC帧进行解码,得到音频数据。 5. 进一步处理:可以对解码后的音频数据进行后续处理,如播放、存储或传输。 通过上述封包和解包的过程,我们能够将AAC音频数据封装成RTP包进行实时传输,并在接收端解析和解包RTP包,得到原始的AAC音频数据进行后续处理。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

安河桥

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

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

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

打赏作者

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

抵扣说明:

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

余额充值