WebRTC如何决定使用哪些TURN服务器

时间:2014-10-13 14:38:06

标签: javascript webrtc stun turn

对此问题进行分支WebRTC - How many STUN/TURN servers do I need to specify?

当提供多个TURN服务器时,WebRTC如何确定要使用哪些TURN服务器?

1 个答案:

答案 0 :(得分:6)

每个冰候选人在收集时都会获得优先权。它是两种东西的混合物,我相信每个平台(Chrome,FireFox等)都有自己的偏好。

这是一个link to the RFC,解释了如何生成优先级。由于候选ID应该是唯一的(如果遵循RFC),每个优先级都保证是唯一的。所以,你永远不应该优先考虑。首先尝试具有较高优先级的那些,如果不能与它们建立连接,则使用下一个在线。

引用RFC关于优先级:

  

使用公式时,代理通过确定来计算优先级   对每种候选人的偏好(服务器反身,同伴)   反身,中继和主持人),当代理人是多宿主时,   选择其IP地址的首选项。这两个偏好
  然后组合以计算候选人的优先级。这
  优先级使用以下公式计算:

    priority = (2^24)*(type preference) +
               (2^8)*(local preference) +
               (2^0)*(256 - component ID)
  

类型首选项必须是0到126之间的整数,并且   表示对候选人类型的偏好(其中)   类型是本地的,服务器反身的,对等的反身的和中继的)。一个
  126是最高优先级,0是最低优先级。设置
  值为0意味着此类候选人将仅用作
  万不得已。所有的类型偏好必须相同   相同类型的候选人必须与候选人不同   不同种类。同伴反身候选人的类型偏好   必须高于服务器反身候选人。请注意   根据第4.1.1节的程序收集的候选人将   从来不是同行反身的候选人;这些类型的候选人是
  从ICE进行的连通性检查中了解到。

     

本地首选项必须是0到65535之间的整数。   它表示对特定IP地址的偏好   如果代理人是多人的,则获得候选人   65535代表最高优先级,零代表最低优先级   当只有一个IP地址时,该值应该设置为      65535.更一般地说,如果特定媒体流的特定组件有多个候选者具有相同的候选者   类型,本地首选项必须是唯一的。在这个中   规范,这仅适用于多宿主主机。如果主持人是   多宿主,因为它是双栈,本地首选项应该是
  设置等于RFC中描述的IP地址的优先级值   3484 [RFC3484]。

     

组件ID是候选者的组件ID,必须是   介于1和256之间。

您可以看到转弯服务器的IP和端口显示在中继候选中。以下内容源自the RFC page 82webrtc hacks

a=candidate:2157334355<ID> 2<Component> udp<NetType> 33562367<Prioirty> 180.6.6.6<NAT pub IP> 54278<NAT pub Port> typ relay<Means it needs to be relayed through Turn> raddr 46.2.2.2<Relay address of turn> rport 38135<relay port of turn> generation 0