在RTP会话中,RTCP周期性地给所有参与者发送控制包,应用程序或第三方监控者接受RTCP控制包,从中获取控制信息,估计当前QoS,以便进行传输控制、拥塞处理、错误诊断等。
RTCP报文头部参数首先要区别携带不同控制信息的RTCP报文的类型,RTCP报文的类型主要有以下几种:(1)SR:发送报告,当前活动发送者发送、接收统计;(2)RR:接收报告,非活动发送者接收统计;(3)SDES:源描述项,包括CNAME;(4)BYB:表示结束;(5)APP:应用特定函数。其中最主要的RTCP报文是SR和RR。通常SR报文占总RTCP包数量的25%,RR报文占75%。
通过这5种控制包,RTCP协议实现了以下4个主要功能:
(1)提供数据发布的质量反馈,这是RTCP最主要的功能。作为RTP传输协议的一部分,与其他传输协议的流和阻塞控制有关。反馈对自适应编码控制直接起作用。反馈功能由RTCP发送者和接收者报告执行。
(2)送带有称作规范名字(CNAME)的RTP源持久传输层标识。如发现冲突,或程序重新启动,SSRC标识可改变,接收者需要CNAME跟踪参加者。接收者也需要CNAME与相关RTP连接中给定的几个数据流联系。
(3)根据参与RTP会话的数量调整RTCP的发送速率。
(4)传送最小连接控制信息,如参加者辨识。最可能用在“松散控制”连接,那里参加者自由进入或离开,没有成员控制或参数协调,RTCP充当通往所有参加者的方便通道,但不必支持应用的所有控制通信要求。
3 由RTP包分析影响多媒体数据流实时传输的因素
随着VoIP领域不断发展,满足网络QoS检测需求的应用也成为引人注目的焦点。IP QoS是指IP的服务质量,也是指IP数据流通过网络时的性能。目的就是向用户提供端到端的服务质量保证。有一套度量指标,包括业务可用性、延迟、可变延迟、吞吐量和丢包率等,现就项目中在上海阿尔卡特网络支援系统有限公司NGN实验室中所得到的RTP和RTCP包进行分析,主要研究其中3个因素,从而达到对实时流媒体数据进行监控的目的。
3.1 抖动
抖动会引起端到端时延的增加,引起语音质量的降低。在音频数据的传输过程中,由于传输延迟的不稳定而造成相邻数据包接收时刻间隔不稳定,从而产生抖动。消除抖动的主要依据就是RTP包的首部中包含的时间戳字段。时间戳标志着该段音频数据中第一个采样点的采样时间。每两个RTP包的抖动可以用其RTP包中的RTP时戳和接收的时刻进行计算。
关于包的传送时间,接收者最先了解到的是它的时间戳和接收者当前时间之间的差值。该差值是:Di=Ri-Si,表示从包被盖上戳开始,到它在信源的输出链路上被实际发送为止,其中的传送时间和某个机器时间。RFC 1889建议使用NTP来完成端点的端到端同步,但是也有非同步端点实现存在。
包i和包j之间增加的延迟差(二阶效应)计算公式如下:设Rj代表第j个包的接受时刻,Sj代表第j个包的RTP时戳值,则第i个RTP报文与第j个RTP报文间的抖动为D(i,j)
在生成RTCP报文时,其应当传送的时延抖动的值可用以下公式进行递推计算
其中:J为要传送的时延抖动值。对后一项除以16是为了消除连带噪声。
抖动是分组交换的必然结果,影响抖动的因素一般和网络的拥塞程度有关。由于语音同数据在同一条物理线上传输,语音数据通常会由于数据报文占用了物理线路而导致阻塞。解决抖动通常采用缓冲队列来解决(在网关、IAD上均有JitterBuffer来消除抖动),每收到一个数据包,先将其放人缓冲区,应用程序在缓冲区另一端取数据,只要缓冲区足够大,抖动一定能被平滑掉。而错序是由于网络拥挤而使某些后发的数据包先到达收端而引起的,只要设置足够大的缓冲区来对数据包重新排序,就能解决这个问题。或者需要IP承载网采用QoS策略,保证语音数据的最高优先级,得到最先发送和获得高带宽也是解决抖动问题的主要手段。
3.2 时延
时延是处理和传输导致数据不能按时到达的延迟,是影响流媒体数据传输的一个主要因素。话音信号在端到端传输过程中受到的时延迟滞通常包括:编解码器引入的时延、打包时延、去抖动时延、承载网上的传输节点中排队、服务处理时延。这些时延累计的总和将影响话质,导致回声干扰和交互性的劣化。对于VoIP系统,规定时延一般控制在150 ms内。
分组语音网络中的延迟可分为固定延迟和可变延迟。前者相对容易得到,笔者不作考虑。在计算丢包率时,主要考虑可变延迟。丢包判定等待时限Twait设定的大小在很大程度上影响丢包率计算的准确性,也就是可变延迟的影响,它与语音包的传输延迟Ttrf有关,Twait越大等待时限就越长。但不能超过保证语音流连续播放的时间上限Tmax(Tmax一般取250 ms),即:Twait=min(Twait,Tmax)。Ttrf可根据RTCP协议的SR控制包中的NTP(Network Time Protoco1)时间戳计算得到,见图2。
使用RTCP包计算网络时延要求在两个端点之间传送发送方报告(RTCPSR)。RTCP包中的报文类型以二进制表示,其中十进制的200代表此包的报文类型为SR(发送报文)。收到200的包类型,表明可以提供足够的信息,计算与这个SSRC有关的发送方的延迟。那么就计算发送方流(SSRC)和源流(SSRC_n)之间的双向延迟。每次在收到RTCPSR包时,必须保存上一个时间戳(Last SR Timestamp,LSR)和DLSR(Delay SinceLast SR)值。SSRC的LSR域是从该SSRC接收到的NTP时间戳的中间32 bit,只要接收到一个NTP时间戳就可以了。如果没有接收到NTP时间戳,那么这个域应该设置为0。信源可能无法获得时钟,或者其他可接受的消逝的时间。因此,在会话持续期间,特定SSRC的这个域可能保持为0。DLSR域是端点从发送者那里接收到一个SR以后过去的时问。这个计数器的每一步代表1/65 536 s。一般来说,在NTP时戳,LSR或DLSR等于零时,不应该计算双向延迟。网络传输时延Ttrf即为双向延迟的一半。具体计算方法如下:设目的网关接收源网关发送的控制包SRi,经过一段时延DLSR后,向源网关发送相应的响应SR控制包SRj,并从控制包SRj中的NTP时间戳域中提取中间的32 bit作为控制包SRi的LSR。如果没有收到源网关发出的SR控制包,则L5R和DLSR都置为0。最后,将DLSR和LSR的值填入到控制包SRj的相应域中。设源网关接收到控制包SRj时刻为A,则当前网络传输延时为
Ttrf=(A-LSR-DLSR)/2 (3)
由实验包中的数据得出的Ttrf是使用32 bit归一化NTP时戳计算的,所以要把延迟转换成毫秒单位,结果中前16 bit将与延迟秒数对应,后16 bit与1/65 536 s的数字对应。因此,上面16 bit必须乘以1 000,把秒转换成毫秒。下面16 bit必须除以65 536,然后再乘以1 000。两个因数之和可以得到最终结果。
实时语音传输要求端对端时延不能太大,端到端的时延要求分成4个等级:≤150ms(最好)、150~250ms(较好)、250~450ms(一般)和450ms以上(差)。可以通过设定IP优先级、路由选择、RED(随机早期检查)等技术来缩短IP网络时延。
①优先级是指对每个数据包的级别进行分类,不同级别的数据包在网络进行预留带宽分配、通过顺序、时延抖动、丢包等方面处理时,所受到的待遇不同,这样可以确保语音、图像等对实时性要求比较高的数据包优先传输,以提高传输质量。
②选择合适的路由绕过那些负载过重的路由器,直接连到主干网进行传输。
③当网络拥挤发生拥塞时,RED就优先丢弃一些对话音影响较小的数据包,并让终点站降低传输速率,避免路由器或交换设备缓冲区溢出。
此外,采用流量控制、队列管理、数据包保护技术也可以提高网络的管理性能,从而缩小网络时延。
3.3 丢包率
丢包率定义为在网络中传输数据包时丢弃数据包的最高比率。数据包丢失一般是由网络拥塞引起的。丢包对VoIP语音质量的影响较大,在本实验环境中,采用G.711时,当丢包率大于10%时,已不能接受,而在丢包率为5%时,基本还可以接受,因此,要求IP承载网的丢包率小于5%。
丢包率为单位时间内丢失的语音包的数目。检测的具体方法是统计语音流中的连续2个SR(发送端报告控制包)的时间间隔Tint内实际接收语音包的数目Nreal,然后按下面公式来计算丢包率Rlost
Rlost=(Nexp-Nreal)Nexp (4)
其中:Nexp为期望的语音包数目,它等于在Tint内接收到语音包的最小序号Ni和最大序号Nj之差,用下面公式来表示:Nexp=Nj-Ni,实际接收到的语音包Nreal可能包括在Tint之前的迟到包(由于语音数据采用UDP协议传输,不存在重复包),所以计算所得的丢包率会出现负数。此时丢包率定义为0。
丢包率的计算可在每个丢包判定等待时限内计算,也可按照一定的时间间隔来计算一次,而这个时间间隔要根据网络的负载、网络的稳定情况来确定。为了减少网络的负载,不是每次计算的丢包率都要反馈给源网关的,而是事先根据网络用户期望的语音质量来确定两个丢包率状态的阈值R1和R2。对于音频而言,取R1=3%,R2=8%。当Rlost>R2时,将丢包率信息的标志位,置为“overload”(拥塞),表示网络处于拥塞状态等。
根据RTP头中的sequence number域,可以在接收端很轻易地发现包丢失,为丢包修复奠定基础。在实际使用中发现,绝大多数丢包是单个丢包,两个或两个以上包丢失的比例较小。针对单个包的丢失,传统的丢包处理方法有两种:一种方法是重发,但在传输语音数据时,重发将引起播放质量下降,出现无法识别的话音或回音现象;另一种方法是忽略,这同样会影响播放质量。更好的方案是使用拆分法优化丢包损失。拆分法的基本思想是:在发送端把原来要打入一个RTP包的话音数据按照采样间隔分成两块,然后采用相同的压缩算法分别压缩、打入RTP包,并标记相同的时印进行传输。在接收方执行相反的过程,把解压缩后的数据采样、合并、回放。
如果某个RTP包在传输过程中丢失,那么丢失的只是原数据包按采样间隔的一半信息,接收端可以用接受到的另一半信息,利用插值等方法恢复出原话音包的大部分信息,从而使话音质量不至于下降太多。
posted @
2009-08-03 18:10
shelvenn's blog
阅读(
2988 )
评论()
编辑
收藏
举报