Home > 电话会议新闻动态 > 技术文档 > 基于Pocket PC的IP电话软件的设计与实现

基于Pocket PC的IP电话软件的设计与实现

2014/05/04 meeteasy

IP电话以其低廉的价格,较好的通话质量,成为通信市场的有力的竞争者[1]。IP电话分为硬件电话和软件电话两类。硬件IP电话和传统电话一样使用方便,但需要额外的硬件投资。软件IP电话产品目前主要是基于PC平台,市场上基于wi—Fi手机的软件IP电话产品还很少,因此,本文的研究具有较高的实用价值。

1、IP电话软件的设计

1.1设计目标

本软件的功能要求如下:①用户之间完整的语音 交互,包括对语音数据进行采集编码和利用RTP/RTCP实现语音的传输和控制;②呼叫控制,包括呼叫的建立、维护和终止;⑧注册功能,即在指定的SIP服务器上注册自己的号码;④友好的图形用户界面。

1.2总体设计

在硬件平台之上,共分为操作系统模块、SIP信令模块、实时语音处理模块、应用程序管理模块4个部分,如图1所示。

总体设计框架图

①操作系统模块。操作系统模块是嵌人式应用软件开发的基础,属于底层软件开发。它将上层应用软件与硬件设备分离开来。主要用途是为了驱动相应的硬 件设备,提供给上层应用软件一个统一的系统调用接口,使上层与底层的开发在逻辑上分离。本文选用 Pocket PC2003操作系统。

②SIP信令模块。SIP信令模块主要是用于进行呼叫控制,包括SIP消息的构造与发送、消息的接收与解析、SDP消息的构造与解析以及双方媒体协商以及UA终端注册等功能。

③实时语音处理模块。实时语音处理模块包括了语音处理和实时媒体传输两大功能,主要是用以完成在实时条件下,对语音进行采集、编解码和播放,以及语音媒体数据包的RTP封装与分解以及数据包的发送和接收。

④应用管理模块应用管理模块是主控模块,用于实现终端程序的初始化,创建工作线程,控制其他各模块,并且是与用户进行交互的接口,负责在全局上控制和管理其他各 模块的工作和通信,负责整个系统的呼叫发起、呼叫响应及呼叫结束的动作。主要完成了本用户代理终端的注册以及终端之间的会话。

2、IP电话软件的实现

2.1 操作系统模块的实现

本文使用Platform Builder实现操作系统模块的配置与编译。首先创建新的Platform并命名,接着对该Platform做配置,再进行编译,得到二进制系统镜像,并输出SDK安装包。

2.2 SIP信令模块的实现

SIP信令模块的功能由SIP协议栈完成。用于提供SIP操作所需的基本数据结构和应用程序编程接口API。包括了用于表示SIP中各种对象(如SIP消息、各种头域以及SDP消息体等)的数据结构以及对消息、消息体进行解析和封装的API。

在嵌入式系统中,对SIP协议栈的要求是尽可能精简、高效并且方便使用和移植。因此,在本系统中,使用基于C语言开发的开源协议栈PJSIP E2]为基础,并根据具体情况进行了相应的修改,然后移植到开发板。 PJSIP的主要特点如下:①移植性强,可以方便地移植到各个目标平台;②协议栈占用空问极少,核心部分少于150kB,并且提供完整的SIP功能;⑧高效的处理能力;④提供SIP的完整功能以及大量扩展功能;⑤优秀的文档资料。

2.3实时语音处理模块的实现

实时语音处理模块主要负责语音采集与回放、语音数据编解码和语音数据RTP实时传输。

2.3.1 语音采集与回放

在PJSIP中,提供一组高级的音频采集与回放的接口抽象层,封装了各种底层的音频处理方式,使得程序的移植性更强。其接口抽象函数主要包括:

①pjmedia_snd_open():打开音频设备并配置相关参数,然后进入等待状态。②pjmedia_snd_stream start():启动音频流的播放或者录音。③ pjmedia_snd_stream_stop():停止音频流的播放或者录音。④pjmedia_snd_stream close():关闭打开的音频流。

2.3.2语音的编解码

PJSIP中的高层类库PJMEDIA-CODEC提供了各种常用的语音编解码方案,包括G.711, GSM06.10,iBLC,L16,Speex等。本系统中,我们选用Speex语音编解码方案。

