学习日记之三:RFC2198文档阅读

介绍:

RFC2198协议规定两媒体网关之间可以以冗余方式传递RTP净荷,以减少RTP包的丢包率。当支持RFC2198时,媒体网关会将同一内容的RTP净荷打包成主用数据包与冗余数据包,然后同时发送到IP承载网,接收端媒体网关根据数据包中的“时间戳”信息决定取舍。通过冗余发送方式,可以提高数据传送的可靠性,尤其在网络质量较差的环境下,可以保证通信质量。当然,由于冗余帧的发送,“使能冗余”会比“禁止冗余”占用更多的网络带宽,增加了网络开销,降低了带宽利用率。

 

以一个负载类型来表示有冗余的包。于是该包就成为一个容器,在其中可封装多个负载。这样的方法可以把任意数量的冗余数据封装到一个包中,因此使用十分灵活。当然,每个封装后的负载都要有一个头来表示所包含的数据类型,这也会带来一点小小的负担。但总之这还是一个比较好的方案,它兼具灵活性和扩展性,同时负担也相对较小。

 

一个RTP音频数据包,包括一个DVI4(8KHz)主编码块和一个单独的8KHz LPC编码的冗余块,两者长度均为20ms。参照RTP视听框架所定义,示例格式如下:

一个承载了冗余数据的RTP包应该有一个标准RTP头,同时要在负载类型中表示其中含有冗余信息。头中其它字段与主数据块相关。紧接着RTP头是一些附加头,定义于下图中,它们规定了包所携带的每个编码的内容。此后是数据块,其中包括了这些编码的标准RTP负载数据。注意到所有的头都要同32位边界对齐,但负载数据却往往不能对齐。如果一个包中携带了多个冗余编码,则它们应该对应不同的时间段:没必要为包的一个时间段制作多个数据拷贝。

头中的各位定义如下:

标志位(F): 1位,头中的第一位,表示后面是否还有另一个头块。如果该位为1表示后面还有头块,如果该位为0表示这是最后一个头块。

块负载类型(block PT): 7位,表示该块的RTP负载类型。

时间戳偏移(timestamp offset): 14位,本块相对于RTP头时间戳的无符号时间戳偏移

量。使用无符号偏移则说明冗余数据的发送必须在主数据已经发送之后,因此要从当前时间

中减去主数据的发送时间来决定冗余数据所在块的时间戳。

块长度(block length):  10位,表示对应数据块的字节长度,其中不包括头的长度。

 

主编码块头位于包的最后。我们可以忽略本块头中的时间戳和块长度字段,因为他们可

以通过RTP头和整个包的长度来判断。主数据块的头由一个零F位和一个块负载类型组成,总

共8位。如下图所示:

最后一个头之后就是数据块,存储顺序和头的排列顺序相同。数据块之间不需要填充或者使用其它分隔,一般不需要32位对齐。如此选择仍是为了在损失一定额外解码时间的情况下降低带宽负担。编码的选择应该反映其对带宽的需求。冗余编码所占带宽应远远小于主编码所占带宽:然而该原则也有些例外,即如果主编码本身带宽就很小,且需要很高的处理能力,则往往使用主编码的拷贝来作为冗余。即便如此,冗余编码绝不能比主编码的所占带宽高。一般情况下没必要使用多级冗余。在某些需要多级冗余情况下,每层的带宽需求都要明显低于前一级。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值