当前位置:  开发笔记 > 编程语言 > 正文

WebRTC - 我需要指定多少个STUN/TURN服务器?

如何解决《WebRTC-我需要指定多少个STUN/TURN服务器?》经验,为你挑选了2个好方法。

我遇到的麻烦NAT traversalWebRTC.视频流可以与某些人合作,但与在学生宿舍路由器后面的人不同.

我认为这应该通过使用TURN服务器来解决.我已经这样做了,它仍然无法工作,现在我想知道TURN服务器是否正常工作.因此,我想知道我是否可以或应该设置多个TURN服务器,如果是,如何.

我在另一个线程中找到了这个STUN/TURN服务器列表.现在我正在设置它们

var STUN = {
    'url': 'stun:stun.l.google.com:19302',
};

var TURN = {
    url: 'turn:homeo@turn.bistri.com:80',
    credential: 'homeo'
};

var iceServers = 
{
    iceServers: [STUN, TURN]
};

var pc = new RTCPeerConnection(iceServers);

所以我的问题基本上是:是否可以设置几个STUN/TURN服务器?如果可能,我应该这样做,那代码会是什么样的?



1> Muath..:
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(可选)由iceServers配置对象中的WebRTC应用程序指定,该对象是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:端口.此过程使WebRTC对等体能够为自己获取可公开访问的地址,然后通过信令机制将其传递给另一个对等体,以便建立直接链接.(实际上,不同的NAT以不同的方式工作,并且可能存在多个NAT层,但原理仍然相同.)

TURN:TURN RTCPeerConnection尝试通过UDP建立对等体之间的直接通信.如果失败,RTCPeerConnection将转向TCP.如果失败,TURN服务器可用作回退,在端点之间中继数据.

重申一下:TURN用于在对等体之间中继音频/视频/数据流,而不是信令数据!

TURN服务器具有公共地址,因此即使对等方位于防火墙或代理之后,也可以与对等方联系.TURN服务器具有概念上简单的任务 - 中继流 - 但与STUN服务器不同,它们本身消耗大量带宽.换句话说,TURN服务器需要更强大.

看到这个


@Muath没有直接回答spacecoyote的问题,我认为这是一个有效的问题 - 指定多个TURN服务器的优点是什么?WebRTC实现将如何确定使用哪个?

2> 小智..:

关于STUN,WebRTC将向所有人发送绑定请求,并将结果合并.(请注意,在旧版本的WebRTC代码中,似乎只使用了第一个STUN服务器)

我建议使用多个STUN服务器,因为平均会减少连接时间.确切的数量取决于STUN服务器的可靠性.一般2个就足够了.

关于TURN,问题更复杂,因为这些服务器将在无法进行P2P连接时中继您的流量.如果您有许多客户端,单个TURN服务器可能会达到其最大带宽.在这种情况下,设置多个TURN服务器将有所帮助.

怎么样?在连接检查阶段,WebRTC将选择具有最低往返时间的TURN继电器.因此,设置多个TURN服务器可使您的应用程序在带宽和用户数量方面进行扩展.

如果您没有开发大规模应用程序,那么1或2个TURN服务器通常就足够了.

您可以访问https://chromium.googlesource.com/external/webrtc/+/master浏览WebRTC代码

我建议查看内部:webrtc/p2p/client/basicportallocator.cc,webrtc/p2p/base/stunport.cc和webrtc/p2p/base/turnport.cc

推荐阅读
地之南_816
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有