摘 要: 為方便企業(yè)移動辦公,研究基于Android移動終端的視頻通信,構(gòu)建了實現(xiàn)視頻通信的系統(tǒng)結(jié)構(gòu),對SIP協(xié)議、H.264視頻編解碼、RTC/RTCP網(wǎng)絡(luò)傳輸?shù)汝P(guān)鍵技術(shù)進行研究,在Android平臺上進行了設(shè)計實現(xiàn)。結(jié)果顯示視頻通信效果良好,達到了預(yù)期目的,可作為進一步研究企業(yè)通信的參考。
關(guān)鍵詞: 視頻通信; Android系統(tǒng); SIP; RTC/RTCP
中圖分類號: TN926?34 文獻標(biāo)識碼: A 文章編號: 1004?373X(2014)01?0046?04
0 引 言
自2007年Android系統(tǒng)誕生以來,經(jīng)過短短幾年時間,Android已經(jīng)逐步占據(jù)了智能移動終端市場的大量份額,成為最廣為使用的移動操作系統(tǒng)。通信網(wǎng)絡(luò)近幾年的高速發(fā)展和WiFi無線網(wǎng)絡(luò)的廣泛應(yīng)用,使得移動終端可以隨時接入網(wǎng)絡(luò),享受互聯(lián)網(wǎng)帶來的豐富內(nèi)容。Windows和Linux平臺上的視頻通信功能已經(jīng)得到很好的實現(xiàn)和應(yīng)用,Android平臺可以通過接入WiFi網(wǎng)絡(luò)進行視頻通信,已經(jīng)開始成為熱門研究。尤其是在企業(yè)通信領(lǐng)域,企業(yè)一般構(gòu)建了自己的內(nèi)部通信環(huán)境,WiFi無線網(wǎng)絡(luò)隨時可用,軟交換平臺和IP電話為企業(yè)辦公帶來極大便利,基于移動終端的視頻通信成為新的趨勢[1]。
為方便企業(yè)移動辦公,本文基于Android系統(tǒng)平臺,對在企業(yè)WiFi網(wǎng)絡(luò)環(huán)境下實現(xiàn)實時視頻通信的關(guān)鍵技術(shù)進行了研究,并在此基礎(chǔ)上對Android平臺實時視頻通信進行設(shè)計實現(xiàn)。
1 視頻通信系統(tǒng)構(gòu)成
雖然目前移動數(shù)據(jù)網(wǎng)絡(luò)已經(jīng)可以支持一些設(shè)備進行多媒體通信,但是由于通信帶寬、通信費用、穩(wěn)定性等原因,應(yīng)用范圍十分有限。隨著IP網(wǎng)絡(luò)的普及,在企業(yè)內(nèi)部擁有了高帶寬高穩(wěn)定高速率的局域網(wǎng)絡(luò),設(shè)置WiFi熱點提供無線連接,部署應(yīng)用服務(wù)器,通過軟交換設(shè)備實現(xiàn)和PSTN網(wǎng)絡(luò)通信互連,除了解決上述問題之外,還有許多數(shù)據(jù)網(wǎng)絡(luò)不可比擬的優(yōu)點[2]。所以本文以企業(yè)IP網(wǎng)絡(luò)環(huán)境為背景,研究構(gòu)建Android視頻通信應(yīng)用系統(tǒng)。
1.1 系統(tǒng)結(jié)構(gòu)
基于Android的實時視頻通信系統(tǒng)網(wǎng)絡(luò)組成如圖1所示。
其中視頻通信軟件安裝在Android移動終端上,其通過WiFi無線網(wǎng)絡(luò)連接SIP服務(wù)器及與其他Android終端或裝有SIP通話軟件的PC終端進行通信。視頻通信的實現(xiàn)依賴于WiFi網(wǎng)絡(luò)、SIP服務(wù)器等外部條件[3]。移動終端用戶可以對系統(tǒng)個性化的配置,根據(jù)自己的需求和偏好選擇需要的功能;移動終端用戶向服務(wù)器發(fā)出請求并完成注冊;移動終端用戶對語音視頻數(shù)據(jù)進行采集和編碼,并通過RTP/RTCP(實時傳輸協(xié)議/傳輸控制協(xié)議)進行傳輸和控制,對端用戶進行解碼和播放;SIP服務(wù)器完成對會話的控制,包括會話的注冊、發(fā)起、維護與結(jié)束、注銷等功能。
圖1 視頻通信系統(tǒng)網(wǎng)絡(luò)結(jié)構(gòu)
1.2 視頻通信流程
實現(xiàn)視頻通信的基本流程如圖2所示。
圖2 視頻通信基本流程
在經(jīng)過SIP服務(wù)器對IP地址進行連接成功后,視頻通信的基本流程就變得相對簡單,如視頻采集直接調(diào)用Android移動終端攝像頭,再將采集到的圖像幀進行編碼、打包、發(fā)送等一系列的處理,到對端設(shè)備解碼播放就可以了。
2 關(guān)鍵技術(shù)
從圖1及圖2中就可以看出,要想在Android平臺上實現(xiàn)實時視頻通信,必須進行可靠連接、對視頻進行處理、傳輸?shù)龋湎鄬?yīng)的技術(shù)就是SIP協(xié)議、視頻編解碼、網(wǎng)絡(luò)傳輸?shù)取?/p>
2.1 SIP協(xié)議
SIP協(xié)議(Session Initiation Protocol,會話初始協(xié)議)是由IETF(互聯(lián)網(wǎng)工程任務(wù)組)于2001年提出的IP電話信令協(xié)議(RFC3261)[4],用于在IP數(shù)據(jù)網(wǎng)絡(luò)上發(fā)起、建立、結(jié)束多媒體會話。SIP能夠使用互聯(lián)網(wǎng)的端點(用戶代理)來發(fā)現(xiàn)參與者,并且協(xié)商它們共享會話的特性。SIP獨立運行于底層的通信協(xié)議之上,并且不依賴于所建立的會話類型。SIP協(xié)議處于網(wǎng)絡(luò)分層體系結(jié)構(gòu)的應(yīng)用層,與其他應(yīng)用層協(xié)議一樣,可以利用TCP或UDP來傳輸SIP消息。SIP會話使用四個主要組件:SIP用戶代理、SIP注冊服務(wù)器、SIP代理服務(wù)器和SIP重定向服務(wù)器。這些系統(tǒng)通過傳輸包括了SDP協(xié)議(用于定義消息的內(nèi)容和特點)的消息來完成SIP會話。
用SIP實現(xiàn)通信一般分為六個步驟:
(1) 注冊,發(fā)起和定位用戶;
(2) 進行媒體協(xié)商——通常采用SDP(Session Description Protocol,會話描述協(xié)議)方式來攜帶媒體參數(shù);
(3) 由被叫方來決定是否接納該呼叫;
(4) 呼叫媒體流建立并交互;
(5) 呼叫更改或處理;
(6) 呼叫終止。
目前已經(jīng)有很多的開源SIP協(xié)議??梢允褂茫鏜jsip,PJSIP,oSIP等。Android從2.3版本開始也加入了對SIP的支持[5]。
2.2 編解碼技術(shù)
Android支持的視頻格式有H.263、H.264、MPEG?4 SP等,其中對M4V_H263、AVC_H264等提供了編碼支持。
H.264編碼技術(shù)是繼MPEG?4之后的最新國際視頻編碼標(biāo)準(zhǔn),由ITU?T和ISO/IEC的開發(fā)組共同進行開發(fā)。H.264標(biāo)準(zhǔn)是一種高性能的視頻編解碼技術(shù),相比之前的標(biāo)準(zhǔn),具有更高的壓縮率、高質(zhì)量圖像、容錯功能,并有很強的網(wǎng)絡(luò)適應(yīng)性,更適合于移動終端進行傳輸[6]。
為便于適應(yīng)不同的網(wǎng)絡(luò)結(jié)構(gòu),H.264協(xié)議定義了兩個層,即視頻編碼層VCL(Video Coding Layer)與網(wǎng)絡(luò)提取層NAL(Network Abstraction Layer)[7]。VCL包含了VCL編解碼和VCL解碼器,VCL編解碼用來進行視頻數(shù)據(jù)的壓縮,VCL解碼器用來對視頻數(shù)據(jù)進行解碼;NAL主要為VCL提供了一個與網(wǎng)絡(luò)無關(guān)的統(tǒng)一接口,負責(zé)對視頻數(shù)據(jù)進行封裝,這使得封裝數(shù)據(jù)包在傳送過程中具有了很好的健壯性。
2.3 網(wǎng)絡(luò)傳輸技術(shù)
實時傳輸協(xié)議(RTP)通常運行在用戶數(shù)據(jù)包協(xié)議(UDP)層之上,其目的是提供時間信息和實現(xiàn)流同步。RTP一般與UDP一起配合來實現(xiàn)數(shù)據(jù)傳輸?shù)墓δ堋DP只是用來傳輸數(shù)據(jù)包,不能對數(shù)據(jù)包傳輸?shù)臅r間順序進行干預(yù)。RTP的數(shù)據(jù)用UDP分組進行承載。在對RTP數(shù)據(jù)包進行承載時,若一幀的數(shù)據(jù)量很大,將被分割成幾個具有相同時間標(biāo)簽的包進行傳輸,而UDP多路復(fù)用技術(shù)可以讓RTP包進行多點傳輸,方便進行多媒體多點會話。在RTP中規(guī)定使用5%的帶寬傳輸實時傳輸控制協(xié)議(RTCP),RTCP可以監(jiān)控數(shù)據(jù)傳輸,提供數(shù)據(jù)傳輸質(zhì)量的反饋信息[8]。RTP和RTCP配合使用,共同提供流量控制和擁塞控制服務(wù),不僅可以得到最小的網(wǎng)絡(luò)傳輸開銷,而且可以對傳輸情況實現(xiàn)有效地反饋。
經(jīng)過編碼的H.264視頻碼流分別被封裝上RTP包頭、UDP包頭和IP包頭,封裝之后的數(shù)據(jù)包通過無線網(wǎng)絡(luò)傳輸給接收顯示端。當(dāng)接收端收到數(shù)據(jù)包后將按照與封包順序相反的順序進行解包,把RTP包頭和視頻數(shù)據(jù)取出,然后根據(jù)RTP包頭的序列號進行排序,將視頻數(shù)據(jù)依次送到解碼器接口,解碼器完成對數(shù)據(jù)的解碼,最終進行播放顯示。
3 視頻通信的實現(xiàn)
使用Android終端的攝像頭作為視頻采集設(shè)備,在于SIP服務(wù)器進行成功通信建立連接之后,經(jīng)過編碼壓縮并進行RTP打包后進行傳輸,到達對端進行解碼播放。
3.1 獲取Android許可
SIP功能的實現(xiàn)通過JNI(Java本地編程接口)調(diào)用開源SIP協(xié)議棧PJSIP實現(xiàn),具體方法可見參考文獻[9]。
首先,在AndroidManifest.xml文件中,要做允許使用SIP、Camera和WiFi的聲明:
android:name=\"android.permission.USE_SIP\"/> 允許使用SIP android:name=\"android.permission.CONFIGURE_SIP\"/> 允許對SIP進行配置 android:name=\"android.permission.CAMERA\"/> 允許使用Camera android:name=\"android.permission.ACCESS_WIFI_STATE\"/> 允許使用WiFi 聲明之后才可以在Android上使用相關(guān)的功能。 3.2 視頻采集 視頻采集部分包括攝像頭開啟、初始化以及關(guān)閉,通過調(diào)用Android系統(tǒng)的Camera來實現(xiàn)。攝像頭的參數(shù)主要有以下兩種: (1) 幀率:攝像頭每秒圖像包含的幀數(shù)。 (2) 分辨率:采集圖像的分辨率。 實現(xiàn)視頻數(shù)據(jù)采集功能的主要代碼如下: mCamera = Camera.open(); //獲取設(shè)備的 Camera Camera.Parameters parameters=camera.getParameters() //獲取攝像頭參數(shù) parameters.setPreviewSize(currentCapability.width, currentCapability.height) //根據(jù)當(dāng)前視頻大小設(shè)置預(yù)覽窗口大小 camera.setParameters(parameters); //設(shè)置攝像頭服務(wù) 視頻采集實現(xiàn)過程如圖3所示。 3.3 視頻編碼與傳送 采集獲得的視頻數(shù)據(jù)送入編碼庫進行編碼。編碼庫提供的編碼參數(shù)主要包括:視頻寬度,視頻高度,幀率。為了提高編解碼效率,使用NDK生成一個可以在Android平臺上調(diào)用的動態(tài)庫.SO,繼而調(diào)用由C語言實現(xiàn)的H.264算法[10]。 圖3 視頻采集實現(xiàn)過程 為便于在網(wǎng)絡(luò)中傳輸,將對編碼結(jié)果分片[11]。因為最終得到的H.264視頻編碼信息為NAL(網(wǎng)絡(luò)提取層),往往是比網(wǎng)絡(luò)的MTU(網(wǎng)絡(luò)傳輸最大包大?。┐蠛芏嗟模虼?,發(fā)送視頻數(shù)據(jù)之前,應(yīng)該進行數(shù)據(jù)分片操作,將每個發(fā)送的包控制在MTU大小之下。之后就可以進行RTP傳輸。RTP傳輸?shù)倪^程如圖4所示。 圖4 RTP視頻傳輸過程 收到開始指令后,首先獲取經(jīng)過編碼的H.264視頻數(shù)據(jù),進行RTP打包,生成數(shù)據(jù)包頭。數(shù)據(jù)包頭中提供了時間戳、包序列號、視頻類型等信息,添加完數(shù)據(jù)包頭進行發(fā)送。發(fā)送時建立發(fā)送端與接收端之間的RTP會話,設(shè)置好端口,之后根據(jù)RTP協(xié)議,對數(shù)據(jù)進行分包傳輸[12]。 3.4 視頻通信測試 搭建測試環(huán)境,使用基于Windows系統(tǒng)以及Kubuntu/Linux系統(tǒng)的專業(yè)SIP服務(wù)器miniSipServer作為SIP服務(wù)器軟件,設(shè)置好分機號碼。在電腦端使用免費的軟電話X?Lite作為101賬號終端;在手機端使用102賬號。兩個終端在miniSipServer上注冊成功,如圖5所示。 視頻通信移動終端使用ZTE U985手機,Android系統(tǒng)為4.0,CPU頻率為1 536 MHz,內(nèi)存1 GB。視頻連接成功后,壓縮分辨率為CIF(352×288),幀率為14.99 f/s。視頻表現(xiàn)清晰、流暢。截取的X?Lite端視頻畫面如圖6所示。其中大屏為從手機端傳送過來的畫面,小屏為X?Lite端采集的視頻。 圖5 SIP注冊成功 圖6 視頻通信效果 4 結(jié) 語 通過對SIP協(xié)議、H.264視頻編解碼、RTC/RTCP網(wǎng)絡(luò)傳輸?shù)纫曨l通信相關(guān)技術(shù)的分析研究,成功地在Android平臺上實現(xiàn)了視頻通信,測試結(jié)果表明效果良好。隨著Android移動終端軟硬件配置越來越高,會實現(xiàn)更高質(zhì)量的視頻通信。通過企業(yè)通信網(wǎng)絡(luò)并借助于Android移動終端,企業(yè)只需以十分小的成本就可以改善通信條件,實現(xiàn)更加靈活方便的辦公。因而,基于Android的實時視頻通信值得進一步深入研究,在操作界面、與其他功能融合等方面做出改進。 參考文獻 [1] QADEER M A, SHAH K, GOEL U. Voice?video communication on mobile phones and PCs′ using asterisk EPBX [C]// 2012 International Conference on Communication Systems and Network Technologies. Rajkot, India: IEEE, 2012: 534?538. [2] 鄭理.基于WLAN技術(shù)的無線局域網(wǎng)的應(yīng)用[J].信息通信,2013(5):249?250. [3] 尹文剛,楊斌.Android平臺下基于WiFi的可視化VoIP通話系統(tǒng)設(shè)計[J].單片機與嵌入式系統(tǒng)應(yīng)用,2012(8):70?72. [4] The Internet Engineering Task Force. SIP: session initiation protocol [EB/OL]. [2013?08?27]. http://www.ietf.org/rfc/rfc3261.txt. [5] Google. Android 2.3 APIs [EB/OL]. [2013?08?27]. http://developer.android.com/intl/zh?cn/about/versions/android?2.3.html. [6] 楊光平.基于Android的移動流媒體實時傳輸系統(tǒng)設(shè)計與實現(xiàn)[D].西安:西安電子科技大學(xué),2012. [7] MASSANDY D T, MUNI I R. Secured video streaming development on smartphones with Android platform [C]// Proceedings of 2012 7th International Conference on Telecommunication Systems, Services, and Applications. Bali, Indonesia: IEEE, 2012: 339?344. [8] The Internet Engineering Task Force. RTP: a transport protocol for real?time applications [EB/OL]. [2013?08?27]. http://www.ietf.org/rfc/rfc3550.txt. [9] 賀丹丹,施展.基于Android的VoIP系統(tǒng)的設(shè)計與實現(xiàn)[J].現(xiàn)代電子技術(shù),2011,34(6):28?31. [10] 許建東,彭宏.Android平臺上H.264視頻前端模塊的研究[J].杭州電子科技大學(xué)學(xué)報,2012,32(5):93?95. [11] 張永芹,龔建榮.H_264視頻在Android手機端的解碼與播放[J].中國多媒體通信,2012(4):63?65. [12] 邵長彬,張重陽,鄭世寶.基于Android的可視IP電話多媒體終端設(shè)計與實現(xiàn)[J].電視技術(shù),2011,35(6):62?65.