一种自适应RTP分包方法研究

1.引言
  近年来,随着多媒体系统和网络通讯技术的发展,基于Internet 的多媒体业务在飞速的发展,如电视电话会议、远程视频监控等。这些数据在网络上传输往往要经过压缩。而且网络上的视频音频业务大多是通过RTP/RTCP 实现的。基于UDP 的RTP 传输协议没有TCP那样的保障机制,而且视频数据的实时性要求出现数据误码或丢包也不允许数据的重传。这要求我们必须针对网络的状况调整我们的传输策略,本文首先分析了影响图像传输质量的因素,介绍了目前基于RTP 协议传输的拥塞控制算法,根据拥塞控制算法,提出了一种能够适应网络拥塞状况的MPEG-4 数据打包策略,以宏块为基本单位打包MPEG4 视频包来适应网络拥塞状况,降低丢包对视频解码质量的影响。最后通过实验分析证明本文算法的有效性。
  2.影响图像解码质量的因素
  MPEG-4 和H.264 等传统的压缩方法采用的运动估计、可变长编码等技术使得视频压缩数据对信道的丢包和误码率更加敏感。由于采用帧内和帧间编码技术压缩数据,使得帧内以及帧与帧之间的编码关系紧密。在网络传输的过程中,一帧数据或是大量宏块的数据损伤很容易造成时间与空间上的差错的延续,导致解码质量的下降,甚至解码器的停止工作。视频数据对时延有着特殊的敏感性。往往不允许出错数据的重传。为了减轻信道传输产生的差错对解码质量的影响,这就要求我们在传输的方式上做出改进,增强数据传输过程中对关键信息的保护。
  3.RTP 拥塞控制算法
  一般来说网络带宽都是随着时间不断变化的,时常会有波动,无法预知网络带宽。根据不同需求,在网络延时和丢包率上,视频应用有着不用的要求,MPEG-4 视频数据发送端必须得根据网络实际状况迅速做出反应,以保证视频的传输质量。这就要求RTP 传输协议能够实时监控网络状况。
  RTP 协议通过RTCP 来监控网络状态,编码器端向解码器端实时发送数据。在一定时间内解码器端若没有接受到正确分组,便认为发生了丢包,将丢包结果统计,每隔5 秒钟生成RTCP 接收报告(RR)向编码器端发送。编码器端可以利用这段时间的丢包率计算出网络可用带宽,通过调整编码器端的发送策略降低传输中的丢包率和误码率。比如说降低码率或者调整MPEG-4 分组策略[1]。
  当发现网络拥塞时需要降低发送速率来减少包的丢失,网络回复时需要提高发送速率来,快速提高网络带宽利用率。一般来说常用的流量控制算法有两种:一种是常数乘性增长和常数乘性减少[2]。另一种是常数加性增长和常数乘性减少[3]。
  1. 常数乘增长和常数乘减少控制算法其中, pre Rate 为上次发送速率, now Rate 为计算后当前的发送速率,α 乘性增长因子;PacketLost 为由RR 报文得出的丢包率;ThresHold 为丢包率门限,用以判断当前网络是否发生拥塞;β 为乘性减少因子,一般来说小于1,当编码器端发现丢包率高于丢包门限的时候,认为网络拥塞发生,将当前发送速率乘以β 降低速率。当网络空闲时,以乘性增长因子α 为倍数提高发送速率。这样的方法有一个缺点,由于RTCP 每隔5 秒钟才根据解码器端提供的QOS 信息调整发送速率,在此期间以乘性因子的速度提高发送速率容易加重网络拥塞,使RTP 传输抖动。第二种方法采用加性增长因子来解决这一问题。
  2. 常数加增长和常数乘减小控制算法加性增长方式能够平稳增加RTP 流量,更好的适应网络带宽的变化。为了适应网络的变化,本文将以拥塞控制算法设计一个基于宏块的打包方法。提高MPEG-4 的传输质量。
  4.MPEG-4 分包方法改进
  4.1 以VOP 为单位分包方法
  网络上传输的MPEG-4 数据首先要经过RTP 的分包处理,因为有最大传输单元的限制,为了RTP 包在传输时不造成IP 碎片,必须限制RTP 包的分包包长。如果采用硬分包技术,一个RTP 包会根据最大传输单元(MTU)切割[4]。这样容易造成MPEG-4 关键编码信息的破坏,一个包的丢失会导致可能会导致其他数据包无法解码。现在常用的分包方法是基于RFC3016 的以视频对象平面(VOP)作为基本封装单位的方法[5]。
  (1)一个MPEG-4 编码信息头部数据,应该紧跟RTP 头部后的载荷开始部分,不应分开存放到多个RTP 包中。
  (2)不同的VOP 映射到不同的RTP 包中,如果一个VOP 太小,可以将几个连续编码的VOP 映射到一个RTP 包中,这时需要将RTP 包中的M 域设置为1。
  (3)如果VOP 大小超过最大传输单元(MTU),将其按MTU 为单位分割,需要注意的是,如果分割点在宏块上,要将该宏块放入下一个RTP 分包中,保证宏块的完整性[6]。
  这样的分包方法有一定的局限性,当网络拥塞的情况下,一个RTP 包的丢失,往往会导致解码器端图像质量的迅速下降[7]。大面积的宏块丢失会造成时间域上的错误累积,错误恢复的技术也很难弥补。以部分宏块为单位分包可以很好的解决这一问题,一个包的丢失只损失几个宏块的信息,通过错误隐藏技术可以再一定程度上保证解码图像质量。本文在VOP为单位的分包技术上提出了一种根据网络状况调整分包策略的以宏块为最小单位的打包方法。
  4.2 基于宏块的自适应分包方法
  根据网络丢包率分析当前网络状态,可以根据拥塞控制调整的发送速率作为我们封装宏块个数的依据。首先设置一个丢包率上限thresholdMax 和一个丢包率下限thresholdMin。如果丢包率低于丢包率下限packetlost ≤ thresholdMin,可以认为当前网络空闲,以VOP为基本单位分包。如果丢包率高于丢包上限packetlost ≥ thresholdMax,可以认为当前拥塞严重,按一定比例的减少RTP 包的宏块封装单位,RTCP 拥塞控制算法根据丢包率改变发送速率,调整后的发送速率与之前的发送速率的比值可以用作我们衡量增加的分包宏块数的增长幅度。我们使用_ ( ) pre now pre MB No × Rate ÷Rate 来表示新的宏块数,为保证分入包的宏块个数过少导致传输效率太低,设置一个最小封装宏块数Min _MB,分包宏块数不应低于这个值。
  MB No 为当前计算的新的宏块个数, _ pre MB No 为上次分包的宏块个数,Min _ MB为设置的最小宏块个数, pre Rate 为上次发送速率, now Rate 为经过拥塞控制算法计算后的当前发送速率,[ ] 为取整数符号。
  当丢包率thresholdMin ≤ packetlost ≤ thresholdMax,网络处于均衡状态,通过拥塞控制算法加快发送速率,增加分入RTP 包的宏块数:
  具体的打包规则如下:
  1. MEPG-4 的码流头信息时解码关键信息,单独分成一个包发送。
  2. 网络空闲时,以VOP 为单位兼顾最小传输单元分包一帧数据。
  3. 丢 包率高出最大门限时,启动宏块分包机制,初始的分包宏块数设置为Max _ MB×β 。
  4. 丢包率从严重状态慢慢恢复时,增加宏块数直至到达最大宏块限制Max _MB,等到packetlost ≤ thresholdMin时,开始以VOP为单位打包。
  5. 复制 MPEG-4 码流头部信息至最后一个RTP 包并发送,首尾发送双包头可以有效的保证这个码流头部信息的准确性。把传输错误限制在宏块级别。
  可以预见,当网络丢包严重时,以VOP 为单位分包的方法在传输的过程中将造成数据的大量丢失,解码质量迅速下降。这时根据拥塞状况降低帧率,同时启动以宏块为单位的分包机制,一个RTP 包只包含少量的宏块,即使丢失分组也只是丢失几个宏块的数据,在解码器端通过错误隐藏可以恢复图像质量至较高的水平。当网络从拥塞中恢复时,增加分包宏块的数目,慢慢恢复包中的宏块数至Max _MB水平,如果此时丢包率低于最低丢包门限,可以认为网络状态接近空闲状态,提高帧率,同时重新恢复VOP 为单位的分包方法,视频传输流畅。
  5. 试验结果分析
  为了测试本文设计的自适应分包方法,发送端采用带MPEG-4 硬件编码器的FIC8120以初始25 帧/s 的速度采集视频,MPEG-4 压缩并发送至PC端,传输模块采用开源的JRTPLib,PC 端采用XVID 解码实时显示。采用两套系统测试,一套采用VOP 为单位分包方法,另一套采用自适应分包方法。试验结果如下:
  可见,以VOP 为单位分包在丢包率为11.32%时,网络拥塞情况比较严重,同时期的自适应分包方法能够通过宏块的分包,减小包的容量,缓解网络的拥塞,将丢包率控制在5.23%,虽然总的分包数变大,但是丢包数比VOP 为单位的丢包数小,而且宏块信息丢失的最少,图像质量损伤最小,解码质量较高,这个时候宏块分包的优势最明显。
  6.结论
  本文采用的对 MPEG4 码流的自适应分包算法,是在VOP 为单位分包方法的基础上的改进。依据网络上的拥塞情况和可用带宽动态的使用基于宏块和基于VOP 的分包方法,大大降低了丢包率,同时保证了图像的传输质量。实验表明,在网络拥塞严重的情况下,自适应分包方法能取得更好的效果。该方法对无线信道传输的研究也有一定的借鉴意义。
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值