中文翻譯:pjsip文檔(四)之ICE Session的使用方法


 

  1:pjsip教程(一)之PJNATH簡介

  2:pjsip教程(二)之ICE穿越打洞:Interactive Connectivity Establishment簡介

  3:pjsip教程(三)之ICE stream transport的使用

  4:pjsip文檔(四)之ICE Session的使用方法

本文原文連接:http://www.pjsip.org/docs/latest/pjnath/docs/html/group__PJNATH__ICE__SESSION.htm

Detailed Description

這個模塊描述的pj_ice_sess對象是PJNATH庫的組成部分同時它是與數據包的傳輸無關的對象(a transport independent)。

ICE Session

ICE Session 是PJNATH庫中關於ICE的最底層的抽象,它使用一個單一的媒體流來執行兩端的連接檢測(雙方通過互發數據包進行協商,從而確定一條從A到B可以互通的路徑)。ICE Session 使用pj_ice_sess結構體來表示.

此處描繪的ICE Session它不做數據的傳輸(is independent from any transports),那么這也表明網絡的IO得是由應用程序本身或者由它更高的抽象層來執行。使用這個框架,應用程序就可以使用ICE Session來處理所有接收到的數據包,並且該框架也為ICE Session提供了向外發送數據的回調接口。

關於ICE更高級的抽象,請查看ICE stream transport進行了解.

Using The ICE Session

下面是ICE Session的詳細使用步驟,當然,開發者也可使用ICE stream transport的API,它對ICE進行了更高級的封裝,並且提供了ICE socket的集成。

ICE Session的使用步驟類似於報告/答復模式(offerer and answerer):

  • 使用pj_ice_sess_create()創建ICE Session,其中用戶需要指定一下幾個參數:
    • STUN 的配置:STUN的一些設置,比如超時時間以及STUN 中需要用到的timer heap、ioqueue實例.
    • Session名稱,可用於在日志中標識唯一的會話.
    • 初始化ICE的角色(pj_ice_sess_role).角色的設置可以在初始化完成之后通過pj_ice_sess_change_role()改變。ICE Session也可以在檢測到角色沖突之后自動更改。
    • 媒體會話中構件的數目.
    • 觸發ICE事件之后的回調函數的設置(pj_ice_sess_cb)
    • 本地ICE用戶名稱和密碼,不過不設置此項時,系統將會隨機生成.
  • 使用pj_ice_sess_cand結構體來表示候選者實例,使用pj_ice_sess_add_cand()為每一個構建添加本地地址候選. 每個構件初始化過程中必須至少有一個候選地址,並且所有的控件必須擁有相同的候選地址數,不然會導致配對過程的失敗。
  • 創建本地信息的實例(用於描述本地ICE候選者):ICE session沒有提供創建該實例的功能,但是應用程序應該實現該功能。如果應用程序使用ICE stream transport的時候,可以使用pj_ice_strans_enum_cands()方法來枚舉所有本地候選者。應用程序可使用pj_ice_sess_find_default_cand() 來讓ICE Session選擇使用在SDP c= and m= lines中的默認的傳輸地址.
  • 通過某一種信令(比方說SIP)將承載本地信息的實例發送至對端.
  • 當本地接收到對端的應答(包含了對端的候選者信息),應馬上解析該消息,建立關於對端的候選者列表,並且通過pj_ice_sess_create_check_list()來建立check lists,這個過程就稱為配對.
  • 配對完成后,就可以調用pj_ice_sess_start_check()開始執行連接測試,查看上步中哪個配對是有效的.
  • 最后,在連接測試完成后,應用程序會在pj_ice_sess_create()回調中收到測試結果.

使用pj_ice_sess_send_data()方法來發送數據。如果發送數據的時候是在ICE協商還沒完成時,那么ICE session 將直接丟棄該數據並且給調用者返回錯誤信息;如果是在ICE協商完成后,那么ICE session 將會調用pj_ice_sess_cbon_tx_pkt來發送數據.

由於ICE Session本身沒有傳輸機制,所以應用程序必須把從底層接收到的所有數據包都通過pj_ice_sess_on_rx_pkt()方法傳遞給ICE Session,ICE Session判斷該包是否為STUN包,如果是,則處理;如果不是,則使用on_rx_data回調把數據包向上傳遞給應用上層.

  轉載請注明:

  名稱:中文翻譯:pjsip文檔(四)之ICE Session的使用方法

  作者:大雪先生

  鏈接:http://www.cnblogs.com/ishang/p/3413271.html 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM