ICE 实现流程(1)

 

1 收集主机候选者.收集的过程和传输协议有关,这儿特指UDP.agent对于媒体流的每一个component遍历主机的网络接口获得一个候选者.比如基于RTP的媒体流的话,RTPcomponentID1,RTCP2.使用二者的agent,如果它主机有K个网络接口的话,那么它有2*K

候选者.


主机候选者的base是它自己.


2 服务器转向和中继候选,这些是可选的,至于去不去取它们的话,取决于ICE提供者的变动,一般来说是一份config文件.举个例子,在封闭的局域网中可能就不需要这些地址.以为使用中继的代价是很昂贵的,中继一般只使用于对称NAT的情况.

agent接下来将主候选者和配置好的STUN server 配对.目前这一份草案仅仅考虑到唯一一个STUN的情况.在这种特定的情况,Ta毫秒过后,agent选择另外一对这样子的配对,从主机候选者向STUN Server发送请求.如果agent使用转向和中继的地址.那么请求就是relay用法的STUN Allocate请求.如果agent only使用服务器转向候选者,这时候agent使用binding发现用法,发送一个STUN Binding请求.

Ta的值在ICE中推荐为20ms

这是第一个开始向外进行发送东西的STUN事物.重发规则以后再说.同样地,一个请求的重试取决于,可以恢复的错误比如说 authentication challenge,是在timer Ta过去以前发生,并立即返回的.由于每一个候选者都需要时间,这就涉及到时间预算的问题,所以有必要限制收集的候选者的个数.

agent将接受一个STUN binding或是 Allocate 响应.一次成功的Allocate响应的话,将要提供agent一个转向地址(mapped 地址 attr获得).如果Allocate遭到拒绝的话,那么意味着服务器缺少资源.agent可以改发Binding请求来获得服务器转向地址,如果中继候选者和主机候选者有重复,那么丢弃这个中继候选者.


3 清除冗余的候选者

如果候选者的传输地址和另一个候选者一样,而且他们的base也一样,这种情况,请清除它.


4 计算Foundation

这个取决于 type,base有不同的IP地址,或者用以获得他们的STUN服务器的IP地址不同.


5 保持候选者存活

一旦,服务器转向和中继地址被分配,他们的存活期必须是整个ICE的过程.


6 将候选者按优先级排序

推荐的公式:priority = (2^24)*(type preference) +

              (2^8)*(local preference) +               (2^0)*(256 - component ID)

可以看pjnathICE代码.

使用的就是这个.


7 选择typelocal preference的方针

首先中继候选者和VPN网络接口的主机候选者,他们由于传送和接受数据存在中间人,这就增加了延迟和包丢失的概率.所以出于这种观念,type preference,host=126,server=100,

110=peer,0=relayed.而且如果agent有多个网络接口,VPN=0.

另外要考虑的local preferenceIP类型,安全,拓扑.


8 选择默认候选者

默认候选者就是可以接收从没有ICE的一方发来的媒体数据.推荐是relay,否则reflexive,否则host.




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值