近些年来,多媒体技术,网络技术和无线通信技术的迅速发展为相互之间的交叉融合奠定了基础,也使其成为信息产业发展的必然趋势,传统的Internet主要提供数据业务,无线通信主要提供语音业务,而多媒体技术的日新月异,使得文本、语音及视频综合加入Internet与无线通信领域的需求日益增长。对于音视频流的传输,如果采用TCP协议,由于TCP的检错和重传机制会大大增加数据包的延时,因此不符合音视频传输的要求,而如果单纯采用UDP协议,由于UDP不提供任何的QoS保证,因此传输质量不理想。而IETF制定的实时传输协议/实时传输控制协议(RTP/RTCP)使得在理论上具有提供多媒体实时传输的能力。
微软推出的DirectX提供了与音视频应用相关的SDK,开发者以此为跳板则可以较方便地实现语音与视频的捕捉、网络传输、解压、回放等功能,并可以根据需要来订制和扩充利用。
本系统设计应用于XXX设备与系统,主要实现前后方音频与视频的无线通信,音频传输部分基于DirectPlayVoice实现,视频传输部分基于DirectShow实现。采用典型的客户端/服务器结构,服务器端主要包括音频视频的采集与压缩以及数据发送,客户端主要包括数据接收以及音频视频解压播放,客户端与服务器端通过无线网连接。
3基于DirectPlay Voice的音频传输
DireetPlay Voice是DirectX系统的成员之一,应用DirectPlay Voice开发时可用的组件。
采用客户端/服务器模式时,使用IdirectPlayVoice-Client和IdireetPlayVoiceServer接口创建并管理一个声音会话。
3.1 混音
本系统实际应用中,经常需要多人同时语音会话,因此对混音效果有很高要求,DireetPlayVoice提供了多人会话时混音功能,并且C/S模式下提供了客户端混音,服务器混音两种混音方式。
客户端混音方式,通过转发服务器拓扑结构,选择会话中的一个客户端电脑充当转发服务器,每一个客户端把语音数据流送到转发服务器,转发服务器负责把收到的所有客户声音数据送到每一个客户端,然后每一个客户端把接收到的音频数据混音并播放。 服务器混音方式,选择服务器端电脑作为混音服务器,每一个客户端的声音数据流到混音服务器上,混音服务器会检测每个声音流的目的地,完成解压缩、混音,再压缩,把混音的音频数据送到每一个客户端,每一个客户端接受单一的预混和的音频数据并播放。
3.2语音延时、抖动消除
在语音传输过程中,由于网络等原因会发生语音延时、抖动,采取抖动缓冲技术,可以较好地解决这一问题。在接收方设定一个缓冲池,语音包到达时首先进入缓冲池暂存,系统以稳定平缓的速率将语音包从缓冲池中取出、解压,然后播放给受话者。这种缓冲技术可以在一定限度内有效处理语音抖动,提高音质。 为了确定呼话音包的正确时间间隔,在RTP的包头上提供了一个时间戳(Time Stamp),用于记录这个呼包的产生时间。在发送端网关产生的呼包①经过A,B的时间间隔和B,C的时间间隔均为20ms,经过网络传输,在接收端收到的呼包②的B,C的时间间隔变成了30ms;为了恢复原有的时间间隔,接收端网关根据每个呼包的RTP时间戳来确定呼包③的正确时间间隔,把他们恢复成原来的20ms向下设备发送。由于消抖动缓存池不是在接收到每一个话音包的情况下就立即转发,因此还要确定适当的转发延时的大小。如果延时太长,就会使系统整体的延时变得很长;如果延时太短,话音包在允许的时间范围内没有到达,话音仍会出现抖动现象,缓存池的作用不很明显。取两者平衡点的结果使缓存器的网络延时保持在40ms左右。
本系统实现时提供了两种混音方式和多种音频编码类型可选,因此能够适应网络带宽较差的环境,提供的编码类型如下:MS-PCM 64kb/s,MS-ADPCM 32.8kb/s,Microsoft GSM6.10 13kb/s,True Speech(TM)8.6kb/s,Voxware SC03 3.2 kb/s,'Voxware SC06 6.4kb/s。
DirectShow是一套完全基于COM的应用系统,COM组件有3种类型:进程内组件、本地组件和远程组件。Filter一般是一种进程内组件,以动态链接库(Dell)的形式提供服务。在Dir。ectShow体系结构中,Filter是基本的模块。
DirectShow对流媒体的处理是分步进行的,每项特定的处理由特定的Filter。来完成。Filter主要有3类:SourceFilters,Transform Filters和Render ing Filters。 SourceFilters主要负责取得数据,然后将数据往下传输;Trans-form Fitlers主要负责数据的格式转换、传输;RenderingFiltes主要负责数据的终去向。
在发送端,采集卡捕获的视频数据经过Divx MPEG-4 LOW-Motion Filter编码压缩,然后进行RTP打包,再发送到网络上。接收端使用RTP解包,Divx MPEG-4 Receivet Filter接收并缓冲视频流,然后由Divx Decoder Filter进行解码,由VideoRenderer Filter播放。同时引入RTCP进行传输质量控制。
4.1视频的压缩与编码
在视频传输的过程中,服务器和客户端的视频压缩、解压缩过程至关重要,视频的流量非常庞大,网络带宽的占用随着用户的增加大幅增长,这在要求高质量视频的时候为突出。针对这种情况,选择MPEG-4视频压缩算法,以提供高质量的视频质量。与现有的标准相比,在可比拟速率上,MPEG-4标准能提供更好的主观视觉质量的图像,一般来说MPEG-4的压缩倍数高达100倍。MPEG-4具有很强的容错性,这使得他广泛应用在各种媒体中,尤其在易发生严重错误的低比特率应用中,MPEG-4将提高抗错误能力。
4.2 RTP/RTCP协议
RTP协议是IETF在1996年为支持网络数据实时传输而制订的标准。RTP协议实际上是由实时传输协议RTP(Real Time Transport Protocol)和实时传输控制协议RTCP(Real Time Transport Control Protoeol)两部分组成。
RTP协议用来提供端到端的实时数据传输服务,包括有效载荷类型鉴定、数据序号、时间戳、传送监测。但是RTP本身并不能为按序传输数据包提供保证,他依赖于底层服务去实现这一过程,也不能提供流量控制和拥塞控制,这些都由实时传输控制协议RTCP来负责完成。
RTCP用来控制服务质量,并在正在进行的会话里传递各个参与站点的信息。在RTP会话期间,各站点周期性地传递RTCP包。RTCP包中含有已发送的数据包数量和丢失的数据包数量等统计资料。因此站点可以利用这些信息动态改变传输速率,调整缓冲区大小和个数,甚至改变有效载荷类型。RTP和RTCP配合使用,可以有效地反馈和以的开销使传输效率化,因而特别适合传送网上的实时数据。
4.3 DirectShow框架下RTP实现
在DirectShow框架下,多媒体数据以媒体样本为单位在滤镜之间流动。一个特定应用程序的滤镜图中,相邻滤镜的引脚之间流动的媒体样本类型一般不同。因此,传输两端需要选用合理滤镜图,确保服务器端传出的媒体样本能被客户端正确播放。
程序实现中,传输两端的滤镜图如图5所示。服务器采用摄像头滤镜捕获视频数据,向后传送,经过编码器滤镜压缩,传到MyRTPRenderer滤镜,并由他负责网络发送;在客户端,MyRTPSource滤镜收到MyRTPRenderer发来的数据,经过解码器滤镜解压缩后显示到屏幕渲染滤镜。服务器的编码器和客户端的解码器是配套的,保证服务器传输的媒体样本能被客户端正确解压播放。从客户端来看,网络对于用户透明,就相当于是一个远程摄像头捕捉、压缩、解压、播放的过程。
架中的两个RTP滤镜负责数据传输,而TCP传输的反馈控制在两端上层的滤镜图管理器中实现。
4.4 Filter实现
本系统中视频流的网络发送与接收通过自己开发的Filter来实现。
发送端Filter类:
CbaseInputPin是一个用于实现输人Pin的抽象类,该类支持IMereInput Pin接口。由于IMemInputPin接口是一个支持推模式(Push Model)的接口,因此,CnetworkSendFilter支持推模式(Push Model)应用。
发送Filter关键过程:
(1)初始化套接字;
(2)设置系统缓冲区,绑定端口;
(3)创建默认的接口;
(4)调用sendto发送数据;
(6)关闭套接字。
本文结合实际项目需要,详细论述了音视频传输系统的设计方法和具体实现框架,利用DirectPlay Voice实现音频混音功能,并且对音频传输过程中的延时抖动进行了去除,利用RTP/RTCP传输MPEG-4视频流,讨论了在DirectShow框架下用RTP/RTCP协议传输MPEG-4视频数据的实现方案。
实验表明,该系统音频混音效果良好,利用RTP/RTCP传输MPEG-4视频,能够适应复杂的网络状况,提供更好的传输质量。(曹阳,梁华,蔡宣平)
[1]. COM datasheet https://www.dzsc.com/datasheet/COM_1118194.html.
免责声明: 凡注明来源本网的所有作品,均为本网合法拥有版权或有权使用的作品,欢迎转载,注明出处。非本网作品均来自互联网,转载目的在于传递更多信息,并不代表本网赞同其观点和对其真实性负责。