基于Android平台的VoIP设计实现*
2017-07-31杜奇才邓诚刚林嘉宇
杜奇才,邓诚刚,刘 荧,林嘉宇
(1.特种作战学院,广州510500;2.广东中科军民融合产业研究院,广州510070;3.国防科学技术大学,长沙410073;4.长沙芯洗数字科技有限公司,长沙410073)
基于Android平台的VoIP设计实现*
杜奇才1,邓诚刚2,刘 荧3,林嘉宇4
(1.特种作战学院,广州510500;2.广东中科军民融合产业研究院,广州510070;3.国防科学技术大学,长沙410073;4.长沙芯洗数字科技有限公司,长沙410073)
随着移动通信技术和嵌入式系统的飞速发展,基于智能终端的VoIP在个人、商业组织和政府中的应用日趋广泛。在智能终端中,Android操作系统以其开放性和灵活性,深受广大用户和厂商的青睐,在全球市场已占据绝对优势地位。因此,基于Android平台设计实现VoIP系统,具有广泛的应用前景。介绍了PJSIP协议框架结构,分析了语音通信和即时消息收发流程,并以Android系统为运行平台,设计实现了VoIP系统。利用开源服务器FreeSwitch进行测试,该系统能够在不同版本的Android智能手机运行,并能够在3G/4G以及WIFI网络环境中进行稳定的语音通话与即时信息传输,结果表明该系统具有良好的功能性与稳定性。
VoIP系统;Android平台;PJSIP协议;智能手机;语音通信;即时消息
1 引言
随着移动通信技术和嵌入式系统的发展,基于智能终端的VoIP在个人、商业组织和政府中得到了广泛应用。通讯市场研究公司Infonetics Research的数据显示,2012年全球移动VoIP用户数猛增550%以上,超过6.4亿,并预计2012年到2017年VoLTE用户数的年均复合增长率为145%,2017年移动VoIP和VoLTE服务市场总值将达到160亿美元[1]。在智能终端中,Android设备凭借较高的性价比及平台的开放性,得到了众多手机厂商、移动开发者及终端用户的青睐。最新数据表明,2016年第二季度,An-droid在中国智能手机市场的份额达到了81.4%[2]。因此,将VoIP与Android两者结合,并引入市场,具有巨大的潜在价值。
基于Android平台和PJSIP开源协议,实现了一个具备语音通信和即时消息收发功能的VoIP系统,并利用开源服务器FreeSwitch进行了功能测试。测试结果表明,该系统能够很好的完成会话的发起、应答、通信等功能,基本满足了设计要求,具有一定的实用性。
2 系统设计
VoIP[3]是通过IP网络实时传送语音数据的一种通讯方式,目前有多种标准信令协议支持VoIP的部署和实施,其中SIP是使用最为广泛的协议,具有简单、灵活、易于移植的特点,非常适合基于Android操作系统的VoIP开发。
2.1 SI P协议选择
SIP[4]是由互联网工程任务组IETF创建的VoIP通话连接协议标准,是一种基于文本的应用层协议,用来建立、修改和终止会话或多媒体电话。常见的开源SIP协议主要有ReSIProcate、sipX、JAIN、oSIP和PJSIP等[5]。ReSIProcate兼容性好,应用程序比较稳定,但移植性比较差,不太适合开发终端软件。sipX兼容大多数操作系统,但缺乏开发文档。JAIN使用JAVA开发,效率较低。oSIP与PJSIP都是采用C语言开发,具有很高的可移植性以及高效的处理能力,但PJSIP具有更清晰的API,更好的移植性,以及更详细的开发文档,并且PJSIP封装有NAT穿越的库,非常适合用于开发跨网段的SIP应用。
2.2 PJSI P协议分析
PJSIP架构清晰,功能齐全,各子模块层次结构如图1所示[6]。
图1 PJSIP结构框图
从图1可以看出,PJSUA-LIB为抽象功能最高层,它集成了下层的所有功能到API,便于程序调用;PJMDEDIA-CODEC和PJMEDIA实现了所有的音视频处理,包括音视频编解码以及传输;PJSIP-UA是INVITE会话的一个高层抽象,该库也实现了 SIP客户端的注册和呼叫转移功能;PJSIP-SIMPLE提供对IM和Presence功能的支持;PJSIP-CORE是PJSIP库的内核,它包含了SIP Endpoint,负责管理应用程序中所有SIP对象、消息的分析、传输管理和模块管理、无状态操作等;PJLIB-UTIL提供一些辅助功能,如文本扫描、XML和STUN等;PJLIB是一个平台抽象的框架库,它为上层调用提供一个与操作系统无关的系统服务。
从以上分析可以看出,PJSIP作为基于SIP的一个多媒体通信框架提供了非常清晰的API,实现了SIP、SDP、RTP、STUN、TURN和ICE等功能,同时支持语音、视频、状态呈现和即时通讯等功能,而且编译后库文件所占内存空间极小,使其非常适合用于Android平台的VoIP开发。
2.3 系统总体架构
Android[7]是一种基于Linux的自由及开放源代码的操作系统,自顶向下分成4个层次,即应用层、应用框架层、组件库层和虚拟机、Linux内核层。Android系统的最大优点在于只需在应用层做开发即可,而不需要特别在意下层设计。因此在VoIP开发过程中,遵循NDK框架开发规范,将系统分为4层,如图2所示。
图2 VoIP总体框架
其中,JAVA应用层使用JAVA语言开发,完成界面设计以及用户与系统的交互,通过调用JNI接口实现VoIP的注册、语音通话、即时消息收发、联系人管理等功能。JAVA本地接口层是JAVA应用层与PJSIP协议码层之间的桥梁,通过JNI定义PJSUA-LIB等函数的本地接口,使得应用层能够加载动态库so文件,来实现SIP具体功能。PJSIP协议层主要包含封装完整的PJSIP协议栈源码,通过编译可以生成动态库so文件。内核驱动层一般由驱动程序的开发厂商实现,包含音频驱动、网络驱动等相关程序。
3 功能实现
系统设计目标是在基于Android的智能手机上利用VoIP实现用户登录与注册、语音通话、即时消息收发、联系人管理等功能。
根据功能需求,在JAVA应用层中,主要围绕Android组件进行。其中:
Activity:完成VoIP界面UI显示;
Intent:主要实现VoIP系统Activity和Activity之间的切换与交互;
Service:完成VoIP系统Activity和后台之间的联系以及进程间的通信;
Content Provider:完成数据保存及共享,主要保存参数设置、用户状态、联系人数据等信息;
Broadcast:主要完成在VoIP系统内信息的广播,一般会和Content Provider结合,如当数据改变时,则携带信息发送广播,当所有已注册的广播接收器接收到内容之后进行解析并进行相应操作。
需要说明的是,PJSIP协议层为底层C函数,这些C函数编译生成so库,由JAVA层通过JNI调用。为方便Android调用,又将JAVA层的SIP服务进一步封装成Android中的标准service,进而实现Android层对PJSIP的调用,实现语音与短信的通信传输。
下面结合PJSIP协议底层函数,重点针对语音通信实现及即时消息收发流程介绍其功能实现。
3.1 语音通信实现
VoIP系统的语音通话实现主要包括三个步骤:语音采集与播放、压缩与编码和打包与传输。在利用PJSIP协议进行语音通话设计时,主要利用PJMEDIA和PJMEDIA-CODEC相关函数实现语音的处理与传输。
当用户在VoIP界面拨号呼叫后,系统通过Android service中的方法调用,利用JNI进入PjSipService中的 makecall函数,进而最终调用 pjsua. call_make_call()建立通话。
当通话建立后,发送端Android智能手机从MIC获取语音信号,并通过conference bridge与Codec连接,Codec根据选择的编码方式进行encode,接着,编码过的Payload加上RTP Header与UDP Header封装成UDP语音包。
接收端,当收到UDP语音包后,首先将UDP Header和RTP Header拿掉,接着放到jitter buffer内暂存,由Codec依据两端协商好的编解码算法进行解码,并由conference bridge将解码出的语音信号通过sound装置播放出来。语音信号的发送与接收如图3所示。
图3 VoIP语音信号处理流程
在语音通话过程中,jitter buffer的作用是对媒体流进行缓冲,从而处理由于网络原因而造成的抖动和丢包现象。经过jitter buffer处理的媒体流被Codec编解码处理后,由conference bridge进行参数调整,如时钟速率、声道等,随之由音频设备端口进入音频设备,由播放器Speaker播放出语音。
3.2 即时消息收发的实现
即时消息收发也是VoIP的基本功能之一,SIP利用一个扩展的请求消息来实现即时消息机制,在其请求消息体中携带即时消息内容。SIP的即时消息机制通常采用类似于寻呼器的工作模式,在这个模式里,每一条即时消息发送和接收都是一个单独过程,与其它消息的处理没有必然的上下文联系。PJSIP中的PJSIP-SIMPLE提供了对即时消息通信的支持,本系统使用该模块实现即时消息收发。
发送端,当用户在VoIP界面点击短信发送后,系统Activity组件调用Android service,进入SipService中的消息发送方法,从而利用JNI进入PjSip Service中的sendMessage()函数,在该函数内部进一步调用 pjsua.im_send(),即最终通过调用pjsua. im_send()函数完成消息发送。即时消息发送流程如图4所示。
图4 VoIP即时消息发送流程
其中,pjsua.im_send()函数定义如下:PJ_DEF
(pj_status_t)pjsua_im_send(pjsua_acc_idconst pj_tr_t*to,const pj_tr_t*mime_type,const pj_tr_t*content,const pjsua_msg_data*msg_data,void*user_data)
参数acc_id是发送消息的账户ID;to为路由地址,包含用户名和下一跳路由地址,格式一般是<sip:用户名@IP地址:端口>,端口为空,则默认使用 5060;mime_type是消息的互联网媒体类型;content是消息的内容;msg_data是在消息头部中要添加的头域列表,可选;user_data是用户数据,可选。
接收端,可以利用pager2()函数来实现信息接收,其参数不再赘述。
4 系统测试
FreeSwitch是一个功能强大的VoIP开源软交换机,以软件形式提供了完善的专用交换机功能,兼容多种主流协议,包括SIP、H.323等,可实现拨号通信、会议电话、互动式语音应答、语音信箱、会话记录等业务功能[8]。在Windows Server 2008操作系统中利用FreeSwitch 1.6版本构建服务器,分别在三台Android版本为4.0.3、4.2.1和6.0的智能手机上安装VoIP系统,并进行联网测试,在WIFI及3G/4G网络下三台手机之间均可进行正常语音与即时消息通信,系统运行稳定,达到了预期设计目标。
5 结束语
利用PJSIP开源协议设计实现了基于Android的VoIP系统,并重点分析了PJSIP实现语音通信和即时消息收发的工作流程,为后续在此基础上实现语音与即时消息加密打下了良好基础。实验证明该系统性能稳定、运行可靠,在此基础上丰富离线消息收发、通话加密等功能,将进一步拓展其实用性。
[1]Infonetics Research raises VoLTE forecast.Over-the-top mobile VoIP subscribers nearing 1 billion mark(2013) [EB/OL].http://www.infonetics.com/pr/2013/MobileVoIPServices-and-Subscribers-Market-Highlights.asp.
[2]Kantar Worldpanel ComTech.Smartphone OS sales market share[EB/OL].http://www.kantarworldpanel.com/global/smartphone-os-market-share.
[3]文松松.基于SIP协议的语音对讲系统的设计与实现[D].成都:西南交通大学,2013. Wen Songsong.Design and implementation ofvoice intercom systembased on SIP protocol[D].Chengdu:Southwest JiaotongUniversity,2013.
[4]Rosenberg J,Schulzrinne H,Camarillo G,et al.SIP:Session Initiation Protocol[S].RFC3261,IETF,2002.
[5]凌小荣.基于SIP网络音视频通信的研究与实现 [D].广州:华南理工大学,2014. Ling Xiaorong.Research and implementation of Internet audio/video communication based on SIP[D].Guangzhou:South China UniversityofTechnology,2014.
[6]Benny Prijono.PJSIP-Open Source SIP Stack[EB/OL]. http://www.pisip.org.
[7]王冉.基于Android的多媒体及相关技术的研究与应用[D].北京:北京邮电大学,2013. Wang Ran.Research and implementation of multimedia technologybased on Android[D].Beijing:BeijingUniversity ofPosts and Telecommunications,2013.
[8]FreeSwitch[EB/OL].https://freeswitch.org.
Design and Implementation of VoIP Based on Android Platform
Du Qicai1,Deng Chenggang2,Liu Ying3,Lin Jiayu4
(1.Special Operations Academy,Guangzhou 510500,China;2.Guangdong Zhongke Research Institute of Civil-military Integration Industry,Guangzhou 510070,China;3.School of Electronic Science and Engineering,Changsha 410073,China; 4.Changsha Xinxi Digital Technology Co.,Ltd.,Changsha 410073,China)
As the rapid development of the mobile communication and embedded systems,Voice over Internet Protocol(VoIP)on smart mobile devices has become increasingly popular among individuals, business organizations and governments.For the smart mobile devices,the Android OS,which has been attracted by customers and manufactures due to its openness and flexibility,has occupied the absolute dominant position on the global market.So,it has wide market prospect to design and implement the VoIP based on Android platform.This paper introduces the architecture of PJSIP stack,analyzes the communication flow of voice and instant message,uses Android system as a running platform,and realizes the system of voice call in the Internet.After testing this system through the open source server FreeSwitch,it can run on smart phones using different variations of Android,and also support stable voice call and instant message transmission in 3G,4G and WIFI network.The result shows that it has good functionality and stability.
VoIP system;Android platform;PJSIP stack;Smart phones;Voice communication;Instant message
10.3969/j.issn.1002-2279.2017.02.010
TP393
A
1002-2279-(2017)02-0041-04
广东省科技装备动员项目《军用智能手机端到端保密通信系统》
杜奇才(1981-),男,山东省滕州市人,硕士研究生,讲师,主研方向:侦察装备技术、信息与通信技术。
2016-08-31