基于嵌入式系统的VoIP设计

基于嵌入式系统的VoIP设计

关键词:嵌入式系统VoIPIP分组交换网络协议栈层

一、引言

过去的二十年里,计算机网络迅速普及,网络的应用范围从军事部门、科研机构、高等院校扩展到千家万户,主干网络的容量从数兆增加到数万兆、数十万兆,传输内容从以数据为主,逐渐过渡到以声音、图像等多种媒体信息为主。计算机网络的发展促使计算机从单纯的计算工具演化成为娱乐工具和通信工具。VoIP正是在这种背景下发展起来的广受关注的“明星技术”[1]。

VoIP是一种基于IP网络的数字化语音传输技术,也称为网络电话或IP电话,其本质特征在于语音的分组交换。VoIP可以在IP网络上便宜的传送语音、传真、视频和数据,如即时消息、虚拟电话、虚拟语音传真邮箱、查号业务、Internet呼叫中心、Internet呼叫管理、电视会议、电子商务、传真存储转发、IVR(交互式语音应答)业务等。

与传统的电信技术相比,VoIP具有以下优点:

(l)采用分组交换技术,提高网络资源的利用率,降低运营商的建设成本。

(2)价格低廉。由于不需要建设专用的通信网络,运营和维护费用较低,IP电话能提供低价甚至免费的通信服务。

(3)开放的体系结构。IP电话的协议体系是开放式的,有利于各个厂商产品的标准化和互联互通。

二、VoIP的基本原理[2]

VoIP是以IP分组交换网络为传输平台,对模拟的语音信号进行压缩、打包等一系列的处理,然后采用IP数据报的逐跳路由方式进行传输。语音处理过程大致是:首先通过语音压缩算法对语音数据进行压缩编码处理,然后把这些语音数据按RTP(RealTimeProtocol,实时传输协议)协议进行打包,经过IP网络把数据报传输到接收地,再把这些语音数据包解包,经过解码解压处理,恢复成原来的语音信号,从而达到由IP网络传送语音的目的。

在进行语音传输之前,需要使用信令技术建立语音连接和协商技术协商连接双方的语音编码格式,本系统中采用会话初始化协议(SIP)作为信令协议,采用媒体协商技术(SDP)作为协商协议,采用RTP协议作为语音传输协议。

三、基于嵌入式系统的VoIP设计

1、系统设计的目的。本系统设计的目标是在嵌入式平台上实现一个VoIP终端,具体来说包括:(l)能够满足IP网上语音通信的基本要求(UA呼叫控制、SIP消息解析、语音编解码、RTP传输);(2)按照标准SIP协议开发,能和其它使用SIP协议的UA互通;(3)运行稳定;(4)具有良好的开放性和扩展性;(5)系统易于维护,方便后续的研究和开发。

2、系统的总体结构与硬件选择

根据分层实现的思想,系统的总体结构如图1所示:

根据局域网上语音通信的需要,本系统的硬件部分至少应包括以下模块:

(l)嵌入式微处理器

(2)存储器

(3)音频模块:包括音频的输入(MIC)和输出(扬声器)

(4)LAN模块:采用标准RJ-45接口与局域网连接

四、嵌入式VoIP终端软件的设计和实现

嵌入式VoIP终端软件主要指系统层次结构中协议栈和用户程序两个层次。协议栈层担负SIP消息解析,UAS和UAC事务处理,多媒体流传输等任务。主要包括SIP模块、RTP模块和语音处理模块三个模块。

1、SIP模块[3]。本系统选用了开源协议栈oSIP。oSIP主要包括三个模块:解析器模块、状态机模块和工具模块。解析器模块:该模块主要完成对SIP消息(INVITE、ACK、OPTIONS、CANCEL、BYE、REGISTER消息)结构剖析、SDP消息结构剖析以及URI结构的剖析。此外,该模块还可以解析一部分SIP头域。状态机模块:SIP中是以事务为单位来描述各种请求和响应的交互过程的。该模块主要完成对某个SIP事务(注册过程、呼叫过程等)的状态记录,并在特定状态下触发相应的时间或回调函数。回调函数为上层应用程序控制SIP会话提供了丰富的接口。工具模块:该模块为可选项,主要提供一些处理SDP协商及会话等的一些工具。

