absMiddle" border="0" onload="return imgresize(this);" onclick="javascript:window.open(this.src);" style="cursor:pointer;"/>
在网络带宽比较低的情况下(如十几KBps),数据丢帧现象比较严重,这对于图像质量有很大的影响。我们采用拆帧(拆成1400个字节)以后再发送的方法,来降低丢帧率。接收端收到数据后,再把属于同一视频帧的数据再组起来。
网络发送接收程序流程图如图3所示:
absMiddle" border="0" onload="return imgresize(this);" onclick="javascript:window.open(this.src);" style="cursor:pointer;"/>
图3 网络发送接收程序流程图
对程序流程图的说明如下:
(1)发送端拆帧的算法如下:
absMiddle" border="0" onload="return imgresize(this);" onclick="javascript:window.open(this.src);" style="cursor:pointer;"/>
然后把属于同一视频帧的数据组好,发送到解码Filter。
经过测试(在CDMA1.X网络下),采用拆帧方法传输视频数据比直接发送丢包率更低,传输质量有了很大的提高。
3.3 数据解码及回放的实现
解码Filter使用的是Divx提供的开源解码器,在接收Filter的后面接上该解码Filter即可,最后接上Renderer Filter就可以把接收到的数据回放出来。
3.4 实现帧率控制功能
通过在采集设备和编码Filter(DivX Pro(tm) 5.1.1 Codec)之间加入一个帧率控制Filter来实现帧率的控制,该Filter相当于一个视频帧数计数器,每接收到一帧,并不立即把该帧发给下游的编码Filter,而是把计数器的值加1,当计数器的值达到最大值时才把当前收到的帧发出去。在接收端发控制帧率命令给采集端可以很方便的实现帧率的远端控制。
程序片断如下:
absMiddle" border="0" onload="return imgresize(this);" onclick="javascript:window.open(this.src);" style="cursor:pointer;"/>
加了帧率控制Filter的发送端 Filter Graph 如图4所示:
absMiddle" border="0" onload="return imgresize(this);" onclick="javascript:window.open(this.src);" style="cursor:pointer;"/>
图4 实现了帧率控制的Filter Graph
4 总结
该系统采用了DirectShow技术实现了MPEG-4视频数据的传输,视频数据的传输采用了RTP协议。而且还实现了远端帧率的控制,该系统可以很方便的移植到未来3G网络的图像传输系统中。对编解码器进行研究,采用H.264技术实现编解码Filter是下一步要完成的工作,当然在传输质量(QoS)方面也要深入进行研究。