【问题标题】:How does WebRTC decide which TURN Servers to UseWebRTC 如何决定使用哪些 TURN 服务器
【发布时间】:2014-12-08 04:06:52
【问题描述】:

分支这个问题WebRTC - How many STUN/TURN servers do I need to specify?

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

【问题讨论】:

  • 它根据priority set during the ice gathering stage 组织每个人收集的 ICE 候选者,我相信这是特定于实现的(意味着 FF 和 Chrome 更喜欢不同的候选者类型)。
  • @BenjaminTrent 非常感谢,我没有偶然发现 RFC 中的优先级值。如果您愿意,请将其添加为答案,我会接受。

标签: javascript webrtc stun turn


【解决方案1】:

每个 Ice 候选者在被收集时都会被赋予优先级。它是多种事物的混合体,我相信每个平台(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 之间的整数,包括 0 到 65535。 它表示对特定 IP 地址的偏好
在代理是多宿主的情况下,获得了候选人。
65535 代表最高偏好,0 代表最低。
当只有一个 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

【讨论】:

  • Chrome (Blink) 似乎也通过距离/延迟来修改本地偏好。当使用多个回合服务器时,距离较近的服务器通常具有更高的优先级。
猜你喜欢
  • 1970-01-01
  • 2015-03-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-07-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多