Speex是一个专门针对VoIP设计的开源的音频编解码标准。它是GNU项目的组成部分之一,是一个基于CELP的语音编解码器。Speex的设计目标是提供较高的会话质量和较强的带宽适应能力,在对语音数据的压缩比、失真度、还原能力处理上要明显优于其他一些音频编解码方式。Speex能适应2kbps到 44kbps之间的传输速率,可以在绝大部分的网络条件下正常工作,尤其在低比特率传输时与同类编解码器比较更具优势。因此,Speex非常适用于Internet上的语音应用。

2.3.3 语音的RTP实时传输

RTP是一种建立在UDP基础上的用于多媒体数据实时传输的协议。

PJSIP中提供了RTP传输功能,主要接口定义如下:

①pimedia_rtp_session init():初始化一个 RTP会话。②pjmedia_rtp_encode rtp():根据RTP会话状态以及填入的参数,生成一个RTP头部数据。③pjmedia_rtp_decode_rtp():解码一个收到的RTP包,分解为RTP头部和RTP净荷。

2.4应用管理模块的实现

本模块主要完成注册和管理用户代理(UA)之间 的会话功能。应用管理模块的运行流程如图2所示。

应用管理模块流程图

2.4.1终端注册

终端启动上线后,通过用户代理客户机自动向所 在域的服务器端发送注册请求;该服务器的SIP注册 服务模块收到注册请求后,对其进行身份验证。终端注册主要代码如下:

pjsua_acc_config cfg;
pjsua_ace_config_default(&cfg);/*初始化一个账户信息*f

cfg.id=pJ_str(”sip:”+m_user+“@”+m_domain); /*以下配置账户信息*/

efg.cred_count_1;

cfg.cred_info[O].realm_pjstr(domain);

cfg.cred_info[O].scheme_Pi_str(“digest”);

cfg.cred_info[0].username_PJ_str(“username”);
cfg.cred_info~0].data_type_PJSIP_CRED_DATA_ PI AIN_PASSWD;

cfg.cred_info[O].data_PJ_str(“password”);

status_pjsua_acc_add(&cfg,PJ_TRUE,&acc_id) /*发出注册请求*/

if(status!=PJ_SUCCESS)

error—exit(“Error registration.”);

/*注册成功*/

2.4.2 会话控制

终端完成注册后,进入等待状态,等待主动发起呼 叫或者被动接收呼叫。

①主叫模式。该模式下,本终端作为一个UAC, 主动完成对远程UAS的呼叫。主要由函数pjsua call make call()完成主叫功能。

②被叫模式。该模式下,本终端作为一个UAS, 在默认端口5060接收远程UAC发来的会话请求并 回应。主要由两个回调函数on_incoming_call(),和 on_call_media_state()完成被叫应答功能。配置回调函数代码如下:

efg.cb.on_incoming_call=&on_incoming_call;

cfg.cb.on_call_media_state_&on_call_media_state;

3、测试与结论

3.1测试平台

本IP电话软件以带有Pocket PC2003操作系统 的wi—Fi功能的智能手机为软、硬件平台上。本文采用如图3所示的测试平台。

测试平台

其中,WiFi Phone为运行IP电话软件的通话终端,是主要的测试对象;Brekeke SIP Server是一个SIP服务器;笔记本电脑上运行X—Lite软件作为测试VoIP通话的对端,并且通过笔记本电脑上的无线网卡与Airopeek抓包软件,完成抓取无线网络数据包的工作,以供分析。

4、结论

通过测试表明,该系统能够对SIP信令过程进行 很好的控制,从而完成注册、呼叫、语音通信、呼叫撤销 等基本功能。本终端除了可以与X—Lite互通,与 KPhone、Linphone也进行了互通测试,都可以进行正 常的呼叫建立与语音通信,说明本系统互通性良好。 本软件在局域网内语音通话品质较好,没有出现 明显的延迟和回音,实现了VoIP的基本功能需求,但 其在恶劣的网络环境下的性能不太理想,有待于进一步提高。

IP电话, Pocket PC

如没特殊注明,文章均为好会通科技原创,转载请注明来自 http://www.meeteasy.com.cn/archives/2927.htm.


copyright 2004-2013     粤ICP备12061155号-1

Sitemap|XML|RSS|隐私政策|EN|