中文翻譯:pjsip教程(三)之ICE stream transport的使用


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

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

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

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

本文原文地址:http://www.pjsip.org/pjnath/docs/html/group__PJNATH__ICE__STREAM__TRANSPORT.htm#ga6fb7cfdde71523f9fce885fd5cad982d

學習使用 ICE stream transport

下面的步驟描述了怎樣使用ICE session:

  • 首先初始化結構體: pj_ice_strans_cfg. 這個結構體中包含了ICE stream transport 的配置信息,其中就包括了SUTN以及TURN的配置信息.
  • 使用 pj_ice_strans_create()方法創建stream transport的實例. 該函數的成功調用還需要以下列出的重要的參數:
    • pj_ice_strans_cfg :主配置信息
    • components 的個數
    • 用於產生回調的結構體的實例:pj_ice_strans_cb .
  • 當調用函數pj_ice_strans_create()后,初始化的過程會在后台運行,該初始化過程主要是收集本地的候選地址,最后,當初始化完成,應用程序會在回調函數on_ice_complete 中返回
  • 當想要開啟一個媒體流時(例如,想進行視頻或語音電話),使用pj_ice_strans_init_ice()創建一個ICE session用於進行打洞.
  • 通常在兩個客戶端開始打洞之前,雙方都需要知道對方的ICE信息(ICE信息,包括用戶名,密碼以及3組候選地址),那么可以使用下面的方法得到自己的ICE信息:
    • pj_ice_strans_get_ufrag_pwd()
    • pj_ice_strans_enum_cands()
    • pj_ice_strans_get_def_cand()
      應用程序需要將以上信息封裝為SDP消息發送至對方.
  • 當應用程序收到遠程客戶端發來的ICE消息后,就可以開始ICE探測了。開始ICE探測需要調用pj_ice_strans_start_ice()方法.
  • 需要注意的是,PJNATH庫不支持直接處理SDP消息,SDP消息的封裝與拆解還需應用程序自己實現。
  • 一旦ICE的探測協商開始后,程序最終將會在回調函數on_ice_complete() 中返回。on_ice_complete() 屬於結構體: pj_ice_strans_cb.
  • 應用程序在程序運行的任何時刻都能發送或者接受數據,但是ICE的stream transport 對象它能否發送數據,取決於它發送數據時候的狀態。狀態分為三種:1,探測協商之前,這種狀態下可以發送數據,並且使用的是默認的地址;2,探測協商的過程中,此時不能發送數據;3,探測協商完成之后,這種狀態下也可以發送數據,且發送數據的地址為探測成功的地址對!
  • 應用程序使用pj_ice_strans_sendto()發送數據,並在pj_ice_strans_cbon_rx_data()回調中返回.
  • 當需要結束媒體Session時,使用pj_ice_strans_stop_ice()回收ICE Session。

關於ICE stream transport,在單次媒體交互完成后,可以選擇銷毀ICE stream transport或保留它以備后用。保留ICE stream transport有利有弊,好處是減少下次會話時創建它的時間;壞處是應用程序需要與STUN server以及relay server中相應的端口保活,這會無形中造成電量的損耗(consume power), 而電量損耗的高低是移動設備應用的重要參考標准之一。

轉載請注明:

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

  作者:大雪先生

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


免責聲明!

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



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