文档章节

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

AK_47
 AK_47
发布于 2014/07/09 17:43
字数 2416
阅读 70
收藏 1

 摘  要 介绍了以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月

© 著作权归作者所有

AK_47
粉丝 16
博文 533
码字总数 569998
作品 0
嘉定
程序员
私信 提问
VoIP——开启免费通话新时代的先锋

VoIP又称IP电话或IP网络电话,是Voice Over IP的缩写,这种技术通过对语音信号进行编码数字化、压缩处理成压缩帧,然后转换为IP数据包在TCPIP网络上进行传输,从而达到了在IP网络上进行语音通...

杨书凡
2017/09/10
0
0
IP电话基本原理详细解析

一、IP电话基本原理: 通过语音压缩算法对语音信号进行压缩编码处理,然后把这些语音数据按TCP/IP标准进行打包,经过网络把数据包发送到接收地;接收端把这些语音数据包串起来,经过解码解压...

彦天天
2017/05/10
0
0
企业智能通信办公系统UCM6510领跑企业办公通信

在“互联网+”热潮的推动下,各个传统行业都希望借助信息通信技术及互联网平台,让互联网与传统行业进行深度融合,从而优化行业模式,创造新的发展生态。中小企业作为我国企业中数量最大、最...

讯美时代
2016/10/10
2
0
基于树莓派的智能家居项目的设想与实现--Hestia

Hestia —— 基于树莓派的智能家居项目的设想与实现 初衷 利用红外线传感器智能控制空调、电视等基于红外遥控的家电设备; 智能控制家中的灯泡设备(部分基于网络协议); (待更新...) 方案...

GenialX
2017/11/22
2.3K
0
安森美半导体的行业首款单芯片移动电源方案更智能且支持快充

随着移动设备越来越丰富的功能,耗电量却也显著增加,而消费者同时希望设备持续连接的生活方式和时尚轻薄的外形,电池续航力成为亟需解决的问题,更智能且支持快充的移动电源方案便应运而生。...

玄学酱
2018/04/23
0
0

没有更多内容

加载失败,请刷新页面

加载更多

OSChina 周一乱弹 —— 年迈渔夫遭黑帮袭抢

Osc乱弹歌单(2019)请戳(这里) 【今日歌曲】 @tom_tdhzz :#今日歌曲推荐# 分享Elvis Presley的单曲《White Christmas》: 《White Christmas》- Elvis Presley 手机党少年们想听歌,请使劲...

小小编辑
今天
1K
20
CentOS7.6中安装使用fcitx框架

内容目录 一、为什么要使用fcitx?二、安装fcitx框架三、安装搜狗输入法 一、为什么要使用fcitx? Gnome3桌面自带的输入法框架为ibus,而在使用ibus时会时不时出现卡顿无法输入的现象。 搜狗和...

技术训练营
昨天
5
0
《Designing.Data-Intensive.Applications》笔记 四

第九章 一致性与共识 分布式系统最重要的的抽象之一是共识(consensus):让所有的节点对某件事达成一致。 最终一致性(eventual consistency)只提供较弱的保证,需要探索更高的一致性保证(stro...

丰田破产标志
昨天
8
0
docker 使用mysql

1, 进入容器 比如 myslq1 里面进行操作 docker exec -it mysql1 /bin/bash 2. 退出 容器 交互: exit 3. mysql 启动在容器里面,并且 可以本地连接mysql docker run --name mysql1 --env MY...

之渊
昨天
16
0
python数据结构

1、字符串及其方法(案例来自Python-100-Days) def main(): str1 = 'hello, world!' # 通过len函数计算字符串的长度 print(len(str1)) # 13 # 获得字符串首字母大写的...

huijue
昨天
6
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部