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

最新文章

  1. WinForm窗体间传值
  2. tomcat监控脚本
  3. BZOJ3308 九月的咖啡店
  4. PHP二位数组/多维数组 根据某个键值排序
  5. android webview js交互 第一节 (java和js交互)
  6. TCP 连接的要点
  7. 解决Mac上Android开发时adb连接不到手机问题
  8. C# 开机启动代码
  9. PHP常用类型判断函数总结
  10. java提高篇(十四)-----关键字final
  11. MTK平台 Android4.0.3 定制关机动画
  12. Spring框架浅析
  13. 数字化IT人才与组织
  14. Windows下使用mklink命令参数介绍
  15. 如何用VSCode手动编译Ace Editor
  16. Android对接微信支付体验
  17. String类的知识点(不断更新)
  18. url中携带中文乱码问题
  19. 【js】某字符串多次替换
  20. windows服务安装记录

热门文章

  1. poj 2503 字符串hash
  2. Windows 8.1中怎么启用Framework3.5或2.0 ( 一安装就跳到下载 Win8.1自带了Framework)
  3. fopen/fclose
  4. 如何在 CentOS 7 上安装 Redis 服务器
  5. MongDB主从复制、复制集
  6. gcc 的visibility 使用
  7. C语言字节对齐 __align(),__attribute((aligned (n))),#pragma pack(n)
  8. c#判断输入textbox是否为数字
  9. Java JDBC批处理插入数据操作(转)
  10. android开发之定制ViewPager滑动事件