13

分支出这个问题WebRTC - 我需要指定多少个 STUN/TURN 服务器?

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

4

1 回答 1

15

每个 Ice 候选者在收集时都会被赋予优先级。这是几件事的混合体,我相信每个平台(Chrome、FireFox 等)都有自己的偏好。

这是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 表示最高优先级,0 表示最低优先级。
当只有一个 IP 地址时,该值应该设置为 65535。更一般地说,如果对于具有相同类型的特定媒体流的特定组件有多个候选者,则本地首选项必须对每个候选者都是唯一的。在本
规范中,这只发生在多宿主主机上。如果一个主机是
多宿主的,因为它是双栈的,本地优先级应该
设置为等于 RFC
3484 [RFC3484] 中描述的 IP 地址的优先级值。

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

您可以看到转服务器 ip 和端口显示在中继候选中。以下内容来自 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
于 2014-10-15T14:08:28.543 回答