在某些场景下,我们希望手动切换网络,如WiFi切换到4G。网络的切换导致原本的传输链路中断,由于WebRTC采用基于ICE协议栈的P2P传输模式,传输链路的新建需要进行新一轮的ICE交互。
传统方式下,ICE交互的完成依赖于Offer/Answer机制,双方交换candidates以实现点对点连接。
ICE candidates需要双端配合完成。本端会将本地网卡地址、STUN服务观察到的本地真实地址、TURN服务为本地分配的Relay地址加入candidate列表,并创建相应SDP通过Offer/Answer流程进行交互。双端接收到彼此的candidates后会进行连通性检查,并为每个candidate添加优先级(local_candidate().priority()),最终采用优先级较高的candidate作为真实链接的IP地址。
上述方式双端只会在收集完成candidates后再进行连通性检查,由于收集candidates需要一定时间,使得ICE流程耗时较长,最终表现为WebRTC 建立P2P连接的过程十分缓慢。
为解决这一问题,RFC 8838提出了“Trickle ICE”,该方案将gather candidate与check connectivity两个步骤同时进行,大大降低了连接建立的耗