对此问题进行分支WebRTC - How many STUN/TURN servers do I need to specify?
当提供多个TURN服务器时,WebRTC如何确定要使用哪些TURN服务器?
答案 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 82和webrtc 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