【发布时间】:2020-02-19 22:15:08
【问题描述】:
例如,我想与WEBRtc 共享媒体陷阱。
显然,如果我想通过 NAT。
我需要使用STUN/TURN 服务器。
而当WEBRtc 开始分享ICE 候选者时——浏览器如何知道STUN/TURN 服务器存在并且应该先去那里?
谢谢。
【问题讨论】:
-
因为您在实例化 RTCConnection 时将 STUN/TURN 服务器列表提供给它......?!
例如,我想与WEBRtc 共享媒体陷阱。
显然,如果我想通过 NAT。
我需要使用STUN/TURN 服务器。
而当WEBRtc 开始分享ICE 候选者时——浏览器如何知道STUN/TURN 服务器存在并且应该先去那里?
谢谢。
【问题讨论】:
Browser中的WebRTC开始分析网络连接的状态(其实标准并没有说明什么时候做,而且对于很多浏览器来说,WebRTC在创建了相应的对象之后就立即开始研究网络,以免连接时造成不必要的延迟)。当开发人员在第一步中创建 WebRTC 对象时,他至少应该传递 STUN 服务器的地址。这是一个服务器,响应 UDP 数据包“我的 IP 是什么”,传输接收到该数据包的 IP 地址。 WebRTC 使用 STUN 服务器获取“外部”IP 地址,将其与“内部”IP 地址进行比较,看看是否有 NAT。如果是这样,NAT 使用哪些反向端口来路由 UDP 数据包?
浏览器上的 WebRTC 会不时调用onicecandidate 回调,将带有信息的 SIP 数据包传输给第二个连接参与者。此数据包包含有关内部和外部 IP 地址、连接尝试、NAT 使用的端口等信息。开发人员使用信令在浏览器之间传输这些数据包。传输的数据包使用addIceCandidate() 方法发送到WebRTC。
一段时间后,WebRTC 将建立点对点连接。或者如果 NAT 会干扰将无法。对于这种情况,开发者可以传输 TURN 服务器的地址,该地址将用作外部连接元素:两个浏览器都会通过它传输带有语音或视频的 UDP 数据包。
您在最初创建 RTCPeerConnection 时通过 STUN/TURN 服务器配置。
【讨论】: