关键词:VoIP,IP电话,语音压缩
1引言
Internet在全球范围内呈爆炸性增长的趋势,使全社会很快融入到信息浪潮中,它的主要业务已由传统的文件传输、电子邮件和远程登录等基本服务转向以VoIP为代表的多媒体服务。VoIP(VoiceOver IP)是指将vwin 的语音信号数字化,进行分段压缩后按照一定的规律加上IP地址头,经IP网络路由或交换至目的地址后,IP包再经相反过程还原成语音信号。VoIP涉及到的技术比较繁杂,其中尤以包括分组语音技术、语音编码及压缩技术在内的几种技术的发展最为关键。
2系统概况
本系统是基于Visual C++和InternetProtocol,在Windows平台上开发的,它利用现有的全双工声卡和Internet网络,来实现PCto PC的通话,整个系统可以分为几个部分,首先,对音频设备(声卡)的模拟语音信号进行采集,经过A/D(模数)转换为数字化语音包;然后,采用一定编码压缩技术对语音数据包进行压缩;第三,按一定的打包规则将压缩帧转换成IP数据包通过数据网络进行传输;第四,在目的地经过数据解压;第五,再把语音数据包写入到音频设备驱动程序;最后,D/A(数模)转换复原成话音就实现播放,从而达到语音通信的目的。整个过程见图1。
3系统实现
3.1语音处理
语音数据处理的整个过程可以分成两个部分:A/D转换,即把原始声音的模拟输入转化为数字化信息;D/A转换,即把数字信息转化为模拟数据。在通话过程中,跟用户最直接打交道的是说和听,所以,语音数据处理的好坏直接影响了系统实现的成败。
本系统是要把语音直接转换为数据,放在内存中,而不是存为语音文件,而且播放语音时,也是直接播放语音数据,而不是播放语音文件。这样的好处是省略了读写硬盘的费时操作,提高了语音通话的实时性。要完成上述语音操作,编程语言中提供的容易使用的高级多媒体语音函数是无法胜任的,只能通过Windows MDK(Multimedia DevelopmentKit)中的多媒体低层音频服务来实现,这一类函数和结构的名字一般都以“wave”作为前缀。Windows下录制或播放音频数据,其主要操作就是将音频数据读出到音频设备驱动程序和从音频设备驱动程序写入的操作。低层波形音频函数通过WAVEHDR结构的音频数据块对设备驱动程序的音频数据进行上述控制。以录音为例,其准备工作主要有几点,打开录音设备,获得录音句柄,指定录音格式,分配若干用于录音的内存。开始录音时,先将所有内存块都提供给录音设备用来录音,录音设备就会依次将语音数据写入内存,当一块内存写满,录音设备就会发一个Window消息MM WIM DATA给相应的窗口,通知程序作相关的处理,这时程序通常的处理是把内存中的数据进行复制,如写入文件等,在此我们的处理是把数据进行压缩和网络发送,然后把内存置空,返还给录音设备进行录音,这样就形成一个循环不息的录音过程。结束录音时就释放所有内存块,关闭录音设备。关键的录音函数和顺序如下:
开发人员可以充分利用Windows操作系统的多任务机制,在原始声音进行采样的同时对采样数据进行实时的音频处理,并实时播放处理后的音频数据,使录音、音频处理和放音三个原本独立的过程异步并行处理,以达到原始声音采样和处理后的声音同步播放的实时效果。
多媒体低层音频开发中,音频数据量一般比较大,应用程序必须不断向设备驱动程序提供音频数据块才能保证录音或播放的持续进行。由于录音和放音的具体操作是由设备驱动程序控制音频硬件在后台完成的,因而应用程序必须检测什么时候用完一个数据块,并及时传送下一个数据块,才能避免播放停顿和丢失录音信息。低层音频服务中的回调机制(Callback Mechanism)为我们提供了检测音频数据块使用情况的方法。所谓回调机制,即在打开音频设备时,通过指定设备打开函数(waveIn Open( )或waveOutOpen( ))的fdwOpen参数来指定一个事件、函数、线程或窗口作为回调对象,dwCallback参数将说明对象句柄或函数地址。设备驱动程序不断向回调对象发送消息,通知音频数据块的处理状态,用户程序在窗口处理过程或回调函数中响应这些消息,并做出相应的处理。
3.2语音压缩
传统的电话网是以电路交换的方式传输语音的,它需要的基本带宽为64kbit/s。而要在基于IP的分组网络上传输语音,就必须对模拟的语音信号进行特殊的处理,使处理后的信号可以适合在面向无连接的分组网络上传输,这项技术称为分组语音技术。语音压缩是分组语音系统中的重要组成部分。目前,通过调制解调器接入网络的最大速率为56kbit/s,远远不能适应多媒体通信的要求,虽然已有更快的访问技术如ISDN,ADSL,但毕竟还不普及。因此必须采用语音压缩算法来处理语音,而且从节省网络带宽的角度出发,语音压缩也是非常必要的。
音频数据是大多数多媒体应用程序向用户提供信息的主要方式,这些数据一般具有较高的采样速率,如果不经过压缩的话,保存它们需要消耗大量的存贮空间,在网络上进行传输的效率也很低,因此音频数字压缩编码在多媒体技术中占有很重要的地位。目前常用的压缩方法有很多种,不同的方法具有不同的压缩比和还原音质,编码的格式和算法也各不相同,其中某些压缩算法相当复杂,普通程序不可能去实现其编解码算法。所幸的是,Windows 9x/NT 4.0/Windows 2000为多媒体应用程序提供了强大的支持,引入了ACM(Audio CompressionManager,音频压缩管理器),它负责管理系统中所有音频编解码器(Coder-Decoder,简称CODEC,是实现音频数据编解码的驱动程序),应用程序可以通过ACM提供的编程接口调用这些系统中现成的编解码器来实现音频数据的压缩和解压缩,这一类函数和结构的名字一般都以“ACM”作为前缀。Windows 9x/NT 4.0/2000系统自带的音频COD ECs支持一些音频数据压缩标准,如MicrosoftADPCM、Microsoft Interactive Multime dia Asso ci ation(I MA)ADPCM、DSP GroupTrueSpeech(TM)等。本系统分别对MSADPCM、IMA ADP CM、MS GSM 6.10 、DSP GroupTrueSpeech(TM)这四种具有代表性的压缩标准进行了测试和比较。从压缩率来看,MSA DPCM和IMA ADPCM都是4:1,MSGSM 6.10是2:1,而DSPGroup TrueSpeech(TM)则达到了10:1。从还原后的效果来看,应该MSGSM 6.10比较好,而且它支持比较高的采样频率,但它的压缩率太小,我们还是弃用了。而DSPGroup TrueSpeech(TM)有着很高的压缩率,大大降低了对带宽的要求,很适合在Internet上传输,而且还原后的效果还可以,所以最后还是选用了它。
3.3语音传输
本系统采用基于Socket的TCP/IP协议通信,通过在网络传输层建立两端计算机的连接来实现实时通信。为了便于在Windows平台上开发,微软公司推出了一套以U.C.Berkeley大学BSD UNIX中流行的Socket接口为范例的网络编程接口Windows Sockets。它不仅包含了人们所熟悉的Berkeley Soc ket风格的库函数,也包含了一组针对Windows的扩展库函数,以使程序员能充分地利用Windows消息驱动机制进行编程。根据传输数据类型的不同,Windows Sockets可分为数据流Socket(SOCK STREAM)和数据报Socket(SOCK—DGRAM)两类。数据流Socket提供了双向的、有序的的、无差错、无重复并且是无记录边界的数据流服务,TCP/IP协议使用该类接口。数据报Socket提供双向的,但不保证是可靠的、有序的、无重复的数据流服务,也就是说,一个从数据报Socket接受信息的进程有可能发现信息重复了,或者和发出的顺序不同。
根据以上分析,本系统在实现的过程中采用的是数据流Socket,通过在两台PC上建立双向的传输连接,可以保证音频数据的实时无差错传输。具体工作是这样的,首先从CWinThread继承了两个子类CSocketListenThread、CMySocketThread。第一个类的工作是一些初始化工作和监听是否有Socket请求连接,这是一个不断循环的过程。第二个类的工作是如果有Socket请求来了,那么在这个类里就分配一个Socket给这个请求,从而建立连接。同时在第二个类里还定义几个辅助函数,以便事件的触发,最典型的是ReadFromSocket()和SendToSocket(),分别用来接收和发送,其实现主要是通过Windows底层APIs函数的调用。有了这两个类我们就可以完成Socket的连接、接收和发送。
同时还要指出的是,本系统使用的版本是Windows Socket2,相对Windows Socket1.1来说,Win确良dows Socket2提供了快速、多线程数据传送的能力,性能更加先进,并支持对多种网络传输方式的一致性访问和独立于协议的多点传输/组播,更为重要的是,它提供了在新的网络介质(ATM、ISD N等)上协商QoS(Quality of Service)的接口,这样多媒体应用开发人员可以请求指定传输速率,能够根据传输的吞吐量建立或者拆除连接,当网络暂时不可用时应用程序应该能自动得到提示。基于以上考虑,我们选择Windows Socket2来实现对于网络数据的传输,实现过程虽然相对复杂,但是给系统带来了良好的性能和扩展性。
4结束语
互联网Internet是当今应用最广泛、发展最迅速的通信网络。这是基于数据包方式的数据分组交换方式,用户数据被封装在分组中,而分组还包含一些附加信息用于网络中的路由选择、差错纠正、流量控制等。数据包各自独立地在网络中传递,由于网络状况的变化和经历路径的不同,数据包到达目的地的时间是不固定的、非实时的,一般来说,互联网较适用于数据的传输,但我们利用了一些现有的技术,使得音频信号经过模数转换后也可以作为数据在互联网上传递。由于数据网是采用统计时分的方式分配,使用网络资源,任何通信实体都不可能独占某一信道,所以分组语音技术可以大大提高网络资源的利用率。
同时应该指出的是,当前的VoIP技术还有一些不足之处,如通话质量不高。由于Internet是为数据通信目的而设计的,其通信方式是通过打包传输方式实现的,当语音包在一个无服务质量保证的网络中传输时,会产生包到达顺序的错位,从而产生网络抖动,产生语音变形和语音包丢失。所以用IPPhone通话时,断断续续的现象在当前的技术下是不可避免的,而且在音质、流畅度和时延方面也存在着一定的问题,另外,压缩技术也有待改进。虽然当前的压缩标准有很多,但如何使压缩率和声音还原质量得到很好的兼顾还有待改善。
不过,相信随着技术的不断发展、网络统一化进程的加速进行,数据网与电信网之间的结合势在必行,CTI(Computer Telephony Integration,计算机电话集成)技术也越发会体现出它的价值。
2 周敬利,余胜生.多媒体计算机声卡技术及应用.北京:电子工业出版社,1998
3 潘爱民,王国印译.VisualC++技术内幕.北京:清华大学出版社,1999
4 刘素丽,李彤红等译.Internet编程.北京:电子工业出版社,1996
5 侯俊杰.深入浅出MFC.武汉:华中科技大学出版社,2001
6 苗兰波,冯志勇,吕廷杰.IP电话网络技术.北京:电子工业出版社,2001
评论
查看更多