首页>>>技术>>>VoIP

发表评论分享按钮

基于Windows CE的SIP软件电话的设计与实现

黄妮丽 余厚全 朱菲 2012/03/23

1.引言

  VOIP的迅速普及,出现了越来越多的VOIP的固定电话终端。随着VOIP的进一步发展,为了满足移动用户VOIP通信的需要,无线VOIP通讯将是未来的发展趋势。

  现在手持PDA用户越来越多,都具有无线上网功能,如果能开发一个在PDA上运行的VOIP软件电话,就可以满足这些PDA用户的无线VOIP通信的需求,具有非常重要的实际意义。由于嵌入式Windows CE(WinCE)是PDA最流行的操作系统,而目前大多数VOIP终端都采用SIP协议,因此,本文提出了一种Windows CE平台下基于SIP协议的VOIP解决方案。该方案以嵌入式Windows CE为平台,eMbedded C++ 4.0为开发工具,中间件采用开源的SIP协议栈oSIP/eXosip,通过进行协议栈的移植和在协议栈之上应用程序的开发,实现了SIP软件电话。

2.设计方案

  软件结构如图1所示。

软件结构

图1:软件结构

  SIP软件电话的结构包括呼叫控制和语音通信两大模块。呼叫控制由SIP信令来完成, 主要实现呼叫的建立、修改和拆除;语音通信模块由音频数据接口,音频编解码和RTP传输三个子模块组成,实现语音的采集,编码,传输和播放。

  音频数据接口模块实现语音的采集和播放, 采用Windows CE的低层音频服务, 因为低层音频服务中的回调机制为其提供了很大的方便;音频编解码采用的是G.729A 语音压缩技术,它属于低比特率话音编码,适合语音在IP 网络传输;语音采用RTP包传输。

  对呼叫控制模块,直接移植开源oSIP/eXosip协议栈到WinCE上,通过调用协议栈的API函数,实现对呼叫的控制。RTP传输用开源JRTPLIB,JRTPLIB也需要在WinCE进行移植。

3.具体实现

  基于上述方案,具体实现包括协议栈移植、呼叫控制和语音通信三部分。

  3.1 协议栈移植

  oSIP/eXosip主要支持Win32及Linux、VxWorks等一些嵌入式系统,将oSIP/eXosip移植到 WinCE上,可以在Win32基础上进行。WinCE可以兼容大部分的Win32 API,在WinCE上移植oSIP/eXosip主要有3种情况:与Win32兼容的API,与Win32不兼容API和不同的头文件支持和预定义。与 Win32兼容的API只要修改条件编译选项,与Win32不兼容API可以用其他的WinCE上的API来代替并作相关修改,另外,WinCE和Win32的某些头文件和预定义也不同,也需要进行相关修改工作。表1给出了移植的一些示例。

  在WinCE上对JRTPLIB进行移植与SIP协议栈的移植类似,注意WinCE下的RTP装载数据包最大2K,和PC上的64K不同。

  表1:oSIP/eXosip移植示例


  3.2 呼叫控制模块

  呼叫控制模块用来向代理服务器注册以及进行会话的建立、修改和终止,实现对呼叫的控制。因此呼叫控制模块分为注册和呼叫两部分,都是通过底层的 SIP协议栈来完成的。上层应用程序调用SIP协议栈提供的API函数,通知协议栈进行相应的操作,协议栈将底层检测到的事件以消息的形式报告给应用层,应用层收到SIP事件后作相应处理。

  3.2.1 注册

  注册的实现过程首先是由客户端向代理服务器发出REGISTER注册请求,并等待服务器返回响应消息。客户端必须在收到前一个REGISTER请求的最终响应之后或者前一个REGISTER请求超时的情况下,才能发送一次新的注册请求,注册流程和对应的SIP协议栈API 函数调用或协议栈的事件通知分别如图2(B)和(A)。

注册流程及对应的SIP协议栈函数调用或事件通知

图2 注册流程及对应的SIP协议栈函数调用或事件通知

  3.2.2 呼叫

  本设计的SIP软件电话有两种呼叫模式:注册呼叫和Peer To Peer呼叫。如果是呼叫一个公网的SIP用户或是同一个私网的SIP用户之间进行呼叫,就可以直接找到对方,而不必要通过代理服务器。下面以注册呼叫为例,终端注册成功后就可以进行呼叫。一个通过代理服务器的成功呼叫流程如图3所示。
语音通信程序流程

图3:语音通信程序流程

  oSIP/eXosip对消息的报告有2种工作模式:事件模式和回调模式。本设计采用事件模式, 通过函数eXosip_event_wait定时轮询获取SIP事件。SIP信令的实现如表2 。


  3.3 语音通信模块

  语音通信模块主要是对语音进行采样、编码压缩等处理,并封装成能在IP 网络上传输的RTP 包,接收端收到后解码,播放。

  语音通信模块程序流程如图4:

语音通信模块程序流程
    (a)语音采集、编码、发送流程     (b)语音解码、播放流程图

4.语音通信程序流程

  RTP传输模块通过使用开源的RTP协议栈JRTPLIB来实现,我们只需调用JRTPLIB的少数几个函数就可以了。在通过SIP信令建立会话后,准确地说是在主叫得知被叫应答即获取到事件EXOSIP_CALL_ANSWERED后及被叫收到主叫的ACK消息即获取到事件 EXOSIP_CALL_ACK后分别启动语音通信模块。会话结束(由呼叫模块控制)则关闭语音输入输出设备,结束语音流传输。

5.结束语

  本文提出了一种Windows CE平台下基于SIP协议的VOIP软件电话终端的解决方案,并对方案的各模块及实现进行了详细的介绍。该软件电话实现了基于Windows CE操作系统的PDA用户的无线VOIP,通话话音清晰,延时较小,具有很好的实用价值。作为后续工作,还将在SIP软件终端中增加视频功能。

  本文作者创新点在于:本文提出了一种Windows CE平台下基于SIP协议的VOIP解决方案,实现了基于Windows CE的PDA用户的无线VOIP通信,为用户提供廉价、便捷、可移动的语音业务。

参考文献

  [1] J Rosenberg, H Schulzrinne, G Camarillo. IETF RFC 3261[S].SIP: Session Initiation Protocol, June 2002
  [2] 田延丽,余厚全.基于SIP协议的IP电话服务器的设计[J].微计算机信息,2007,23-(1-3): 138-140
  [3] 朱小军.SIP协议在WiFi智能手机中的应用与实现[D].电子科技大学硕士学位论文.2006
共 2 页: 1  2 

微计算机信息



相关阅读:
iOS上的VOIP应用如何能够更省电? 2012-03-01
基于VoIP处理器与USB接口的IP电话设计 2012-03-01
加固网络安全 抑制VoIP风险 2012-01-10
无线VoIP系统设计应用 2011-12-27
QQVoice欲为网络电话常青树 2011-12-09

热点专题:  VoIP  
相关频道:  SIP