视频通话需交换多少个ICE候选?是否要交换全部候选获取最优线路?
问题解答
1. 是否需要交换全部ICE候选
是的,必须交换全部生成的ICE候选才能协商出最优连接路由。
ICE生成的候选本身有固定优先级排序,优先级从高到低分别是:
- 主机候选:对应设备本地内网IP地址,同一局域网内设备用该候选通信延迟最低
- 服务器反射候选:对应设备经NAT映射后的公网IP地址,是跨网设备直连的首选
- 中继候选:对应TURN服务器的转发地址,仅在两端无法直连时使用,延迟最高且会消耗服务器带宽成本
如果仅交换单个候选,刚好传递的是低优先级候选的话,哪怕两端存在更高优先级的可用直连路径也无法被识别,自然拿不到最优路由。只有交换全部候选后,ICE框架才会自动对所有候选配对执行连通性检查,最终选择优先级最高的可用路径作为传输路由。
2. 给出的Dart代码操作是否正确
该操作是正确的。实际开发时只需要在本地RTCPeerConnection触发onIceCandidate回调时,将每一个生成的ICE候选通过信令通道发送给对端,对端收到候选后直接调用你给出的代码传入即可:
RTCPeerConnection _peerConnection; await _peerConnection.addCandidate(candidate);
候选存储、配对、连通性检查的全流程逻辑都由ICE框架内部自动处理,不需要额外开发。
内容的提问来源于stack exchange,提问作者Abhay Rawat
相关产品推荐
相关产品推荐

