色哟哟视频在线观看-色哟哟视频在线-色哟哟欧美15最新在线-色哟哟免费在线观看-国产l精品国产亚洲区在线观看-国产l精品国产亚洲区久久

您好,歡迎來電子發燒友網! ,新用戶?[免費注冊]

您的位置:電子發燒友網>電子百科>通信技術>數據通信>

基于Android的VoIP系統設計

2011年04月29日 11:39 現代電子技術 作者:賀丹丹,施 展 用戶評論(0

  本文提出一種基于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層。最后一層是驅動層,這部分一般是由手機廠商來實現的,本文將不做重點介紹。

  

?

  2 VoIP的具體實現

  這里將實現一個完整的VoIP系統,包括協議棧的實現、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來實現的,這也是Android NDK的實現機制,JNI是SUN公司推出的用于Java調用其他語言的接口。

  首先需要一個中間類,這個類中主要建立一些方法用于調用C/C++本地函數。它們的類型均為“publicstatic native int”,以便其他的Java類能夠調用。

  

非常好我支持^.^

(1) 100%

不好我反對

(0) 0%

( 發表人:Spring )

      發表評論

      用戶評論
      評價:好評中評差評

      發表評論,獲取積分! 請遵守相關規定!

      ?
      主站蜘蛛池模板: 国产成人精品免费视频下载| 999国产高清在线精品| 亚洲乱色视频在线观看| SM脚奴调教丨踩踏贱奴| 久久高清一本无码| 亚洲AV无码专区国产精品99| 成人永久免费视频| 男女生爽爽爽视频免费观看| 猪蜜蜜网站在线观看电视剧| 和美女啪啪啪动态图| 小SAO货水真多把你CAO烂| 成人区精品一区二区不卡AV免费| 免费观看a视频| 亚洲中文在线偷拍| 果冻传媒免费观看| 亚洲精品国产熟女久久久| 国产精品亚洲AV毛片一区二区三区 | 德国黄色录像| 日本红怡院亚洲红怡院最新| 99久久亚洲| 欧美日韩国产码在线| 99视频精品在线| 欧美国产一区二区三区激情无套| 2019午夜福利757视频第12集| 久久青青草原综合伊人| 影视先锋男人无码在线| 精品少妇爆AV无码专区| 亚洲一区成人| 久久精品电影院| 一扒二脱三插片在线观看| 国产亚洲精品久久久久久鸭绿欲| 欧美国产日韩久久久| 中国xxx视频| 国产精品自拍| 亚瑟天堂久久一区二区影院| 俄罗斯孩交精品| 男人扒开添女人屁股| 亚洲视频在线观看不卡| 精品久久久久亚洲| 午夜在线播放免费人成无| 国产精品久久久久影院嫩草|