基于智能移动设备的IP电话软件的设计与实现

 摘  要 介绍了以Pocket PC2003为操作系统,带WiFi功能的智能移动设备平台下IP电话软件的设计方案与实现方法。实践证明,本软件具有实时性好、移植性强等优点。

    关键字 智能移动设备;IP电话;PJSIP;WiFi;Pocket PC 2003
 

 

1 引言

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

2 IP电话软件的设计

2.1  设计目标

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

2.2 总体设计

    在硬件平台之上,共分为操作系统模块、SIP信令模块、实时语音处理模块、应用程序管理模块四个部分,如图1所示。
终端用户
应用程序管理模块
SIP信令模块
实时语音处理模块
操作系统模块
系统硬件
图1  总体设计框架图
    1)操作系统模块
    操作系统模块是嵌入式应用软件开发的基础,属于底层软件开发。它将上层应用软件与硬件设备分离开来。主要用途是为了驱动相应的硬件设备,提供给上层应用软件一个统一的系统调用接口,使上层与底层的开发在逻辑上分离。本文选用Pocket PC2003操作系统。
    2) SIP信令模块
    SIP信令模块主要是用于进行呼叫控制,包括SIP消息的构造与发送、消息的接收与解析、SDP消息的构造与解析以及双方媒体协商以及UA终端注册等功能。
    3) 实时语音处理模块
    实时语音处理模块包括了语音处理和实时媒体传输两大功能,主要是用以完成在实时条件下,对语音进行采集、编解码和播放,以及语音媒体数据包的RTP封装与分解以及数据包的发送和接收。
    4) 应用管理模块
    应用管理模块是主控模块,用于实现终端程序的初始化,创建工作线程,控制其它各模块,并且是与用户进行交互的接口,负责在全局上控制和管理其它各模块的工作和通信,负责整个系统的呼叫发起、呼叫响应及呼叫结束的动作。主要完成了本用户代理终端的注册以及终端之间的会话。

3 IP电话软件的实现

3.1 操作系统模块的实现

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

3.2 SIP信令模块的实现

    SIP信令模块的功能由SIP协议栈完成。用于提供SIP操作所需的基本数据结构和应用程序编程接口API。包括了用于表示SIP中各种对象(如SIP消息、各种头域以及SDP消息体等)的数据结构以及对消息、消息体进行解析和封装的API。
    在嵌入式系统中,对SIP协议栈的要求是尽可能精简、高效并且方便使用和移植。因此,在本系统中,使用基于C语言开发的开源协议栈PJSIP 为基础,并根据具体情况进行了相应的必要修改,然后移植到开发板。PJSIP的主要特点如下:①移植性强,可以方便的移植到各个目标平台;②协议栈占用空间极少,核心部分少于150KB,并且提供完整的SIP功能;③高效的处理能力;④提供SIP的完整功能以及大量扩展功能;⑤优秀的文档资料。

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

    实时语音处理模块主要负责语音采集与回放、语音数据编解码和语音数据RTP实时传输。
3.3.1 语音采集与回放
    在PJSIP中,提供一组高级的音频采集与回放的接口抽象层,封装了各种底层的音频处理方式,使得程序的移植性更强。其接口抽象函数主要包括:
    ①pjmedia_snd_open():打开音频设备并配置相关参数,然后进入等待状态。②pjmedia_snd_stream_start():启动音频流的播放或者录音。③pjmedia_snd_stream_stop():停止音频流的播放或者录音。④pjmedia_snd_stream_close():关闭打开的音频流。
3.3.2 语音的编解码
    PJSIP中的高层类库PJMEDIA-CODEC提供了各种常用的语音编解码方案,包括G.711, GSM06.10, iBLC, L16, Speex等。本系统中,我们选用Speex语音编解码方案。
    Speex是一个专门针对VoIP设计的开源的音频编解码标准。它是GNU项目的组成部分之一,是一个基于CELP的语音编解码器。Speex的设计目标是提供较高的会话质量和较强的带宽适应能力,在对语音数据的压缩比、失真度、还原能力处理上要明显优于其它一些音频编解码方式。Speex能适应2kbps到44kbps之间的传输速率,可以在绝大部分的网络条件下正常工作,尤其在低比特率传输时与同类编解码器比较更具优势。因此,Speex非常适用于Internet上的语音应用。
3.3.3 语音的RTP实时传输
    RTP是一种建立在UDP基础上的用于多媒体数据实时传输的协议。
    PJSIP中提供了RTP传输功能,主要接口定义如下:
    ①pjmedia_rtp_session_init():初始化一个RTP会话。②pjmedia_rtp_encode_rtp():根据RTP会话状态以及填入的参数,生成一个RTP头部数据。③pjmedia_rtp_decode_rtp():解码一个收到的RTP包,分解为RTP头部和RTP净荷。

3.4  应用管理模块的实现

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

图2  应用管理模块流程图

 

3.4.1 终端注册
    终端启动上线后,通过用户代理客户机自动向所在域的服务器端发送注册请求;该服务器的SIP注册服务模块收到注册请求后,对其进行身份验证。终端注册主要代码如下:
    pjsua_acc_config cfg;                             
    pjsua_acc_config_default(&cfg);                    /* 初始化一个帐户信息*/
    cfg.id = pj_str("sip:"+m_user+"@"+m_domain );      /* 以下配置帐户信息*/
    cfg.cred_count = 1;
    cfg.cred_info[0].realm = pjstr( domain );
    cfg.cred_info[0].scheme = pj_str( “digest” );
    cfg.cred_info[0].username = pj_str( “username” );
    cfg.cred_info[0].data_type = PJSIP_CRED_DATA_PLAIN_PASSWD;
    cfg.cred_info[0].data = pj_str( “password” );
    status = pjsua_acc_add( &cfg, PJ_TRUE, &acc_id )   /* 发出注册请求*/
    if ( status != PJ_SUCCESS )
    error_exit( “Error registration.” );
    /* 注册成功*/
    ……
3.4.2 会话控制
    终端完成注册后,进入等待状态,等待主动发起呼叫或者被动接收呼叫。
    (1)主叫模式。该模式下,本终端作为一个UAC,主动完成对远程UAS的呼叫。主要由函数pjsua_call_make_call()完成主叫功能。
    (2)被叫模式。该模式下,本终端作为一个UAS,在默认端口5060接收远程UAC发来的会话请求并回应。主要由两个回调函数on_incoming_call(),和on_call_media_state()完成被叫应答功能。配置回调函数代码如下:
    cfg.cb.on_incoming_call = &on_incoming_call;
    cfg.cb.on_call_media_state = &on_call_media_state;

4 测试与结论

4.1 测试平台

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

图4 测试平台

 

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

4.2 结论

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

参考资料

    [1] 李文耀等.电信业务全IP化的发展趋势,通信世界,2008.1:P21-22
    [2] www.pjsip.org
    [3] 汪兵,李存斌, 陈鹏等. EVC高级编程及其应用开发,中国水利水电出版社,2005 年3月

你可能感兴趣的:(数据结构,Stream,测试,平台,终端,电话)