中文翻译:pjsip教程(三)之ICE stream transport的使用
2013-11-07 21:34
531 查看
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
首先初始化结构体: 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_cb的on_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), 而电量损耗的高低是移动设备应用的重要参考标准之一。
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_cb的on_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 Session的使用方法
- 中文翻译:pjsip教程(二)之ICE穿越打洞:Interactive Connectivity Establishment简介
- 中文翻译:pjsip教程(一)之PJNATH简介
- ubuntu amd 64bit 安装 QQ for linux教程(附 不能使用中文的解决办法)
- Perforce使用中文教程
- J2ME中文教程 4 MIDP低级UI的使用
- [翻译] Scott Mitchell 的ASP.NET 2.0数据操作教程之十:使用 GridView 和DetailView实现的主/从报表
- [原创]flexslider 中文文档 使用教程 参数手册
- Sniffer 中文使用教程(经典)
- gson使用教程-翻译5
- AFN文档中文翻译以及简单使用说明
- jquery jqPlot API 中文使用教程(非常强大的图表工具)
- jquery图表插件 中文使用教程
- SOAPUI中文教程---使用断言
- 【EntityFramework系列教程三,翻译】在ASP.NET MVC程序中使用EntityFramework对数据进行排序、过滤筛选以及实现分页
- CactiEZ V10.1 中文版 Cacti中文解决方案+使用教程(2)
- 【opencv 官方教程】翻译1 基本安装使用 编译工程 读取、显示、保存图片
- unity3d插件Daikon Forge GUI 中文教程-5-高级控件listbox和progress bar的使用
- jquery jqPlot API 中文使用教程