杜奇才,鄧誠(chéng)剛,劉 熒,林嘉宇
(1.特種作戰(zhàn)學(xué)院,廣州510500;2.廣東中科軍民融合產(chǎn)業(yè)研究院,廣州510070;3.國(guó)防科學(xué)技術(shù)大學(xué),長(zhǎng)沙410073;4.長(zhǎng)沙芯洗數(shù)字科技有限公司,長(zhǎng)沙410073)
基于Android平臺(tái)的VoIP設(shè)計(jì)實(shí)現(xiàn)*
杜奇才1,鄧誠(chéng)剛2,劉 熒3,林嘉宇4
(1.特種作戰(zhàn)學(xué)院,廣州510500;2.廣東中科軍民融合產(chǎn)業(yè)研究院,廣州510070;3.國(guó)防科學(xué)技術(shù)大學(xué),長(zhǎng)沙410073;4.長(zhǎng)沙芯洗數(shù)字科技有限公司,長(zhǎng)沙410073)
隨著移動(dòng)通信技術(shù)和嵌入式系統(tǒng)的飛速發(fā)展,基于智能終端的VoIP在個(gè)人、商業(yè)組織和政府中的應(yīng)用日趨廣泛。在智能終端中,Android操作系統(tǒng)以其開放性和靈活性,深受廣大用戶和廠商的青睞,在全球市場(chǎng)已占據(jù)絕對(duì)優(yōu)勢(shì)地位。因此,基于Android平臺(tái)設(shè)計(jì)實(shí)現(xiàn)VoIP系統(tǒng),具有廣泛的應(yīng)用前景。介紹了PJSIP協(xié)議框架結(jié)構(gòu),分析了語音通信和即時(shí)消息收發(fā)流程,并以Android系統(tǒng)為運(yùn)行平臺(tái),設(shè)計(jì)實(shí)現(xiàn)了VoIP系統(tǒng)。利用開源服務(wù)器FreeSwitch進(jìn)行測(cè)試,該系統(tǒng)能夠在不同版本的Android智能手機(jī)運(yùn)行,并能夠在3G/4G以及WIFI網(wǎng)絡(luò)環(huán)境中進(jìn)行穩(wěn)定的語音通話與即時(shí)信息傳輸,結(jié)果表明該系統(tǒng)具有良好的功能性與穩(wěn)定性。
VoIP系統(tǒng);Android平臺(tái);PJSIP協(xié)議;智能手機(jī);語音通信;即時(shí)消息
隨著移動(dòng)通信技術(shù)和嵌入式系統(tǒng)的發(fā)展,基于智能終端的VoIP在個(gè)人、商業(yè)組織和政府中得到了廣泛應(yīng)用。通訊市場(chǎng)研究公司Infonetics Research的數(shù)據(jù)顯示,2012年全球移動(dòng)VoIP用戶數(shù)猛增550%以上,超過6.4億,并預(yù)計(jì)2012年到2017年VoLTE用戶數(shù)的年均復(fù)合增長(zhǎng)率為145%,2017年移動(dòng)VoIP和VoLTE服務(wù)市場(chǎng)總值將達(dá)到160億美元[1]。在智能終端中,Android設(shè)備憑借較高的性價(jià)比及平臺(tái)的開放性,得到了眾多手機(jī)廠商、移動(dòng)開發(fā)者及終端用戶的青睞。最新數(shù)據(jù)表明,2016年第二季度,An-droid在中國(guó)智能手機(jī)市場(chǎng)的份額達(dá)到了81.4%[2]。因此,將VoIP與Android兩者結(jié)合,并引入市場(chǎng),具有巨大的潛在價(jià)值。
基于Android平臺(tái)和PJSIP開源協(xié)議,實(shí)現(xiàn)了一個(gè)具備語音通信和即時(shí)消息收發(fā)功能的VoIP系統(tǒng),并利用開源服務(wù)器FreeSwitch進(jìn)行了功能測(cè)試。測(cè)試結(jié)果表明,該系統(tǒng)能夠很好的完成會(huì)話的發(fā)起、應(yīng)答、通信等功能,基本滿足了設(shè)計(jì)要求,具有一定的實(shí)用性。
VoIP[3]是通過IP網(wǎng)絡(luò)實(shí)時(shí)傳送語音數(shù)據(jù)的一種通訊方式,目前有多種標(biāo)準(zhǔn)信令協(xié)議支持VoIP的部署和實(shí)施,其中SIP是使用最為廣泛的協(xié)議,具有簡(jiǎn)單、靈活、易于移植的特點(diǎn),非常適合基于Android操作系統(tǒng)的VoIP開發(fā)。
2.1 SI P協(xié)議選擇
SIP[4]是由互聯(lián)網(wǎng)工程任務(wù)組IETF創(chuàng)建的VoIP通話連接協(xié)議標(biāo)準(zhǔn),是一種基于文本的應(yīng)用層協(xié)議,用來建立、修改和終止會(huì)話或多媒體電話。常見的開源SIP協(xié)議主要有ReSIProcate、sipX、JAIN、oSIP和PJSIP等[5]。ReSIProcate兼容性好,應(yīng)用程序比較穩(wěn)定,但移植性比較差,不太適合開發(fā)終端軟件。sipX兼容大多數(shù)操作系統(tǒng),但缺乏開發(fā)文檔。JAIN使用JAVA開發(fā),效率較低。oSIP與PJSIP都是采用C語言開發(fā),具有很高的可移植性以及高效的處理能力,但PJSIP具有更清晰的API,更好的移植性,以及更詳細(xì)的開發(fā)文檔,并且PJSIP封裝有NAT穿越的庫,非常適合用于開發(fā)跨網(wǎng)段的SIP應(yīng)用。
2.2 PJSI P協(xié)議分析
PJSIP架構(gòu)清晰,功能齊全,各子模塊層次結(jié)構(gòu)如圖1所示[6]。
圖1 PJSIP結(jié)構(gòu)框圖
從圖1可以看出,PJSUA-LIB為抽象功能最高層,它集成了下層的所有功能到API,便于程序調(diào)用;PJMDEDIA-CODEC和PJMEDIA實(shí)現(xiàn)了所有的音視頻處理,包括音視頻編解碼以及傳輸;PJSIP-UA是INVITE會(huì)話的一個(gè)高層抽象,該庫也實(shí)現(xiàn)了 SIP客戶端的注冊(cè)和呼叫轉(zhuǎn)移功能;PJSIP-SIMPLE提供對(duì)IM和Presence功能的支持;PJSIP-CORE是PJSIP庫的內(nèi)核,它包含了SIP Endpoint,負(fù)責(zé)管理應(yīng)用程序中所有SIP對(duì)象、消息的分析、傳輸管理和模塊管理、無狀態(tài)操作等;PJLIB-UTIL提供一些輔助功能,如文本掃描、XML和STUN等;PJLIB是一個(gè)平臺(tái)抽象的框架庫,它為上層調(diào)用提供一個(gè)與操作系統(tǒng)無關(guān)的系統(tǒng)服務(wù)。
從以上分析可以看出,PJSIP作為基于SIP的一個(gè)多媒體通信框架提供了非常清晰的API,實(shí)現(xiàn)了SIP、SDP、RTP、STUN、TURN和ICE等功能,同時(shí)支持語音、視頻、狀態(tài)呈現(xiàn)和即時(shí)通訊等功能,而且編譯后庫文件所占內(nèi)存空間極小,使其非常適合用于Android平臺(tái)的VoIP開發(fā)。
2.3 系統(tǒng)總體架構(gòu)
Android[7]是一種基于Linux的自由及開放源代碼的操作系統(tǒng),自頂向下分成4個(gè)層次,即應(yīng)用層、應(yīng)用框架層、組件庫層和虛擬機(jī)、Linux內(nèi)核層。Android系統(tǒng)的最大優(yōu)點(diǎn)在于只需在應(yīng)用層做開發(fā)即可,而不需要特別在意下層設(shè)計(jì)。因此在VoIP開發(fā)過程中,遵循NDK框架開發(fā)規(guī)范,將系統(tǒng)分為4層,如圖2所示。
圖2 VoIP總體框架
其中,JAVA應(yīng)用層使用JAVA語言開發(fā),完成界面設(shè)計(jì)以及用戶與系統(tǒng)的交互,通過調(diào)用JNI接口實(shí)現(xiàn)VoIP的注冊(cè)、語音通話、即時(shí)消息收發(fā)、聯(lián)系人管理等功能。JAVA本地接口層是JAVA應(yīng)用層與PJSIP協(xié)議碼層之間的橋梁,通過JNI定義PJSUA-LIB等函數(shù)的本地接口,使得應(yīng)用層能夠加載動(dòng)態(tài)庫so文件,來實(shí)現(xiàn)SIP具體功能。PJSIP協(xié)議層主要包含封裝完整的PJSIP協(xié)議棧源碼,通過編譯可以生成動(dòng)態(tài)庫so文件。內(nèi)核驅(qū)動(dòng)層一般由驅(qū)動(dòng)程序的開發(fā)廠商實(shí)現(xiàn),包含音頻驅(qū)動(dòng)、網(wǎng)絡(luò)驅(qū)動(dòng)等相關(guān)程序。
系統(tǒng)設(shè)計(jì)目標(biāo)是在基于Android的智能手機(jī)上利用VoIP實(shí)現(xiàn)用戶登錄與注冊(cè)、語音通話、即時(shí)消息收發(fā)、聯(lián)系人管理等功能。
根據(jù)功能需求,在JAVA應(yīng)用層中,主要圍繞Android組件進(jìn)行。其中:
Activity:完成VoIP界面UI顯示;
Intent:主要實(shí)現(xiàn)VoIP系統(tǒng)Activity和Activity之間的切換與交互;
Service:完成VoIP系統(tǒng)Activity和后臺(tái)之間的聯(lián)系以及進(jìn)程間的通信;
Content Provider:完成數(shù)據(jù)保存及共享,主要保存參數(shù)設(shè)置、用戶狀態(tài)、聯(lián)系人數(shù)據(jù)等信息;
Broadcast:主要完成在VoIP系統(tǒng)內(nèi)信息的廣播,一般會(huì)和Content Provider結(jié)合,如當(dāng)數(shù)據(jù)改變時(shí),則攜帶信息發(fā)送廣播,當(dāng)所有已注冊(cè)的廣播接收器接收到內(nèi)容之后進(jìn)行解析并進(jìn)行相應(yīng)操作。
需要說明的是,PJSIP協(xié)議層為底層C函數(shù),這些C函數(shù)編譯生成so庫,由JAVA層通過JNI調(diào)用。為方便Android調(diào)用,又將JAVA層的SIP服務(wù)進(jìn)一步封裝成Android中的標(biāo)準(zhǔn)service,進(jìn)而實(shí)現(xiàn)Android層對(duì)PJSIP的調(diào)用,實(shí)現(xiàn)語音與短信的通信傳輸。
下面結(jié)合PJSIP協(xié)議底層函數(shù),重點(diǎn)針對(duì)語音通信實(shí)現(xiàn)及即時(shí)消息收發(fā)流程介紹其功能實(shí)現(xiàn)。
3.1 語音通信實(shí)現(xiàn)
VoIP系統(tǒng)的語音通話實(shí)現(xiàn)主要包括三個(gè)步驟:語音采集與播放、壓縮與編碼和打包與傳輸。在利用PJSIP協(xié)議進(jìn)行語音通話設(shè)計(jì)時(shí),主要利用PJMEDIA和PJMEDIA-CODEC相關(guān)函數(shù)實(shí)現(xiàn)語音的處理與傳輸。
當(dāng)用戶在VoIP界面撥號(hào)呼叫后,系統(tǒng)通過Android service中的方法調(diào)用,利用JNI進(jìn)入PjSipService中的 makecall函數(shù),進(jìn)而最終調(diào)用 pjsua. call_make_call()建立通話。
當(dāng)通話建立后,發(fā)送端Android智能手機(jī)從MIC獲取語音信號(hào),并通過conference bridge與Codec連接,Codec根據(jù)選擇的編碼方式進(jìn)行encode,接著,編碼過的Payload加上RTP Header與UDP Header封裝成UDP語音包。
接收端,當(dāng)收到UDP語音包后,首先將UDP Header和RTP Header拿掉,接著放到j(luò)itter buffer內(nèi)暫存,由Codec依據(jù)兩端協(xié)商好的編解碼算法進(jìn)行解碼,并由conference bridge將解碼出的語音信號(hào)通過sound裝置播放出來。語音信號(hào)的發(fā)送與接收如圖3所示。
圖3 VoIP語音信號(hào)處理流程
在語音通話過程中,jitter buffer的作用是對(duì)媒體流進(jìn)行緩沖,從而處理由于網(wǎng)絡(luò)原因而造成的抖動(dòng)和丟包現(xiàn)象。經(jīng)過jitter buffer處理的媒體流被Codec編解碼處理后,由conference bridge進(jìn)行參數(shù)調(diào)整,如時(shí)鐘速率、聲道等,隨之由音頻設(shè)備端口進(jìn)入音頻設(shè)備,由播放器Speaker播放出語音。
3.2 即時(shí)消息收發(fā)的實(shí)現(xiàn)
即時(shí)消息收發(fā)也是VoIP的基本功能之一,SIP利用一個(gè)擴(kuò)展的請(qǐng)求消息來實(shí)現(xiàn)即時(shí)消息機(jī)制,在其請(qǐng)求消息體中攜帶即時(shí)消息內(nèi)容。SIP的即時(shí)消息機(jī)制通常采用類似于尋呼器的工作模式,在這個(gè)模式里,每一條即時(shí)消息發(fā)送和接收都是一個(gè)單獨(dú)過程,與其它消息的處理沒有必然的上下文聯(lián)系。PJSIP中的PJSIP-SIMPLE提供了對(duì)即時(shí)消息通信的支持,本系統(tǒng)使用該模塊實(shí)現(xiàn)即時(shí)消息收發(fā)。
發(fā)送端,當(dāng)用戶在VoIP界面點(diǎn)擊短信發(fā)送后,系統(tǒng)Activity組件調(diào)用Android service,進(jìn)入SipService中的消息發(fā)送方法,從而利用JNI進(jìn)入PjSip Service中的sendMessage()函數(shù),在該函數(shù)內(nèi)部進(jìn)一步調(diào)用 pjsua.im_send(),即最終通過調(diào)用pjsua. im_send()函數(shù)完成消息發(fā)送。即時(shí)消息發(fā)送流程如圖4所示。
圖4 VoIP即時(shí)消息發(fā)送流程
其中,pjsua.im_send()函數(shù)定義如下: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)
參數(shù)acc_id是發(fā)送消息的賬戶ID;to為路由地址,包含用戶名和下一跳路由地址,格式一般是<sip:用戶名@IP地址:端口>,端口為空,則默認(rèn)使用 5060;mime_type是消息的互聯(lián)網(wǎng)媒體類型;content是消息的內(nèi)容;msg_data是在消息頭部中要添加的頭域列表,可選;user_data是用戶數(shù)據(jù),可選。
接收端,可以利用pager2()函數(shù)來實(shí)現(xiàn)信息接收,其參數(shù)不再贅述。
FreeSwitch是一個(gè)功能強(qiáng)大的VoIP開源軟交換機(jī),以軟件形式提供了完善的專用交換機(jī)功能,兼容多種主流協(xié)議,包括SIP、H.323等,可實(shí)現(xiàn)撥號(hào)通信、會(huì)議電話、互動(dòng)式語音應(yīng)答、語音信箱、會(huì)話記錄等業(yè)務(wù)功能[8]。在Windows Server 2008操作系統(tǒng)中利用FreeSwitch 1.6版本構(gòu)建服務(wù)器,分別在三臺(tái)Android版本為4.0.3、4.2.1和6.0的智能手機(jī)上安裝VoIP系統(tǒng),并進(jìn)行聯(lián)網(wǎng)測(cè)試,在WIFI及3G/4G網(wǎng)絡(luò)下三臺(tái)手機(jī)之間均可進(jìn)行正常語音與即時(shí)消息通信,系統(tǒng)運(yùn)行穩(wěn)定,達(dá)到了預(yù)期設(shè)計(jì)目標(biāo)。
利用PJSIP開源協(xié)議設(shè)計(jì)實(shí)現(xiàn)了基于Android的VoIP系統(tǒng),并重點(diǎn)分析了PJSIP實(shí)現(xiàn)語音通信和即時(shí)消息收發(fā)的工作流程,為后續(xù)在此基礎(chǔ)上實(shí)現(xiàn)語音與即時(shí)消息加密打下了良好基礎(chǔ)。實(shí)驗(yàn)證明該系統(tǒng)性能穩(wěn)定、運(yùn)行可靠,在此基礎(chǔ)上豐富離線消息收發(fā)、通話加密等功能,將進(jìn)一步拓展其實(shí)用性。
[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協(xié)議的語音對(duì)講系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)[D].成都:西南交通大學(xué),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網(wǎng)絡(luò)音視頻通信的研究與實(shí)現(xiàn) [D].廣州:華南理工大學(xué),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的多媒體及相關(guān)技術(shù)的研究與應(yīng)用[D].北京:北京郵電大學(xué),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
廣東省科技裝備動(dòng)員項(xiàng)目《軍用智能手機(jī)端到端保密通信系統(tǒng)》
杜奇才(1981-),男,山東省滕州市人,碩士研究生,講師,主研方向:偵察裝備技術(shù)、信息與通信技術(shù)。
2016-08-31