新聞中心

        EEPW首頁 > 手機與無線通信 > 設計應用 > 基于Android的VoIP系統的設計與實現

        基于Android的VoIP系統的設計與實現

        作者: 時間:2011-04-21 來源:網絡 收藏


        2 的具體
        這里將一個完整的,包括協議棧的、JNI的編寫以及上層UI的實現等。
        2.1 SIP協議棧及UA
        SIP協議棧直接關系到整個的質量與效率,本文將采用純C語言開發的PJSIP庫。該庫采用C語言開發,且源碼開放,在兼容性與效率上有明顯優勢,不僅體積小(完整的SIP封裝也不過150 KB),同時還實現了一個內存池,使得安全系數與運行效率大為提高,該所采用的就是優化后的PJSIP庫。
        2.1.1 PJSIP協議棧
        PJSIP協議棧遵循標準的SIP協議,采用分層架構:SIP/SDP消息編碼解析層、傳輸管理層、SIP終端、事務層、會話層以及應用層等。由于SIP協議采用文本消息發送請求和響應,所以首先需要將SIP消息按照巴斯克范式(ABNF)編碼和解析,這就是SIP/SDP消息編碼解析層所完成的功能。傳輸管理層用來管理用戶代理與服務器之間的請求和相應;SIP終端是PJSIP中轉機制的實現,它主要負責管理各個SIP組建,例如像SIP終端實例注冊組件,分發消息到事務層、會話層及應用層,回傳處理結果,管理定時器、I/O隊列等;事務層通過狀態機機制管理SIP信令,每一次狀態機狀態的改變都將觸發回調函數;會話層負責會話的發起與響應,一般與應用層結合在一起,用于用戶交互,不同的平臺有不同的實現,本文使用Andriod的GUI來實現。
        PJSIP是一個高度封裝的庫,實際上它是通過PJSUA子庫來實現應用的。一個完整的PJSUA生命周期,首先需要初始化,通過函數init()來實現。在這個函數中,將創建代理、初始化變量和堆棧,以及創建一個UDP傳輸并在最后啟動代理;第二步將為UA添加用戶,如果需要的話,還要向服務器注冊用戶;當用戶添加成功后,此時可以建立一個呼叫連接,發起會話;當會話連接成功后,就可以使用SRTP協議實時傳輸加密后的數據,進行通話。最后的過程是掛起或銷毀呼叫。
        2.1.2 UA原理
        UA(User Agency)是協議棧的具體實現,PJSIP通過封裝了的PJSUA來實現,在這一點上,大部分的SIP庫都大同小異,在此將介紹UA的工作原理。
        一個典型的UA包含UAC(User Agency Client)和UAS(User Agency Server)兩部分。會話由UAC發起。當呼叫發起時,UAC將首先發送“IN-VITE”消息給SIP代理服務器,服務器收到“INVITE”消息后將返回一個應答“200 OK”,并回答“ACK”進行確認,同時通知主叫用戶(即會話發起用戶)上線通話。如果主叫端(用戶端)主動結束會話,UAC將返回“BYE”消息,同時通知服務器;如果用戶端收到服務器傳來的“BY-E”消息,回答“200”,并結束會話。
        服務器端,UAS收到UAC(用戶端)發來的“INVITE”消息,首先從消息中提取出主、被叫對象,然后檢查當前是否有空閑信道,若沒有則返回“486 BUSY HERE”(即系統忙)消息;接著將檢查被叫用戶是否在服務區,如果被叫對象不在服務范圍,則返回“404 NOT FOUND”(即用戶不在服務區);若被叫用戶成功上線,則返回“200 OK”,同時準備開始會話。
        SIP協議棧一般使用SIP統一資源定位符(URL)來標識,它根據URL來尋址,如集群用戶“200”,“300”分別對應SIP用戶為“200@192.168. 1.100”,“300@192.168.1.100”。本文中也使用這種方式來測試通信。
        2.2 JNI的實現
        PJSIP庫和Java類連接是通過JNI來實現的,這也是 NDK的實現機制,JNI是SUN公司推出的用于Java調用其他語言的接口。
        首先需要一個中間類,這個類中主要建立一些方法用于調用C/C++本地函數。它們的類型均為“publicstatic native int”,以便其他的Java類能夠調用。
        2.2.1 新建PJSIP類
        為各個待實現的類新建一個包,可以命名為“com.android.voip.pjsip”,在該包中添加該系統相關的一些類,主要有如下6個類:
        b.JPG
        這些類分別為上節中原理各個步驟的實現。這部分僅僅是為C庫的調用提供一個接口,因此具體的實現將放在本地C/C++程序中。

        本文引用地址:http://www.104case.com/article/156376.htm



        評論


        相關推薦

        技術專區

        關閉
        主站蜘蛛池模板: 德钦县| 台山市| 炉霍县| 荣昌县| 江源县| 新竹县| 郎溪县| 会同县| 平塘县| 祁东县| 威远县| 平武县| 如东县| 黔西| 略阳县| 凤冈县| 邳州市| 定日县| 新巴尔虎右旗| 宿迁市| 阳曲县| 内乡县| 娱乐| 松滋市| 彰化县| 准格尔旗| 双牌县| 大姚县| 灵武市| 巍山| 阳城县| 巴彦县| 阿巴嘎旗| 绥芬河市| 南川市| 尤溪县| 江阴市| 调兵山市| 育儿| 特克斯县| 彝良县|