2、RTP模块[4]。本系统的RTP模块采用开源的RTP协议栈oRTP,利用该协议栈可以较方便的实现对实时媒体的传输和控制,如对本地待发数据的RTP封装,对接收到的RTP包拆包以及通过对网络RTCP监测,适当的调整本地的编解码器策略。

3、语音处理模块。语音处理模块的工作是完成语音信号的采集、编码、解码和回放,其大致的工作流程如图2所示,可分为语音数据发送和语音数据接收两个部分。

语音数据发送的过程为:通过UAC3556B编解码芯片完成语音信号的脉冲编码调制(PCM),将模拟信号转化成数字信号;采用选定的编码标准对数字信号进行压缩编码;加上RTP头和其它头部字段,封装数据包送到UDP协议层传输,完成音频信号的发送。

语音数据的接收,采用在SDP协商过程中获得的对方的编码方式,首先需要从RTP包中获得语音的编码信号,对数据进行解码,然后将这些经过解码的信号解调还原成模拟信号。

本系统中采用Mediastreamer媒体库完成语音模块的功能。Mediastramer媒体库将语音模块的工作分为Write/ReadDevice,Encode/Decode,Rtp_Send/Rtp_Recv六部分,每一个部分都可以声明成为一个MS_FILTER。每一个MS_FILTER可以从另一个MS_FILTER读入数据作为输入,并将数据输出作为另一个MS_FILTER的输入。发送或接受语音流时将需要使用的MS_FILTER按顺序使用Ms_Filter_Link连接起来,即可完成语音从采集到编码再到发送或从接受到解码到播放的任务。

五、工作流程与测试结果

拨打电话是用户最常用的操作,本文简要介绍用户进行拨打电话操作后终端软件的工作流程,如图3所示:

主控程序解析到用户请求进行呼叫操作,主控程序初始化eXosip,Mediastreamer函数库,使各模块处于初始化状态。初始化结束后,调用eXosip库中的INVITE请求子函数,向被叫方发送带有SDP协商消息的INVITE信令消息。发送结束后,监听信令接收端口直到收到对方OK(200)确认消息。回复被叫方ACK消息确认此次呼叫,并根据协商的媒体信息设置Mediastreamer媒体库中发送语音流使用的语音编码器,RTP的收发端口等参数。设置结束后,触发媒体库中的发送与接收函数。同时开始声音数据的采集与回放,声音数据的编码与解码和RTP流的封包与解包。呼叫正式开始。

借助Wireshark工具对报文进行分析,验证嵌入式SIP终端原型的工作流程,以会话建立过程为例:嵌入式VoIP终端为主叫方(用户名test1),被叫方为PC上的Linphone(用户名test2)。

这个一个典型的无代理呼叫模式。编号64号的报文表明主叫方(嵌入式VoIP终端)向被叫方发出的呼叫请求,被叫方收到请求后向服务器发送65号报文(100Trying)表示接收到请求,正在处理请求。编号69号的报文表示接受请求,返回确认信息(200OK)。主叫方收到确认信息后,返回被叫方确认信息(ACK),RTP连接建立,会话开始。同时还抓取了SIP终端注册过程的数据包。

六、结论

本文实现的嵌入式VoIP终端原型具备VoIP终端的基本功能,完全遵循RFC3261标准,并且可以实现SIP协议的互通,在局域网内也能达到较好的通话质量。测试表明,嵌入式SIP终端的开发达到了预期目的。

参考文献:

[1]邓里文.VOIP的关键技术[J].通信世界,2001(13),41-42.

[2]糜正琨.IP网络电话技术.[M]北京:人民邮电出版社2000年6月.

[3]J.Rosenberg,H.Schulzrinne."Sessioninitiationprotocol",RFC3261[S].InternetEngineeringTaskForce.June2002.

[4]oRTP:AReal-timeTransportProtocolstack[J].http://www.linphone.org.

标签:;  ;  ;  

基于嵌入式系统的VoIP设计
下载Doc文档

猜你喜欢