摘 要: 為了實現(xiàn)基于Android手機平臺的音頻會話和圖像上傳,,設計了一個基于Android手機的多媒體應用軟件。首先介紹了Android端的多媒體發(fā)展趨勢,,然后介紹了如何設計并實現(xiàn)在手機端的VOIP以及利用FTP協(xié)議上傳圖像。測試結果表明,,用戶可以通過軟件客戶端與PC客戶端進行音頻會話,,并有良好的通話體驗,登錄FTP服務器可以查看到通過軟件上傳的圖像,。
關鍵詞: Android,;多媒體應用;VOIP,;FTP
0 引言
多媒體技術[1]是指包括對文字,、圖像、聲音以及視頻等媒體數據進行處理分析,、傳輸以及應用的技術,。市場上出現(xiàn)的多種多媒體應用不僅可以幫助人們進行日常溝通,還有多種功能,,包括了視頻監(jiān)控,、IP電話[2]以及即時消息等。Android[3]是一個開放自由的移動終端平臺,,以其開源,、免費等特點吸引了大量開發(fā)研究人員和廠商,并獲得了用戶的喜歡,,是目前市場上主流的移動設備,。隨著手機硬件性能的提高和移動數據網絡的發(fā)展,Android應用程序將擁有強大的多媒體數據處理能力,,手機上的多媒體應用將會成為手機用戶的焦點,,給人們帶來極大的便利性[4]。
1 多媒體系統(tǒng)框架設計
多媒體交互系統(tǒng)主要包括Android手機客戶端,、服務器端和PC平臺端,。Android手機客戶端需要實現(xiàn)音頻的收發(fā),發(fā)送端需要實現(xiàn)的功能包括音頻的采集,、編碼壓縮,、RTP打包封裝以及發(fā)送,而接收端需要實現(xiàn)接收RTP包并且通過解碼來播放音頻,。手機客戶端還需要向服務器發(fā)送SIP消息來邀請音頻通話,,并建立FTP連接來傳送圖片和錄像,。FTP服務器主要負責管理圖片和錄像;SIP消息作為整個系統(tǒng)的控制信令,,SIP服務器負責管理登錄以及轉發(fā)SIP消息,;媒體轉發(fā)服務器負責轉發(fā)手機客戶端和PC平臺端發(fā)送的音頻數據。多媒體系統(tǒng)的框架如圖1所示,。
2 客戶端軟件設計
客戶端功能主要包括語音通話模塊,、圖像和本地錄像上傳功能模塊。其中,,語音通話模塊實現(xiàn)邀請并建立語音通話實現(xiàn)實時通話,。圖像和本地錄像上傳功能模塊實現(xiàn)FTP連接并將圖像和本地錄像上傳到服務器上。
2.1 語音通話模塊的設計
主叫用戶需要進行語音聊天時,,需要向SIP服務器發(fā)送INVITE的SIP消息,,其中SIP消息的消息體為XML文本數據。XML消息體內容如下所示:
<xml version="1.0"encoding="UTF-8"?>
<speech>
<audio>G.711</audio><!--音頻編解碼協(xié)議-->
<kbps>8000</kbps><!--采樣率-->
<self>192.168.1.112 UDP 5200</self>
<!--地址與端口號-->
<from_number>1000</from_number>
<!--主叫號碼-->
<to_number>1001</to_number><!--被叫號碼-->
</speech>
此消息體中包含了會話媒體格式,、主叫用戶的號碼,、被叫用戶的號碼等信息。SIP服務器接收到消息后,,開始分配資源并且回復主叫用戶Tring消息,。接著服務器將添加了分配好的資源消息的邀請消息轉發(fā)給被叫用戶。被叫用戶收到邀請消息后,,如果同意進行語音通話,,則回復200 OK給SIP服務器。最后主叫用戶接收到SIP服務器轉發(fā)的200 OK消息,,此時雙方就可以進行音頻通話了,。若此時Android手機客戶端是主叫用戶,則跳入主叫音頻會話界面,;若為被叫用戶則跳轉到被叫音頻會話界面,。當通話中的任意一方想要結束通話時,可以選擇掛斷,,并向SIP服務器發(fā)送BYE SIP消息,。SIP服務器收到掛斷消息后,轉發(fā)給另一方后開始釋放資源,。被掛斷用戶收到掛斷消息后回復200 OK給服務器,,由服務器轉發(fā)此消息給主掛斷用戶。語音通話建立和結束的過程如圖2所示,。
在Android手機端上實現(xiàn)與平臺語音通話,,不僅包括發(fā)送端部分也包括接收端部分。發(fā)送端需要實現(xiàn)原始PCM音頻數據采集、音頻數據編碼和打包發(fā)送,。接收端需要實現(xiàn)音頻數據包的接收以及解碼和PCM音頻數據的播放,。音頻會話框架圖如圖3所示。
從Android手機硬件麥克風獲取原始的PCM音頻數據,,通過對其進行G711壓縮編碼,,使得減少發(fā)送到網絡上的碼率,調用jlibrtp庫用RTP格式數據包將壓縮后的G711數據打包發(fā)送到網絡上,。RTP數據包的接收是通過新建一個RTPRecieve類實現(xiàn)jlibrtp中的RTPAppIntf回調接口實現(xiàn)的,。接收的RTP數據包通過G711解碼還原成原始PCM數據流,此時經過解碼得到的PCM數據流并不直接拿去播放,,而是先放在緩存中,,再由播放線程來播放,數據接收解碼和數據播放置于兩個不同的線程中,,不僅可以提高網絡的容錯能力,,還可以增強系統(tǒng)的健壯性,。音頻會話流程圖如圖4所示,。
軟件中的音頻采集和播放分別是根據Android平臺下的AudioRecorder和AudioTrack集合框架類實現(xiàn)的。經過流程圖步驟,,基于Android的音頻通話的實現(xiàn)基本完成,。
2.2 圖像和本地錄像上傳模塊的設計
此模塊的主要功能是將Android手機拍照下來的圖像和錄像使用FTP協(xié)議上傳到服務器上。FTP會話主要包括獲取配置信息,、請求連接服務器,、登錄、數據上傳以及斷開連接釋放資源,,具體流程圖如圖5所示,。
在上傳文件之前,軟件客戶端需要向SIP服務器發(fā)送NOTIFY消息來獲取FTP信息,。NOTIFY消息的消息體內容如下,。
<?xml version="1.0"encoding="UTF-8"?>
<ftpinfo_query>
<!--此節(jié)點標識ftp信息獲取查詢-->
</ftpinfo_query>
SIP服務器接收到此NOTIFY消息后開始解析xml消息,當解析出ftpinfo_query節(jié)點后,,回復200OK和FTP連接信息,。200 OK的SIP消息體的內容如下。
<?xml version="1.0"encoding="UTF-8"?>
<ftpinfo_query_response>
<!--此節(jié)點標識ftp信息回應-->
<result>0 or 1</result>
<server_ip>ftp服務器ip</server_ip>
<!--FTP服務器的ip地址-->
<username>用戶名</username>
<pwd>密碼</pwd>
</ftpinfo_query_response>
當Android軟件客戶端接收到此SIP消息,,并解析出ftpinfo_query_response節(jié)點時,,將result值、server_ip,、用戶名以及密碼解析出來并存到自定義的FtpInfo中,。然后初始化FTP,并通過openConnect()函數來打開FTP服務,。在openConnect()函數中,,F(xiàn)TPClient為FTP連接,,通過構造函數傳進來的參數建立,首先通過ftpClient.connect()來連接服務器,,再通過ftpClient.login()登錄到服務器,。FTP服務打開之后,就可以對圖像文件或者錄像文件進行上傳操作,。首先生成需要上傳的文件:File file=new File(localpath),,參數localpath為本地文件的名稱,通過CreatFtpPath()函數生成遠程FTP服務器的對應路徑名稱,,最后通過ftp.uploading()函數上傳文件,,可通過返回值result來判斷上傳是否成功。在uploading()函數中,,首先如果遠程的服務器沒有上傳的目錄則需創(chuàng)建,,則需對當前FTP目錄初始化,并設置二進制文件上傳和設置流傳輸模式,,在改變FTP目錄后,,需要判斷本地文件為多個還是單個,如果是多個則調用上傳函數uploadingMany()來實現(xiàn)上傳,,若是單個則調用uploadingSingle()來實現(xiàn)上傳,。在uploadingMany()中反復調用uploadingSingle()來實現(xiàn)多個文件的上傳。在上傳函數中,,首先需要創(chuàng)建輸入流inputStream,,文件上傳完畢后關閉文件流。上傳結束后需要結束FTP服務來釋放對應的資源,。
3 效果演示
在實驗室WIFI條件下,,軟件客戶端在摩托羅拉XT910(Android 4.1.2)和HTC One V(Android 4.0.3)設備上測試通過,成功實現(xiàn)了音頻通話以及圖像的上傳,。如圖6所示,,其中圖6(a)為手機客戶端音頻被呼叫界面,圖6(b)為Android手機端語音通話界面,,圖6(c)為PC端音頻會話界面,,語音會話過程中通話流暢,延時較小,。圖6(d)為手機軟件端圖像上傳界面,,上傳成功后可以登錄FTP服務器看到上傳的圖像,如圖6(e)所示,。
4 結論
隨著Android智能手機的普遍使用和移動互聯(lián)網技術的迅速發(fā)展,,在Android手機上開發(fā)越來越廣泛。在Android手機上開發(fā)音頻通話,不僅有較好的通話體驗,,并且不會產生通信費用,,只是消耗一定的流量。通過Android手機拍照和錄像的便利性,,能夠存儲于手機中并且根據需求實現(xiàn)上傳圖像和錄像,。軟件客戶端能夠滿足人們對多媒體應用軟件的需求。
參考文獻
[1] 史元春,,徐光祐,,高原.中國多媒體技術研究:2011[J].中國圖象圖形學報,2012,,17(7):741-747.
[2] 賀丹丹,,施展.基于Android的VoIP系統(tǒng)的設計與實現(xiàn)[J].現(xiàn)代電子技術,2011,,34(6):28-31.
[3] BURNETTE E. Hello,, Android: introducing Google′s mobile development platform[M]. Pragmatic Bookshelf, 2009.
[4] 朱雷堅.基于Android的實時語音通信系統(tǒng)的設計與實現(xiàn)[D].杭州:浙江工業(yè)大學,,2013.