WebRTC是否可以没有任何服务器,甚至没有信令服务器?

3
我正在尝试为iOS设置cordova插件,该插件实现webrtc功能而不使用任何服务器,并且仅在本地网络上使用。我知道有这个插件,看起来很有前途,但是我遇到了一些问题。我的计划是不使用TRUN、STUN或任何类型的信令服务器。
也许你现在认为:"好吧,这是不可能的。没有信令就没有连接。" 但是让我先解释一下。正如这里这里所指出的那样,可以避免使用TRUN、STUN或ICE服务器。我认为这是开始我的项目的好方法,但仍有一个未解决的问题。如果没有任何类型的信令(在示例中,他们使用Node.js服务器),设备如何找到彼此?现在我正在考虑使用包含所有必要信息的QR码的想法。
最终它应该看起来像这样(黑色箭头更重要):Plan for network 这个想法是每个进入房间的人都必须扫描RP上的QR码,然后设备就知道RP的IP、端口等,并建立一个带有DataChannel的WebRTC连接。
我已经寻找答案几天了,但由于WebRTC甚至不被iOS原生支持,因此没有太多适用于iOS的WebRTC示例,也没有适用于本地网络的示例。
所以我的问题是:我走在正确的路上吗?还是这根本不可能?(我没有在任何地方找到这个例子,但如果我把我读过的所有帖子放在一起,我认为这应该是可能的。)

1
无论你如何解决发现问题,但要建立WebRTC连接,你需要以某种方式获取对等方之间的offer和answer消息。如果您先等待ICE收集完成,这些消息将自动包含ICE候选项。请参见https://dev59.com/H14b5IYBdhLWcg3wfx5J#29056385。 - jib
2个回答

5
首先,TURN和STUN不是信令服务器。信令服务器通常是指在连接建立之前允许您在两个对等方之间中继消息的后端服务器。因此,信令服务器用于建立连接。一旦建立连接,信令服务器在通信中没有任何作用,除非您打算更改连接参数。
另一方面,TURN和STUN服务器在连接建立过程中使用。它可以帮助两个对等方找到彼此的直接路径。因此,当连接建立时,对等方可以直接相互通信,不需要再通过信令服务器中继消息。
现在回答你的问题,简短的答案是“不”,你的计划不完整。
以下是需要进行的一些更改以使其工作:
  1. 二维码无法传递所有所需信息。根据此答案,它们最多只能存储约4kb的数据。因此,它不足以传递所有候选者。

    更不用说WebRTC需要两个设备共享候选者。因此,您需要在树莓派上安装显示器和二维码扫描仪。

    您可能希望探索其他选择,例如Wifi,以允许设备和树莓派之间进行双向数据共享。一旦设置完成,Wifi连接将充当信令服务器。

    虽然我对iOS或树莓派不太熟悉。因此,如果您不确定要选择哪种通信渠道,我建议您提出单独的问题。请记住,您需要让树莓派能够在短时间内与设备通信,以便建立WebRTC连接。

  2. 至于STUN和TURN服务器,您可能可以不使用它们而得以运行。我曾经看到过几种情况,我的应用程序能够在本地网络中与同行建立连接而无需STUN和TURN服务器。

    但是,我强烈建议您至少使用一个STUN服务器。它们通常免费提供。Google和Firefox也提供自己的STUN服务器,您可以在WebRTC应用程序中使用它们。您可以在互联网上搜索以获取它们的详细信息。

    只有当两个同行都在NAT后面时才需要TURN服务器。在这种情况下,STUN服务器有时无法找到它们之间的直接路线,因此您需要TURN服务器来中继音频/视频/消息流。

  3. 我认为您计划在树莓派和手机之间建立WebRTC通道(黑色箭头)是正确的。它将帮助您在需要时建立两个电话之间的进一步连接。

    但是,如果您最终决定实现类似Wifi的东西,则WebRTC连接可能是多余的。毕竟,您可以使用Wifi来回传递数据,而不真正需要额外的WebRTC通道层来完成。


1
正如我在这里提到的那样,一旦ICE收集完成,offer和answer将包含所有ICE候选项。当我尝试给出的示例时,我的offer是<3.5k,所以它可能有效。它是文本,因此应该可以压缩得很好。如果手机在同一个WIFI上,您将不需要STUN或TURN。如果它们在蜂窝网络上,则可能需要。 - jib
@jib 我以前看过一个类似的例子,但一个关键问题是需要交换offer和answers。因此,即使压缩保证大小不会成为问题,你仍需要让每个设备生成两个QR码,并在树莓派和手机上依次扫描它们。如果手机在同一WIFI上,可以跳过STUN和TURN。 - Nisarg Shah
首先,感谢您的回答。手机和rp肯定会在同一个wifi上。是否可以将答案分成两个二维码?这样你就需要先扫描第一个,然后再扫描第二个了吗? - T. Jung
1
如果它们可以通过Wifi相互通信,那么你就不需要QR码了。是的,你可以将答案拆分成两个QR码。最终的提议和答案都是JSON对象。因此,您可以按顺序发送它们,然后在接收方组合它们,再将其传递给对等连接。 - Nisarg Shah

1

由于您在本地网络上运行应用程序,因此不需要STUN和TURN服务器。但仍然需要信令服务器。无法使用QR码进行信令,请阅读有关WebRTC的更多信息,您将了解原因。

但是,信令服务器可以非常简单。由于您在本地网络中拥有树莓派,因此可以将其用作信令服务器。只需在其上安装node、express和socket.io即可。您只需要一个简单的JavaScript文件,我的代码只有23行。停止浪费时间与QR码,您将很快拥有自己的信令服务器。您可以查看Google Codelab以获取示例。希望这可以帮助到您!


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接