WebRTC Trickle ICE 策略

什么是Trickle ICE?

在实际使用的过程中,ICE技术存在一个问题,那就是呼叫建立连接很慢,这其中的原因是ICE协商的过程耗费了很多时间。客户端在发起呼叫时先会和STUN服务器通信,从STUN这里获取映射的候选者地址(srflx)和中继候选地址(relay),再加上本地候选者地址(host),构造三类ICE候选。

最后,再把这3类候选放入SDP的属性(a=*)中,完成这些后,才会把这个庞大的SDP一起包在Offer中发送出去。SDP中的Candidate如下图所示:

  • 音频通道一套(3个候选)

  • 视频通道一套(3个候选)

  • 数据通道一套(3个候选)

一端收集完所有 IceCandidate 后通过Offer发送出去,另一段也一样等收集完 IceCandidate 再通过Answer发送回来,这一来一回,耗时很久。待双方都得到对端的Candidate后,通过 setLocalDescription() 和 setRemoteDescription() 启动地址配对,又要耗时一下。

那么,有什么办法可以缩短这些耗时呢?

这就诞生了“Trickle Ice”策略,即一边协商SDP一边收集 IceCandidate,也就是在Offer与Answer协商的过程中,双方都提前开始收集本地的候选者地址,通过这样的并发思想,大幅缩短了等待时间。

此时,Offer与Answer不再携带 IceCandidate,而是通过信令 ICE_CANDIDATE 另行发送。

Trickle ICE

在Trickle ICE协商过程中,Viewer作为Offer发送者,Master作为Offer接收者。

对于Viewer,TrickleIce的策略是每收到一次onIceCandidate就先放入缓存,直到收到Answer后,再将已收到Candidate的一个一个地发出去,如果此时尚未全部收集完毕又得到Candidate,可以直接发出去。

对于Master,需要先判断对端Viewer是否支持TickleIce,如果支持,则每收到一次Candidate就发送一次,不会缓存。如果不支持,按nonTrickleIce策略走。

 

non Trickle ICE 

在non Trickle ICE协商过程中,Viewer作为Offer发送者,Master作为Offer接收者。

对于Viewer,策略是将收到的OnIceCandidate都先繁缛缓存,直到全部获取完毕后再通过Offer一起发出去。

对于Master,需要等待Candidate都获取完毕后再发送Answer。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

毕加索解锁

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值