2:pjsip教程(二)之ICE穿越打洞:Interactive Connectivity Establishment簡介
3:pjsip教程(三)之ICE stream transport的使用
本文原文連接: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_cb的on_tx_pkt來發送數據.
由於ICE Session本身沒有傳輸機制,所以應用程序必須把從底層接收到的所有數據包都通過pj_ice_sess_on_rx_pkt()方法傳遞給ICE Session,ICE Session判斷該包是否為STUN包,如果是,則處理;如果不是,則使用on_rx_data回調把數據包向上傳遞給應用上層.
轉載請注明:
名稱:中文翻譯:pjsip文檔(四)之ICE Session的使用方法
作者:大雪先生