7

我有一个 WebRTC MCU ( kurento ) 在公共 IP 地址上运行,为一些只发送或只接收音频的客户端提供服务所以每个客户端都直接与具有公共 IP 地址的 MCU(而不是彼此)连接。

Q1:是否还需要使用 STUN 和 TURN 进行 NAT 穿越??如果是这样为什么?
Q2:浏览器中的 WebRTC 是否有任何 hack 可以消除 STUN 和 TURN 的需要?

在我看来:大多数客户端-服务器架构对 NAT 后面的客户端没有任何困难。与 webrtc 有什么区别?

4

2 回答 2

8

是的,对于 WebRTC,ICE 是绝对必须的。

Q1:是否还需要使用 STUN 和 TURN 进行 NAT 穿越??如果是这样为什么?

对于您的场景,您不需要使用 STUN 或 TURN。让我解释一下为什么。

私有网络中的每个客户端都处于某种具有公共 IP 地址的 NAT 之下。外界不知道该客户端的私有 IP 地址,即使他们知道在不知道该公共 IP 地址的情况下也无法与客户端连接。STUN 服务器用于收集此公共 IP 地址。

因此,如果您的服务器想要启动连接,那么它需要客户端发送其 NAT 的公共 IP。客户端将使用 STUN 服务器知道其公共 IP 并将其发送到服务器。但如果客户端发起连接,则无需知道 NAT 的公共 IP。客户端可以向公共服务器发送数据包以发起连接。服务器可以从客户端数据包中知道客户端的公共 IP,然后它们可以连接。所以不需要 STUN。

在这种情况下,您的服务器正在扮演 TURN 的角色。所以你不需要 TURN 服务器。

Q2:浏览器中的 WebRTC 是否有任何 hack 可以消除 STUN 和 TURN 的需要?

没有黑客。根据场景使用 TURN/STUN。对于您不需要的场景。如果您想建立客户端-客户端连接,那么您将需要 STUN 服务器。

于 2015-08-31T02:49:29.673 回答
2
  • ICE是强制性的
  • 但不使用任何眩晕和转动服务器。
  • 由于您要连接到公共端口上的服务器,因此您永远不需要使用 TURN 服务器,但根据您的客户端所使用的 NAT/防火墙类型,您可能需要 STUN 服务器
  • 您根本不需要修改浏览器。应用程序决定是否使用 stun 服务器。如果您在创建时将一个空的“iceservers”参数传递给您的 peerconnection 对象,则浏览器中的 ICE UA 将仅生成主机(本地)候选者。
于 2015-08-30T22:06:26.567 回答