是否可以使用ICE直接连接,然后在WebRTC中直接进行对等信令?

时间:2013-06-06 05:53:31

标签: javascript html5 rtp webrtc

我一直在考虑使用WebRTC以分散的方式设置RTCPeerConnection。这意味着仅使用服务器进行NAT遍历

我知道信令流程是必要的,但是可以直接与同行交换RTCSessionDescription个对象,而不必使用其他通信渠道吗?

2 个答案:

答案 0 :(得分:6)

假设您正在尝试将对等体A(IP地址1.2.3.4)与对等体B(IP地址5.6.7.8)连接。

   A                      B
1.2.3.4                5.6.7.8

你需要做的第一件事就是让至少其中一个知道IP:另一个对等体的PORT,以便他可以发起连接。

一旦A了解B的IP地址,A就可以联系B的IP:PORT端点。

一开始,它们之间没有通道,你以后会有它,但是现在,你只是不知道你想要发送数据的位置(IP:PORT?)

现在我们需要以某种方式获得A的IP:PORT并让B知道它。 WebRTC中没有定义标准,因此您可以选择将A的IP地址添加到B的任何方式。(Websocket,Google的Channel API,如果您足够疯狂,甚至可以发送电子邮件)。

  Some communication channel
      (i.e. Websocket)
        /           \
1.2.3.4:port         \
      /               \
     /                 >
   A                      B
1.2.3.4                5.6.7.8

现在,B知道关于A的端点,他可以发起呼叫,发送消息,创建数据通道(现在我们拥有它,太晚了吗?)

用另一个问题回答你的问题......你怎么知道在哪里发送A的IP:PORT? 一开始没有频道,所以我们需要其他一些其他类型的沟通。

不同的情况是,如果你已经以某种方式连接它们,使用某些DHT,如@tom在帖子中提到的那样(但这基本上也只是Websocket的替代品等)。

在评论中回答关于DHT的问题,在网络浏览器中构建P2P DHT的原因是如此复杂/不可能,直到现在我们没有可能在浏览器之间直接通信同行 - 这基本上是DataChannel API今天为我们提供的。

DHT的观点是,对等体之间存在交换/转发/保留信息(在本例中为RTCSessionDescription)之间的通信,我个人认为使用DataChannel是最好的方式(也许是今天唯一的一个)怎么做此

正如我在帖子中已经提到的,DHT只是另一种通信方式,如何将端点信息传输给其他对等方。您可以使用集中式服务器解决方案,但如果它不适合您的设计,您可以转而使用DHT。

答案 1 :(得分:1)

不,信令的重点是建立对等连接。每一方生成ICE候选(实质上是IP地址)并通过信令信道与另一方共享它们。然后,每一方都使用ICE候选者来尝试各种点对点连接(本地,STUN,TURN)。

也就是说,您可以使用DHT进行信号传输。见http://webp2p.org/