杜奇才,鄧誠剛,劉 熒,林嘉宇
(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協議;智能手機;語音通信;即時消息
隨著移動通信技術和嵌入式系統的發展,基于智能終端的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進行了功能測試。測試結果表明,該系統能夠很好的完成會話的發起、應答、通信等功能,基本滿足了設計要求,具有一定的實用性。
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文件。內核驅動層一般由驅動程序的開發廠商實現,包含音頻驅動、網絡驅動等相關程序。
系統設計目標是在基于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()函數來實現信息接收,其參數不再贅述。
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網絡下三臺手機之間均可進行正常語音與即時消息通信,系統運行穩定,達到了預期設計目標。
利用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