基于Android的VoIP系統的設計與實現
摘要:為實現一個Android平臺的網絡電話,提出一個基于PJSIP堆棧的VoIP系統設計方案。該方案符合Android NDK開發規范,即上層使用Java語言開發,下層采用純C語言的PJSIP庫開發其協議棧,并使用JNI連接上下兩部分。在此敘述了PJSIP的原理,并以此為出發點,分析并設計了一個具體的VoIP系統。最后通過測試,該方案能很好地完成會話的發起、應答、通信,以及會話的注銷等功能,達到了設計要求。
關鍵詞:Android;網絡電話;PJSIP;JNI;NDK
0 引言
VoIP(Voice over Internet Protocol)即首先數字化語音信號并壓縮成幀,轉換為IP數據包在網絡上傳輸,以此完成語音通話的業務,是一種利用IP協議傳輸語音數據的、新興的通信技術。
隨著我國三網融合的推進,VoIP與IPTV(Interactive Personality TV)一起成為這一龐大工程的重要標志。而目前手機中,VoIP的解決方案并不是很多,特別是在Google公司推出的開源操作系統Android中。盡管該系統推出時間不長,憑借強大的功能、良好的界面、廣泛的商業支持,為用戶帶來很好的體驗,成為2010年最熱門且發展最快的手機操作系統。因此,兩者的結合,將是未來的發展趨勢。本文提出一種基于PJSIP協議棧的解決方案,通過Android本地開發工具(NDK),實現一個高效、穩定且功能強大的VoIP系統,具有較高的參考和實用價值。
1 VoIP設計方案
1.1 設計目標
本方案所設計的系統包含以下功能:首先,完成用戶終端(如手機)中語音數據的采集與編碼,并通過RTP(實時傳輸協議)/RTCP(RTP傳輸控制協議)進行傳輸和控制;其次,完成會話的控制,包括會話的注冊、發起、維護與結束、注銷等;再次,作為一個應用程序,必須實現一個良好的界面,與用戶交互;最后,作為一個開放系統,需具有良好的可擴展性。
1.2 總體設計
本方案基本上符合Android的NDK框架的開發規范,將系統分為4層,如圖1所示。最上層為應用層,該層將在Android SDK的框架內,采用Java語言來實現;第二層為JNI層,SIP協議棧有很多種實現,其中,采用C語言的SIP協議棧在效率、速度、系統占用方面有著超越其他庫(如Java協議棧)的優勢,因此,該方案將在第三層采用純C語言實現的PJSIP協議棧。為了讓Java應用層能調用協議棧層,在兩層之間需要一個銜接的橋梁,這就是JNI層。最后一層是驅動層,這部分一般是由手機廠商來實現的,本文將不做重點介紹。
評論