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

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

  1. Cisco IP电话软件的WINRTP

    纵览Overview of this Document 介绍Introduction 更新What's New 功能Features 组件及安装Components and Installation ...

  2. android收入管理系统,毕业设计(论文)-基于Android系统的家庭理财通软件的设计——收入管理模块.docx...

    PAGE 河北农业大学信息学院 本科毕业论文 题 目:基于Android系统的家庭理财通软件的 设计--收入管理模块 学 院: 信息科学与技术学院 专业班级: 计算机科学与技术0902班 学 号: 二 ...

  3. 基于Netty的Android局域网IP电话

    PhoneCall 此项目为基于netty框架实现的局域网内的ip电话,实现了先录音然后进行混音的功能,并且在github上传了demo可以进行测试. 一.介绍 基于netty框架开发的局域网IP电话 ...

  4. python收集数据程序_基于Python语言的互联网数据收集软件的设计

    软件建立所需的工具及其版本 编写环境与 IDE Python3.5.2 Windows10 PyCharm 2016.3 Sublime Text3 第三方库与版本号 Requests 2.12.1 ...

  5. 基于SpringBoot的智能运动与营养配餐软件的设计

  6. 基于JSP的猎头公司管理软件的设计

    技术:Java.JSP等 摘要: 随着信息科学技术的飞速发展,人们逐渐意识到对信息管理软件的运用可以使日常工作更加方便.快捷和高效.论文详细论述了猎头公司管理软件内部事务部分的开发设计过程.软件采用J ...

  7. IP电话介绍,何时才能进入中国

    IP电话(简称VoIP,源自英语Voice over Internet Protocol:又名宽带电话或网络电话)是一种透过互联网或其他使用IP技术的网络,来实现新型的电话通讯.过去IP电话主要应用在 ...

  8. 基于android的检测心率,基于Android系统的心率信息监测软件的研究与实现

    摘要: 近年来,随着工作生活压力的日益增加,各种慢性疾病的发病率持续上升,给人们的健康生活带来很大的影响.为了防止这种情况的发生,对于慢性病的早期的预防与治疗已经成为人们普遍关心的问题.随着科技的进步 ...

  9. 语音技术IP电话的原理结构

    随着光网络的飞速发展和数字传输技术的应用,原来在数据通信网中被视为应用"瓶颈"的带宽和服务质量等问题一一得到解决,推动了IP技术的飞速发展,带动各种应用向IP靠拢, IP电话(又称 ...

最新文章

  1. tensorflow中的tf.summary.image
  2. delphi 回调函数
  3. python自动化--语言基础一数据类型及类型转换
  4. VirtualBox COM对象获取失败
  5. 机器学习经典必读书,李航《统计学习方法》出视频课了!
  6. 一份详尽的IPC$入侵资料
  7. angular js环境配置
  8. Android应用程序组件Content Provider在应用程序之间共享数据的原理分析(2)
  9. 文字抖动_如何用PS制作故障风文字效果
  10. css3 多列布局使用
  11. .NET高级代码审计(第三课)Fastjson反序列化漏洞
  12. jQueryEasyUI选项卡 - 自定义工具样式
  13. php mvc 参数传递数组,PHP MVC在帖子上添加到数组
  14. JS - Math对象
  15. 马蜂窝火车票系统服务化改造初探
  16. NVIDIA Jetson TX2简介
  17. JOB DESCRIPTION
  18. spilt的用法小结
  19. minigui学习笔记四
  20. 大数据的应用场景都有哪些(交通篇)

热门文章

  1. 楚汉之刘邦灭秦java下载_刘邦灭秦之战
  2. 计算机组成原理B表示,计算机组成原理B
  3. 卢卡奇总体性原则_卢卡奇的“总体性”原则探析
  4. linux右键菜单颜色,Linux_自定义右键菜单代码详解, style !-- /*定义菜单 - phpStudy...
  5. 三国杀3v3模式最好的组合
  6. 物业管理系统 ERP系统 下载
  7. 使用SAS 批量修改文件名
  8. Visio2016通过部署工具的方式进行安装
  9. [原创.数据可视化系列之五]韩国萨德系统防御图
  10. 神舟凯旋,四海欢颜!“神舟十二号”背后的Smartbi力量