IP电话软件实现过程中的关键技术-SKY网络电话
您的位置:SKY网络电话 >> 行业信息>> IP电话软件实现过程中的关键技术

IP电话软件实现过程中的关键技术

来源:IP电话软件  发布时间:2014-09-29 11:45:15

呼叫控制模块

包括两部分:分别为呼人控制和呼出控制,其作用是确认双方建立连接并且语音通道已经打开。目前,IP电话软件采用的技术主要有两种,一种是H.犯3技术,一种是SIP技术。国内主要采用的是基于H.犯3的技术,本软件采用的同样是H.323技术(H323协议栈API)。

电话软件的呼叫流程:

1.首先,主叫方通过协议栈向被叫方发起呼叫(H.225.0协议/Q.931信令),被叫方接受建立呼叫并建立相应的逻辑通道等待语音的传输(H.245协议)。

2.主叫方经录音设备采集音频,进行编码压缩打包后,经网络传送给被叫方。

3.被叫方计算机接收到数据包后经过相应的解包、解码、解压后,还原出音频数据,再由播放设备进行播放。

4.当双方建立完呼叫后,如果由被叫方先开始说话,音频的流向(2、3步)是由被叫方传向呼叫方,处理过程完全相同。

 

媒体流控制模块

媒体流控制模块可以分成两个大的模块:音频录制播放模块、音频处理模块。音频录制播放模块的主要功能是实现语音的采集与回放。

语音的采集是指将模拟的语音通过录制设备传送到声卡中,按照指定的格式采样形成数字化的语音信号。语音的回放是指将一定格式的数字化语音信号通过声卡还原成模拟语音信号并通过相应设备播放出来。

windows系统提供了两种方法来进行语音的采集与播放,分别为利用高级音频函数(高层音频服务)和利用低级音频函数(低层音频服务)来进行语音的采集与播放,其中可以根据具体需要来采用适合的方法。这两种方法的特点如下所述。

高层音频服务:只需少量的编程就能播放和录制音频文件,与低层音频服务相比,高层音频服务更容易使用,需要编程量少,可以满足应用程序对音频的简单需求。

低层音频服务:允许用户直接与音频驱动程序通信,管理声音的播放与录制。低层音频服务要求较多的编程,但是可以实现对音频的播放与录制更强的控制。

在电话软件中,我们是要采集实时的音频数据,而不是对文件进行操作,并且要将这些音频数据实时地发送出去,此时,高级音频函数就无能为力,必须求助于低级音频函数,这些函数允许用户直接与音频驱动程序通信,对录制和播放音频提供更强的控制。

语音采集的过程是首先打开录音设备,然后制定录音格式,接着分配内存区域来存储录音数据并把此内存区域绑定到音频输人设备,这样就完成了录音功能。录音之前要确定录音的参数、采样率、采样精度、声道数,实现连续录音的关键是多缓冲技术。

语音播放模块的主要功能是实现音频的播放,其工作流程与音频录制过程相似,首先打开放音设备,制定播放格式,分配内存区域来存储放音的音频数据,并将此内存区域绑定到音频输出设备,此过程同样要使用到多缓冲技术。

 

语音录制编程实现具体过程如下:

1.首先要调用函数[JxNTwavelnGetNumDevs(voID)查询系统是否具备录制音频设备,该函数的返回值是可进行音频录制的设备的数量。

2.调用函数MMRESULTwavelnGetDevC即s来确定录制音频设备的性能,以确定录制设备所支持的标准音频格式。如果录制的是非标准格式,则需通过wavelnopen函数,并设置打开设备标志为WAvE_FoR-MA毛QuERY,查询设备是否支持非标准格式。非标准波形格式由WAVEFORMATEX说明。

3.waveln娜el1函数:打开录制音频设备。设备打开后,ph诚将指向录制设备的句柄HWAVEIN,该句柄是后续对录制设备操作的对象。

4.wavelnPrepareHeader函数:打开输人设备之后,调用此函数生成WAVE音频信息头结构WAVEHDR。

5.wavelnAddBufer函数:将波形输人设备获得的数据写人WAvEHDR。

6.wavelnstart函数:开始录音。

7.录制完成后用wavelnU即repareHeader清除波形音频数据块结构WAVEHDR,释放分配的资源。

8.wavelnClooe函数关闭波形音频输人设备。值得注意的是,如果终止音频录制,丢弃音频数据块,不能用wavelnstart重新录制。需要重新准备数据块,用wavelnReset实现,然后再用现有网络而言,语音压缩技术是实现IP电话的关键。在设计IP电话软件中,语音压缩/解压缩可以采用PCM、G723.1、G729等算法。根据当时的网络流量动态地选用。在本程序中采用的是H.323框架协议中的RTP/RTCP协议实现函数将采集到的语音数据打包传输出去,在接受端有相应的解包实现函数将收到的语音包解包并交给播放模块播放。本软件是利用开发好的RTP/RTCP的API来实现这部分功能。本程序的语音包的传输和接收实现示意图如图2所示。4IP电话软件完成后的运行界面以及说明本软件完成后的运行界面如图3所示。软件界面说明如下。DestIP:输人对方IP地址,DestNumber:输人对方电话号码,DestPort:输入对方呼叫信令端口号,通常默认的都是1720。本软件提供两种连接方式:一种是利用IP地址,另一种是利用电话号码。wavexnstart重新录制。

开始录音时,先将所有的数据块都给输入设备进行录音,录音设备依次将数据写满缓冲区,当一个缓冲区写满时,录音设备会向相应的窗口发送一个MM_WIM_DATA消息通知Windows程序作相关的处理,这时程序通常都是把缓冲区数据复制然后写人文件。由于本程序中采集语音是为了用来进行实时传输,所以在本程序中是将数据进行压缩然后进行实时的发送,然后再将缓冲区置空,返还给录音设备进行录音,如此形成一个循环的录音过程。放音过程与录音过程类似,采用WaveF0rm函数中的以waveout开头的函数。

音频处理模块功能包括:音频数据处理和音频数据包的发送与接收。

音频数据处理模块对采集到的音频数据进行编码、压缩便于传输,同时对接收到的数据进行解码、解压缩将其还原成音频数据便于播放。这一部分是IP电话软件的重点,因为在Intemet中带宽不是很理想,所以对现有网络而言,语音压缩技术是实现IP电话的关键。在设计IP电话软件中,语音压缩/解压缩可以采用PCM、G723.1、G729等算法。根据当时的网络流量动态地选用。

在本程序中采用的是H.323框架协议中的RTP/RTCP协议实现函数将采集到的语音数据打包传输出去,在接受端有相应的解包实现函数将收到的语音包解包并交给播放模块播放。

本软件是利用开发好的RTP/RTCP的API来实现这部分功能。本程序的语音包的传输和接收实现示意图如图2所示。

上一条:深圳免费SKY网络电话
下一条:怎样用SKY在电脑上在线打电话