- 易迪拓培训,专注于微波、射频、天线设计工程师的培养
一种面向无线视频流的包丢失处理算法
摘要:论文基于无线视频传输系统,讨论了在CDMA无线网络环境下终端丢包情况下的处理方法。该差错控制机制基于UDP协议包括失序差错检测、NACK差错通告、选择重传、缓存管理和请求队列管理几个部分,具有差错反应迅速、允许多次请求重传、状态信息和控制信息少的特点,通过缓存管理和请求队列管理,避免了无效的重传请求和重传数据包,进一步降低发送端和网络资源需求。实验证明,提出的方案能有效提高实时终端视频的重建质量。
关键词:无线视频;差错控制;缓存管理;请求队列管理
一、引言
随着移动通信技术和视频压缩方法的迅速发展,利用无线IP网络传输实时视频流技术受到了人们的关注。在无线IP网络和尽力服务(best-effort)的Internet中传输数据时会发生丢包、超时等传输差错。由于视频压缩编码技术极大程度地去掉了视频帧内和帧间的冗余性,一个视频数据包的丢失会影响其它数据包的解压缩,一个视频帧的丢失或损坏同样会影响到其它相关帧的解压缩,直接损害接收端视频播放的流畅性和清晰性。因此,需要在视频传输的同时进行传输的差错控制处理。
目前许多多媒体应用通信中使用UDP协议传输数据,但UDP协议不提供TCP提供的差错控制功能。在TCP协议中,发送端通过发送窗和计时器管理所发送的数据包的信息,接收端对收到的正确数据包回送ACK响应。发送端通过ACK响应和计时器超时决定数据包重传。为避免无效重传,计时器时限往往设置较大,不适合传输实时数据,另外,视频流数据量大, ACK响应本身也将耗费相当多的网络和处理器资源。基于上述分析,本文在自行设计的无线视频传输系统上,针对CDMA模式下无线IP网络中视频流传输出现的丢包问题使用了一种基于UDP协议的包丢失处理算法。
二、无线视频传输系统[1]
本文研究对象——无线视频传输系统[1]是由无线视频发送终端、公网视频转发服务器和视频接收显示端三个模块组成的,采用CDMA接入,实现无线IP视频传输。无线视频发送端主要完成视频的采集,H.263压缩编码、码流的发送控制等工作;视频转发服务器用于移动终端和视频显示端的注册请求控制以及视频流转发服务;视频接收端则能完成码流数据的解码显示,硬盘存储和回放功能系统构成(如图1所示)。
图1无线传输系统框架
三、 基于UDP协议的包丢失处理算法
本文提出的包丢失处理机制由视频转发服务器实现缓冲管理、差错检测、请求重传以及重传信息管理,发送端负责重传所请求的数据包。在CDMA网络模式下,采用UDP协议来实现视频流的实时传输,容易发生数据的丢包。因此系统采用RTP/UDP/IP方案,利用RTP[2]协议在UDP数据包中添加时间戳和序列号等控制信息,实现丢包重传,提高网络传输的可靠性。设从发送端到接收端(公网服务器)网络传输时延为T1,系统RTT为T2。发送端发送的视频码率为V,数据包大小为N,发送端和接收端缓存大小分别为S和R。
1 。失序差错检测和通告[3]
本文使用失序(out of sequence)差错检测方式由接受端(公网服务器)通过视频数据包的数据包编号的连续性进行差错检测。编号不连续的数据包相继到达称为失序,表明发生数据包丢失。数据包i+2继于数据包i到达,表明数据包i+1丢失。这种方式对随机性差错能够即时反应,即使对于连续的数据包丢失(突发性丢失),失序差错检测也能良好地工作:一方面因为突发性丢失周期往往远小于接收端缓冲时间;另一方面,只有新的数据包到达才表明网络拥塞状态解除,而在拥塞依然存在的情况下进行请求重传明显是不明智的。
接收端通过NACK向发送端通告数据包的丢失信息,并请求重传。对于数据包数目达到数十万甚至数百万的视频通信,通过NACK进行差错通告显然能够节约网络资源,同时不需要发送端管理已发送的数据包的确认状态,而接收端也只需管理需要重传的数据包状态信息,因此NACK差错通告方式具有状态信息和控制信息少的特点,尽管NACK不能提供完全可靠传输(NACK本身也可能丢失),然而对于视频流而言,实时到达更为重要。对因超时而无效的数据包努力恢复只会增加无谓的带宽和处理器资源消耗。
在发送端,发送端按周期P将当前发送缓冲中的视频帧打包发送,其中V = N * P同时丢弃重传缓冲中最早的视频数据包,发送端一方面必须保证来自接受端的有效重传请求所需的数据包存在与重传缓存;另一方面不允许不可能有效的数据包存在于缓存。数据包已不能于回放时刻前到达接受端,属于该帧的所有数据包必须从缓存中删除。因此我们可以确定发送端重传缓存大小:S = R + T2 * V。在接收端,接受端对收到的数据包进行有效性检验:如果其数据包编号小于当前转发数据包编号,表明该包无效,并丢弃;否则放入缓存。
2.选择重传
发送端缓存数据包并根据ARQ请求提供选择重传服务。因为不再需要管理已发送数据包的计时器和ACK状态信息,由接收端驱动的差错控制很大程度地降低了发送端的工作负荷,这对于计算能力有限的嵌入式发送端是非常重要的。
由此可见,由接收端驱动的差错控制机制将主要差错恢复工作转移到了接收端,这种转移具有差错反应快、恢复时延低、状态信息和控制信息少、能够减轻发送端工作负荷的优点。
重传请求用队列管理,请求队列管理的目标是:保证请求的有效性,即根据请求得到的重传数据包应该能够在转发之前到达;针对NACK或重传数据包可能丢失,允许多次有效的重传请求,最大化重传成功的可能性。本文通过为每个请求设置两个计时器的方法实现上述两点要求。根据一个要求重传的数据包在转发前到达方可有效设置寿命计时器Timer1。根据在请求发出后经过一个RTT后重传数据包没有达到,我们有理由相信重传失败(NACK丢失或重传数据包丢失)。通过设置重发计时器Timer2允许再次发出有效请求,通过多次重传最大化重传成功的可能性。请求队列管理[4]包括以下几个部分
(1)失序检测每生产一个NACK请求,该请求立即发出,并压入请求队列,为该请求初始计时器Timer1,Timer2;
(2)每一个重传包到达,从请求队列中删除相应请求;计时器超时操作:如果Timer1超时,删除该请求;如果Timer2超时,重传该请求,并重置计时器Timer2。
四、差错控制过程及实现
接收端驱动的ARQ差错控制过程包括如下步骤:(算法流程图如图2)
图2 接收端重传包处理流程
1. 发送端将发送缓冲中的视频帧打包发送,并将当前发送的数据包压入缓存,同时丢弃缓存中最早的数据包。
2. 视频数据包到达接收端,接收端对其进行有效性检验,如有效则压入缓冲,否则丢弃。部分数据包在传输时丢失,接收端通过失序差错检测,对丢失的数据包发出NACK重传请求,并将NACK压入请求队列。
3. 发送端收到NACK请求后立刻检查缓存,如果所请求的数据包存在则立即重发,否则丢弃该请求。
4.接收端对重传数据包进行同样的有效性检验和压入缓存操作,并删除相应请求。请求队列管理对可能丢失的请求进行多次重传,并删除失效请求。
5.接收端同时周期地将缓存的数据打包转发给客户端。
五、 实验结果
过大的缓存不仅浪费主机资源,而且会导致无效数据包的重传,进一步浪费主机和网络带宽;缓存过小则无法满足有效的重传请求。通过实验我们确定接收端缓存为45个数据包大小。我们进行了10次随机测试,丢包率是10次测试的平均值。测试时间为500秒,码率平均为5帧/秒。
按照以上方法,计算得到重传与非重传情况下的丢包率(按%计算),如图3所示。
图3 非重传与重传视频丢包率比较
实际视频效果对比如图4所示。
图4 非重传与重传视频图像质量对比
六、 结束语
本文在自行设计并实现的无线视频传输系统上,针对CDMA模式下无线IP网络中视频流传输出现的丢包问题使用了一种基于UDP协议的包丢失处理算法,具有差错反应迅速、状态信息和重传控制信息少、资源需求低的特点,符合实际应用要求。本文通过请求队列实现多次有效重传,进一步提高了包丢失恢复率。实验证明,本文使用的差错控制机制能够有效降低视频数据包在无线网络环境中的包丢失率。
上一篇:如何快速创建开关电源的PCB版
设计?
下一篇:浅谈电视播控机房的安全策略