9

是否可以强制与 WebRTC 建立 TCP 隧道 (TLS) 连接?

我们正在为我们的业务开发 WebRTC 应用程序,但我们遇到了一些由内部网络引起的传入 UDP 流的主要问题。我们已经在使用 TURN 服务器,并且我们得到了一堆 ICE 候选者(甚至是中继 UDP 者)。

问题是,正如我上面所说,我们传入的 UDP 流量在这里工作不可靠(卡顿,非常糟糕的图像质量,非常低的 fps)。这足以给浏览器一个印象,WebRTC 可以将它用于它的 PeerConnection(s),但实际结果在 UDP 上非常糟糕。

如果我阻止所有传出和传入的 UDP 流,我可以看到(在 Wireshark 中)WebRTC 通过使用我们的转向服务器回退到 TCP 流量。

通过 TCP 连接,我们得到了非常好的结果(具有高帧率和非常好的图像质量)。

我已经尝试了几件事来强制 TCP:

  1. 我删除了 m=video 行中的 UDP 部分

    m=视频 TLS/RTP/SAVPF 100 116 117 96

  2. 我已经从我的候选人列表中排除了每一个 UDP 候选人

在每种情况下,我什至无法建立连接。

我能做些什么来强制 WebRTC 中的 TCP 还是我们真的完全依赖这里的浏览器?

4

2 回答 2

8

使用 TURN/TCP 服务器配置 peerconnection 并将 iceTransports 约束设置为中继。请参阅http://webrtc.github.io/samples/src/content/peerconnection/trickle-ice/ 请注意,质量通常比 UDP 差。

浏览器到浏览器的连接不支持 ICE-TCP。仅当您拥有 SFU/MCU/网关时。

于 2016-01-28T16:59:11.553 回答
6

由于不支持 ICE-TCP,因此您无法获得 TCP 中继候选,但对于 RFC-5766,客户端和 TURN 服务器之间的 TCP 控制连接有一个备用机制。这需要支持这种回退机制的 TCP TURN 服务器,根据这种机制,客户端将使用 TCP 传输协议与 TURN 服务器连接,并且作为分配请求的一部分,它将请求 UDP 候选者,因此通道类似于 TCP-UDP。因此,如果对等方做同样的事情并且您强制发生 Relay-Relay 连接,那么两个客户端都将使用 TCP 连接到 TURN 服务器。如果未配置 UDP 和 TCP TURN 服务器但配置了 TLS,则该回退机制也支持 TLS 连接。

于 2016-01-28T23:38:43.037 回答