引言
视频服务器是一套嵌入式视频监控系统,它能够对多媒体信号进行采集、编码、处理、存储和网络传输,进而实现广播电视、视频会议、远程监控等功能。近年来,随着互联网和信息技术的高速发展,以及视频服务器与互联网的结合,如何对网络协议进行优化,即如何在有限的网络带宽下高效地传输多媒体数据,并且避免造成网络拥塞,成为了视频服务器的研究方向之一[1,2]。嵌入式系统网络协议优化研究主要有两个方向:其一是高级网络协议对不同板卡芯片的移植,其二是UDP的拥塞控制算法研究。后者对于处理性能有限的嵌入式芯片来说,具有算法简单、系统资源占用率低、灵活性高等优点。本文即采用为UDP添加拥塞控制的方法,有效地改善了硬件资源有限的视频服务器的网络传输质量。
1 现有算法研究
多媒体数据在互联网上的传输依赖网络传输协议,几乎所有的网络协议都是根据传输层的TCP和UDP而建立的。TCP是一种面向连接的传输协议,它根据TCP包头所包含的时间戳、序号戳和确认标志等信息,为该连接提供排序、丢包重传、拥塞控制等可靠性保证。UDP是一种无连接的、不可靠的传输协议,不具备任何排序、重传和拥塞控制,因此,如果用UDP协议来传输多媒体数据,网络带宽会被迅速耗尽,而且随着网络状态的恶化,丢包数的增加也会影响传输质量。尽管如此,与TCP相比,UDP的无连接性质使其具有比TCP更高的实时性与快速性,更适于多媒体数据的实时传输。因此,具有拥塞控制的UDP连接可以使通信既快速又可靠。UDP拥塞控制算法大致分为两类:第一类是基于单阈值判断的AIMD(Additive Increase Multiplicative Decrease, 和式增加积式减少)控制算法,另一类是基于TCP吞吐量模型的TFRC(TCP Friendly Rate Control, TCP友好速率控制)控制算法[3]。
1.1 AIMD控制算法
AIMD控制算法的设计思想是:根据网络情况设定一个丢包率阈值,当丢包率低于阈值时,表示网络空闲,采用和式增加方式来提升传输速率,增加网络吞吐量;当丢包率高于阈值时,表示网络拥塞,采用积式减少方式来降低传输速率,进而减小时延和丢包率[4]。
AIMD算法流程[5]如下:
式中Ploss为丢包率,Plossmax为丢包率阈值,R为传输速率,α为积式减少因子,AIR为和式增加因子。
由于阈值设定过于简单,并且积式减少方式容易对传输速率造成大幅震荡[6],所以AIMD算法并不适用于实时性和快速性要求较高的多媒体传输。
1.2 TFRC控制算法
TFRC控制算法与AIMD算法类似,但是它对调速参数进行了更复杂的计算,即将丢包事件率、往返时延等信息代入TFRC吞吐量公式,计算传输速率的最大值,从而使该连接既能有效利用带宽,也不会过度消耗网络资源[7, 8]。
TFRC吞吐量公式[9]如下:
式中T为传输速率,S为最大传输单元,RTT为往返时延,t_RTO为重传超时时间,b在TCP没有延迟确认机制下取1,p为丢包事件率。
TFRC算法流程如下:
① 若T(t)≥T,则网络拥塞,T(t)=T;
② 若T(t)<T,则网络空闲,T(t)=min{T,S/RTT}。
尽管理想情况下TFRC算法表现良好,但其吞吐量公式包含信息过多,计算较复杂。
综上所述,以上两种算法都不适合硬件条件有限的嵌入式设备。所以,视频服务器的拥塞控制算法需要根据嵌入式设备的特点进行相应调整,既要满足多媒体数据的实时性和准确性,又要求算法简洁。
2 改进的视频服务器拥塞控制算法
2.1 拥塞指标的选取
网络情况的优劣可以通过一套互联网安全机制QoS(Quality of Service,服务质量)来体现,QoS指标包含丢包率、时延、时延抖动和吞吐量等[10]。加入拥塞控制的目的就是通过算法控制网络吞吐量,从而实现低丢包率、低时延和低时延抖动。
2.1.1 丢包率
丢包率是评判网络情况最简单的指标,而丢包也会直接影响多媒体实时数据的完整性,过高的丢包率将严重影响接收方的用户体验。影响丢包率的因素有很多,例如,接收方设备处理性能较弱,当CPU占用率较高时无法快速地从网卡缓冲区中提取数据,使得数据将缓冲区充满而造成丢包;路由器路由、转发能力较弱,短时间内过量的数据包会将路由器内部转发队列逐渐充满,当队列饱和时,后续到来的数据包就会被丢弃。丢包率ρ(t)计算公式如下:
式中ρs和ρr分别为单位时间内发送方发包个数以及接收方收包个数。因此,在发送方包头添加序号戳,接收方根据序号戳和接收个数就可计算出单位时间内的发包、收包数量,从而计算出丢包率。
2.1.2 网络时延和时延抖动
网络时延是指数据包从发送方发送到接收方接收所经历的时间,它包括4个部分:发送时延、传播时延、处理时延、排队时延。时延抖动是指网络时延的变化。网络时延和时延抖动是影响多媒体实时数据用户体验的一大重要指标。
在局域网条件下,网络中所有主机都在同一网段,数据通过广播的方式传播,交换机通过MAC地址表进行数据转发,速度很快,因此交换机内基本不产生处理时延和排队时延。同时,局域网物理距离相对较短,传播时延也可以忽略不计。若发送方设备没有设定任何发送队列,局域网通信是不存在时延和时延抖动的。
在广域网条件下,网络中主机不在同一网段,路由器通过IP地址进行路由和数据转发,速度较慢,并且路由器会建立转发队列用以缓冲待处理的数据,所以路由器内会产生处理时延和排队时延。同时,广域网物理距离相对较长,传播时延不可忽略。因此,广域网通信是存在网络时延和时延抖动的。
对于视频服务器来说,远距离的广域网通信是它的一大特点,拥塞控制中应考虑到网络时延、时延抖动的问题,同时为了减轻网络负担,用单程时延代替往返时延。在发送方包头添加时间戳,在接收方根据发送方的时间戳和接收时间就可计算出网络时延,从而计算时延和时延抖动。
综上所述,本文所改进的拥塞控制算法是在数据包头添加序号戳和时间戳,通过测定丢包率、时延和时延抖动来对网络情况进行估计与判断的。
2.2 调速机制的选择
嵌入式多媒体数据调速的机制是,在每两个数据包或者每两组数据包的发送之间经历一段时间的系统延时,通过系统延时的长短控制网络吞吐量。
上文提到的所有调速机制都是基于传输速率的,即通过公式计算下一时刻单位时间应发送的数据量,然后进行调速。这样的机制对于CPU处理性能较高、系统时钟精度较高的计算机来说是准确且有效的,但是对于系统资源有限的视频服务器来说是不合适的。首先,嵌入式系统时钟精度较低,某些片上系统时钟精度仅为数十毫秒,求得的速率无法精准控制。其次,嵌入式设备CPU处理性能较弱,所以应尽量优化算法,避免使用吞吐量公式来进行速率控制。
综上所述,对于视频服务器来说,不应采取基于传输速率的调速机制,而应采取基于系统延时时间的调速机制,既可以简化代码复杂程度,又可以有效控制吞吐量。
2.3 拥塞控制算法的改进
AIMD和TFRC算法都是基于单阈值判断的,即使采用了平滑处理和估计,也会因为阈值的选择过于简单而产生较大的延时抖动。因此,本文采用双阈值,并且改进了网络情况的判定方法。针对丢包率和时延这两个拥塞指标,分别采用基于丢包率的和基于时延的拥塞控制算法。
2.3.1 基于丢包率的拥塞控制算法
算法流程如图1所示。
图1 基于丢包率的拥塞控制算法流程
下面介绍基于丢包率的拥塞控制算法流程。
(1) 计算丢包率ρ(t)、丢包率估计值P(t)
根据丢包率公式计算第1时刻的丢包率ρ(1),以此作为第1时刻的丢包率估计值P(1)。然后计算第2时刻的丢包率ρ(2),通过平滑公式计算第2时刻的丢包率估计值。平滑公式[11]如下:
式中α为平滑系数,是0~1之间的数。当α接近1的时候,丢包率估计值P(t)接近丢包率ρ(t),平滑效果不明显;当α接近0的时候,丢包率估计值P(t)接近上一时刻的丢包率估计值P(t-1),过于平稳,无法及时跟踪当前丢包率。所以,应根据不同的需要,选择不同的α。在本研究中,为了兼顾实时性与稳定性,平滑系数取0.5。
(2) 归一化,计算丢包率等级L(t)
为了简化计算,将丢包率估计值P(t)进行归一化,使计算出的丢包率等级L(t)为0~1之间的数。公式如下:
式中β为可容忍的最大丢包率,此值根据不同需求自由选择。在本文中选3%作为可容忍的最大丢包率。
(3) 调速范围的选择
本文采用基于系统延时的方法对传输速率进行调整:在每两个数据包之间间隔一个系统延时,或两组数据包(每组有若干个数据包)之间间隔一个系统延时。系统延时的参数D(t)的范围是[Dl,Dh],其中Dl和Dh需要根据芯片性能、操作系统精度以及具体任务要求而选择。Dl和Dh计算公式如下:
式中Mh和Ml分别为单位时间内系统所允许的最大和最小数据传输量,Mave为每个或每组数据包大小。
(4) 拥塞情况的判断
设定两个拥塞阈值Lh和Ll,且0<Ll<Lh<1。[0,Ll]是空闲状态,[Lh,1]是拥塞状态。根据不同的丢包率等级L(t)和L(t-1)判定不同的拥塞情况,然后分别计算调速参数d。
情况1:L(t)≥Lh且L(t-1)<Lh,即t-1时刻未进入拥塞状态,t时刻进入拥塞状态,应通过增加系统延时来减慢传输速率。
情况2:L(t)≥L(t-1)≥Lh,即t-1时刻已进入拥塞状态,t时刻拥塞程度比t-1时刻更严重,应通过增加系统延时来减慢传输速率。
情况3:L(t)<Ll,即t时刻进入空闲状态,应通过减少系统延时来加快传输速率。
情况4:除了以上3种情况的其他情况,不需要作任何速率调整。
2.3.2 基于时延的拥塞控制算法
基于时延的拥塞控制算法和基于丢包率的拥塞控制算法基本相同,仅需要用相应的网络时延代替丢包率,然后代入以上公式计算即可。
针对局域网和广域网的不同网络环境,将以上两种拥塞控制算法以“或”的关系整合起来,就可实现对网络拥塞程度的判断和控制。
2.4 程序流程
具有拥塞控制的网络传输是一个闭环,网络连接涉及两个端口的不同类型数据的收发。视频服务器端和客户端都需要开启两个线程,建立两个套接字,对应两个不同的端口,分别进行多媒体数据和控制信号的传输。
2.4.1 服务器端的程序流程
服务器端的发送线程从缓冲区中取待发的多媒体数据,添加时间戳和序号戳后发送,然后检查是否获得了新的调速参数。如果获得,则修改系统延时参数;否则,按照之前的参数进行系统延时。接收线程接收来自客户端的速度反馈数据,一旦接收到新的调速参数,立即告知发送线程修改系统延时参数。服务器端程序流程如图2所示。
图2 服务器端程序流程
2.4.2 客户端的程序流程
客户端的接收线程接收来自服务器端的多媒体数据,
然后取其数据、序号戳和时间戳,按照上文提到的拥塞控制算法进行网络状态判断,并且计算出速度反馈值,告知发送线程。发送线程一旦取得新的速度反馈值就进行发送。客户端程序流程如图3所示。
图3 客户端程序流程
实验结果分析略——编者注。
结语
经过对现有拥塞控制算法的研究得知:AIMD控制算法容易造成较大的时延抖动,TFRC控制算法较复杂,系统响应速度较慢,不适合小型嵌入式设备使用。
针对视频服务器的硬件条件和多媒体数据的传输特点,提出一种改进的基于UDP的拥塞控制算法,采用前后两时刻的丢包率和网络时延变化来调整传输速率。实验证明,此算法有效地提高了网络QoS,并且适合嵌入式视频服务器使用。