中文翻译:pjsip文档(四)之ICE Session的使用方法
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的使用方法
作者:大雪先生
中文翻译:pjsip文档(四)之ICE Session的使用方法的更多相关文章
- 翻译qmake文档(四) Building Common Project Types
		
翻译qmake文档 目录 本章原英文文档:http://qt-project.org/doc/qt-5/qmake-common-projects.html 构建常见的项目类型 本章描述 ...
 - 翻译qmake文档 目录
		
利用空闲时间把qmke的文档翻译出来,翻译水平有限,有些地方翻译的不好,请谅解, 如果您能指出来,我会很感激并在第一时候做出修改. 翻译qmake文档(一) qmake指南和概述 翻译qmake文档( ...
 - (转载)中文Appium API 文档
		
该文档是Testerhome官方翻译的源地址:https://github.com/appium/appium/tree/master/docs/cn官方网站上的:http://appium.io/s ...
 - 中文Appium API 文档
		
该文档是Testerhome官方翻译的源地址:https://github.com/appium/appium/tree/master/docs/cn官方网站上的:http://appium.io/s ...
 - c#中操作word文档-四、对象模型
		
转自:http://blog.csdn.net/ruby97/article/details/7406806 Word对象模型 (.Net Perspective) 本文主要针对在Visual St ...
 - centos6编译安装zabbix3.0和中文支持整理文档
		
编者按: 最近公司部分业务迁移机房,为了更方便的监控管理主机资源,决定上线zabbix监控平台.运维人员使用2.4版本的进行部署,个人在业余时间尝鲜,使用zabbix3.0进行部署,整理文档如下,仅供 ...
 - 翻译qmake文档(三) Creating Project Files
		
翻译qmake文档 目录 原英文文档:http://qt-project.org/doc/qt-5/qmake-project-files.html 创建项目文件 项目文件包含qmake构建你 ...
 - 翻译qmake文档(二) Getting Started
		
翻译qmake文档 目录 原英文文档: http://qt-project.org/doc/qt-5/qmake-tutorial.html 本教程教讲授qmake基础知识.这个手册里 ...
 - 翻译qmake文档(一) qmake指南和概述
		
翻译qmake文档 目录 英文文档连接: http://qt-project.org/doc/qt-5/qmake-manual.html http://qt-project.org/doc/qt-5 ...
 
随机推荐
- HTML5 Canvas核心技术—图形、动画与游戏开发.pdf7
			
性能 运行putImageData()比drawImage()慢,同等条件下优先考虑drawImage() 操作图像数据需要遍历大量数据,应该注意几点: 1)避免在循环体中直接访问对象属性,应当保存在 ...
 - java的IO学习,字节流与字符流的编码讲解
			
字节流与字符流 字节流可以处理所有类型的数据(图片.视频等),在java中对应的类都为“stream”结尾 1字节=8位二进制=具体存储空间 字符流仅能处理纯文本的数据,在java中对应的类都是以 ...
 - eclipse安装Hadoop1.1.2版本开发插件
			
Hadoop1.1.2版本没有直接适合Eclipse的安装插件,需要手动打包jar文件. 我的系统配置: VMware Workstation10 CentOS-6.5-i386 hadoop-1.1 ...
 - Java学习之路(一) —— Java命名规范
			
Package 的命名 Package 的名字应该都是由一个小写单词组成. Class 的命名 Class 的名字必须由大写字母开头而其他字母都小写的单词组成 Class 变量的命名 变量的名字必须用 ...
 - 让IE6兼容position:fixed
			
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...
 - JDBC——Sql Server
			
sun公司设计一套java语言操作不同的数据库提供的是接口,二具体的实现类是由各大数据库厂商实现的. private static final String driver= "com.mic ...
 - 【转】[Android编程心得] Camera(OpenCV)自动对焦和触摸对焦的实现
			
参考http://stackoverflow.com/questions/18460647/android-setfocusarea-and-auto-focus http://blog.csdn.n ...
 - IE无法打开internet网站已终止操作的解决的方法
			
用IE内核浏览器的朋友,或许不经意间会碰到这样滴问题: 打开某个网页时,浏览器“嘣”跳出一个提示框“Internet Explorer无法打开Internet 站点...已终止操作”.而大多数情况下该 ...
 - PHP安全外延
			
接下来,我们讲一下:php语言与Apache等中间.MySQL等数据库结合使用时所产生的一些安全问题. 1.文件解析漏洞分析 2.编码注入漏洞分析 3.is_numeric漏洞分析
 - OC协议
			
概念:定义了一个接口,其他类负责来实现这些接口.如果你的类实现了一个协议的方法时,则说该类遵循此协议. 非正式协议:非正式协议虽名为协议,但实际上是挂于NSObject上的未实现分类(Unimplem ...