实时视频数据传输中接收端缓存区的设计

2010-07-13 06:01盖晓娜陈名松曾欣旖
电子设计工程 2010年2期
关键词:缓冲区接收端指针

盖晓娜,陈名松,曾欣旖

(桂林电子科技大学 信息与通信学院,广西 桂林 541004)

Internet是人们学习、生活、工作中获取和传输信息的重要途径,而网络应用对数据传输的实时性提出更高要求,因此,需要新型高速的网络协议支持。RTP/RTCP协议、RTSP协议、RSVP协议协同合作,共同完成网络实时多媒体应用的数据传输和控制、资源预留以及服务质量保证等工作。其中RTP/RTCP协议是实时视频传输重要的协议之一。实时视频数据的传输过程中,如果接收端读数据者和写数据者的速度不同,则会造成读写负荷不均衡,导致数据丢失或系统出错。而缓冲技术可解决数据读写速率不一致的矛盾,提高实时传输系统的工作效率[1]。

1 RTP/RTCP协议

实时传输协议 RTP(Real-time Transport Protocol)是应用于Internet上针对多媒体数据流的一种传输协议。RTP定义为在一对一或一对多的传输情况下工作,用于提供时间信息和实现流同步[2]。RTP协议采用应用帧原理,只提供基本的协议框架,开发者可以针对具体应用进行扩展。该协议位于UDP协议之上,在功能上独立于其下面的传输层和网络层,但不能单独作为一个层次存在,通常是利用UDP协议对实时音视频数据进行组播或单播,从而实现多点或单点音视频数据的传输。

实时传输控制协议RTCP(Real-time Control Protocol)是RTP协议的控制部分,用于拥塞控制和流控制。在RTP会话期间,会话中的每个用户定期发送RTCP包反馈统计信息(如发包数、丢包数、时延等),发送方据此调节发送速率。RTP和RTCP配合使用,为音视频数据的实时传输提供Qos保障[3]。

2 实时视频传输系统的结构

图1是实时视频传输系统的结构框图。视频数据传输时的视频帧较大,而RTP对所传送报文的大小有限制,因此需对其进行拆帧封装。实际工作中,通常把1 KB作为视频数据传输的MTU值,将大于MTU值的视频数据进行分割(即切帧)后封装打包。发送端服务器将压缩打包后的视频数据按照RTP的报文格式装入RTP报文的数据负载段,同时配置RTP报文头部的时间戳、同步信息、序列号等重要参数,此时的数据报已具有时间特征,即已被“流化”[4]。在UDP/TCP层,RTP报文作为负载数据装入UDP/TCP报文中,由IP层完成最后的报文头部配置,实现网络传输。

图1 实时视频传输系统的结构

由于网络是动态变化的,各数据包的传输路径不同,到达接收端的时间也不同,有可能后发送的先到达。所以接收端需重组视频切帧,重组过程必须是对发送端的报文封装和打包标准进行逆变换。在重组过程中采取缓冲技术以减少延迟和抖动的影响。接收端综合RTP数据包和SR包计算出数据包的到达时延和丢失率,形成RTCP包(RR包)反馈给发送端,发送端根据RR包提供的网络信息调整发送策略[5]。

3 实时缓冲区的设计与实现

在接收端采用环形缓冲区重组视频帧。环形缓冲区通常有1个读指针和1个写指针。其中,读指针指向环形缓冲区中可读取的数据,写指针指向环形缓冲区中可写入的缓冲区。通过移动读指针和写指针实现缓冲区的数据读取和写入。通常情况下,环形缓冲区的读写指针同一时刻不会在同一内存区操作,因此读写数据过程中不会出现因收到的报文无法及时写入而丢弃的现象,无需采用互斥同步处理。但应注意要对判定满帧操作指针与写线程操作之间进行一些同步处理,因为视频缓存区的读线程中涉及到对视频满帧的判断,有可能与写线程发生冲突。但该同步处理不会影响缓存区的工作效率,因为判定满帧操作的时间比读写指针操作时间短。

如图2所示,写指针从时刻1写入数据,到时刻2储存满帧。满帧判定指针从读指针处开始,不断循环判断是否满帧,具体判定方法如下:首先,分别设计视频帧头部起始和帧尾部分为4字节的0X00000000和4字节的0XFFFFFFFF,作为视频数据开始和结束标志。判定指针先判定读指针后4字节是否为0X00000000,若是则判定为帧起始处,继续读2字节的数据,可推算出该视频帧的实际长度等于该数据减去16字节的帧头帧尾。根据帧实际长度移动判定指针到帧尾部,判定是否为0XFFFFFFFF。如果是则判定为满帧,可直接从读指针位置读取视频帧信息。在写数据包中,如果接收到乱序数据包,则直接丢弃,同时写指针返回到本帧起始位置。

图2 环形视频缓冲区

图2中,如果在时刻3收到乱序报文,则直接丢弃该报文,写指针返回时刻2,等到下一切帧的0报文到达后重新开始写入。在写指针到达缓冲区尾部时刻4时,可继续将剩余的视频数据填充到缓冲区头部,依此类推[6]缓冲区读写线程软件流程如图3所示。

图3 缓冲区读写线程软件流程

4 结束语

在通信程序中,环形缓冲区经常被用作数据结构来存放通信中发送和接收的数据。其读写指针在同一时刻不会操作于同一内存区,无需采用互斥同步处理,环形缓冲区可有效利用存储器空间,在实时传输中具有重要作用。

[1]黄毅封.支持阻塞和非阻塞模型且线程安全的环形缓冲的设计与实现—环形缓冲,攻克高级缓冲技术的关键[J].电脑编程技巧与维护,2003(11):2-3.

[2]Colin Perkins.RTP:audio and video for the internet[M].New york:Addison,2003.

[3]Schulzrinne H, Casner S,Frederick R,et al.VRTP:a transport protocol for real-time applications[J].RFC 1889,1996(1):256-258.

[4]李燕岭,马瑞芳,左 力.基于RTP/RTCP的实时视频数据传输模型及实现[J].微电子学与计算机,2005,23(8):138-142.

[5]许花荣,李名世.基于RTP的实时视频传输系统[J].计算机工程与设计,2005,26(4):876-878

[6]陈 锋.基于VOIP的PDA可视电话终端的设计与实现[D].桂林:桂林电子科技大学,2009.

猜你喜欢
缓冲区接收端指针
基于扰动观察法的光通信接收端优化策略
顶管接收端脱壳及混凝土浇筑关键技术
一种设置在密闭结构中的无线电能传输系统
基于多接收线圈的无线电能传输系统优化研究
基于网络聚类与自适应概率的数据库缓冲区替换*
为什么表的指针都按照顺时针方向转动
关键链技术缓冲区的确定方法研究
基于改进Hough变换和BP网络的指针仪表识别
初涉缓冲区
ARM Cortex—MO/MO+单片机的指针变量替换方法