A STUN server is used to get an external network address.
TURN servers are used to relay traffic if direct (peer to peer) connection fails.
STUN 和/或 TURN 服务器的 URL(可选)由 WebRTC 应用程序在 iceServers 配置对象中指定,该对象是 RTCPeerConnection 构造函数的第一个参数。
使用更多服务器的示例:
var ICE_config= {
'iceServers': [
{
'url': 'stun:stun.l.google.com:19302'
},
{
'url': 'turn:192.158.29.39:3478?transport=udp',
'credential': 'JZEOEt2V3Qb0y27GRntt2u2PAYA=',
'username': '28224511:1379330808'
},
{
'url': 'turn:192.158.29.39:3478?transport=tcp',
'credential': 'JZEOEt2V3Qb0y27GRntt2u2PAYA=',
'username': '28224511:1379330808'
}
]
}
pc = new RTCPeerConnection(ICE_config);
一旦 RTCPeerConnection 获得了这些信息,ICE 魔法就会自动发生:RTCPeerConnection 使用 ICE 框架来计算对等点之间的最佳路径,并根据需要使用 STUN 和 TURN 服务器。
STUN:STUN 服务器存在于公共互联网上,并且有一个简单的任务:检查传入请求的 IP:端口地址(来自在 NAT 后面运行的应用程序)并将该地址作为响应发回。换句话说,应用程序使用 STUN 服务器从公共角度发现其 IP:port。此过程使 WebRTC 对等点能够为自己获取一个可公开访问的地址,然后通过信令机制将其传递给另一个对等点,以建立直接链接。(实际中不同的NAT工作方式不同,可能有多个NAT层,但原理还是一样的。)
TURN : TURN RTCPeerConnection 尝试在对等方之间通过 UDP 建立直接通信。如果失败,RTCPeerConnection 将求助于 TCP。如果失败,TURN 服务器可以用作后备,在端点之间中继数据。
重申一下:TURN 用于在对等点之间中继音频/视频/数据流,而不是信令数据!
TURN 服务器具有公共地址,因此即使对等点位于防火墙或代理之后,它们也可以被对等点联系。TURN 服务器有一个概念上简单的任务——中继流——但是,与 STUN 服务器不同,它们本质上会消耗大量带宽。换句话说,TURN 服务器需要更强大。
看到这个