【问题标题】:Is WebRTC without any server not even a signaling server possible?没有任何服务器的 WebRTC 甚至不可能是信令服务器吗?
【发布时间】:2018-01-18 17:15:11
【问题描述】:

我正在尝试为 iOS 设置一个 cordova 插件,该插件在不使用任何服务器的情况下实现 webrtc 功能,并且它只能在本地网络上使用。我知道有this plugin,看起来很有希望,但我有一些问题。 我的计划是不使用 TRUN、STUN 或任何类型的信令服务器。

也许你现在想:“好吧,这是不可能的。没有信号就等于没有连接。”但让我先解释一下。正如所指出的herehere 可以避免使用 TRUN、STUN 或 ICE 服务器。我认为这是开始我的项目的好方法,但仍有一个悬而未决的问题。如果没有任何类型的信号(在示例中它们使用 Node.js 服务器),设备将如何找到彼此?现在我正在玩包含所有必要信息的二维码的想法。

最后它应该是这样的(黑色的arrwos更重要):

这个想法是,每个进入房间的人都必须扫描 RP 上的二维码,然后设备知道 RP 的 IP、端口等,并建立与 DataChannel 的 WebRTC 连接。

我几天来一直在寻找答案,但由于 iOS 本身甚至不支持 WebRTC 的事实(或至少一个原因),没有多少 WebRTC 示例可用iOS 和本地网络都没有。

所以我的问题是:我是在正确的道路上还是这甚至不可能? (我在任何地方都没有找到这方面的例子,但如果我把我读过的所有帖子放在一起,我认为应该是可能的。)

【问题讨论】:

  • 如何解决发现并不重要,但要建立 WebRTC 连接,您需要以某种方式在对等方之间获取报价并回答消息。如果您等待 ICE 收集首先完成,这些消息会自动包含 ICE 候选者。见stackoverflow.com/a/29056385/918910

标签: javascript ios swift webrtc


【解决方案1】:

首先,TURN 和 STUN 不是信令服务器。信令服务器是通常与后端服务器相关联的术语,它可以让您在连接建立之前在两个对等方之间中继消息。信令服务器因此用于建立连接。建立连接后,信令服务器在通信中不再扮演任何角色,除非您打算对连接参数进行任何更改。

另一方面,TURN 和 STUN 服务器在连接建立过程中使用。它帮助两个对等点找到彼此的直接路径。因此,当连接建立后,对等点之间可以直接交谈,并且不再需要信令服务器来中继消息。

现在来回答你的问题,简短的回答是,不,你的计划不完整。

为了使其正常工作,您需要进行一些更改:

  1. 二维码不足以传达所有必需的信息。根据this answer,他们可以存储大约 4kb 的最大数据。因此,仅通过所有候选人是不够的。

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

    您可能想要探索 Wifi 等替代方案,以便在设备和 Raspberry Pi 之间实现双向数据共享。设置完成后,Wifi 连接将充当信令服务器。

    虽然我并不精通 iOS 或 Raspberry Pi。因此,如果您不确定要选择什么,我建议您单独询问有关选择沟通渠道的问题。请记住,您需要 Raspberry Pi 能够在短时间内与设备通信,以便建立 WebRTC 连接。

  2. 使用 STUN 和 TURN 服务器,您可能无需使用它们就可以逃脱。我见过一些情况,当我的应用程序能够在没有 STUN 和 TURN 服务器的情况下与本地网络中的对等点建立连接时。

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

    仅当两个对等点位于 NAT 之后时才需要 TURN 服务器。在这种情况下,STUN 服务器有时无法找到它们之间的直接路由,您需要 TURN 服务器来中继音频/视频/消息流。

  3. 您在 Raspberry Pi 和手机(黑色箭头)之间建立 WebRTC 通道的计划对我来说似乎很好。它将帮助您在需要时在两部手机之间建立进一步的连接。

    但是,如果您最终决定在 Raspberry Pi 上实现类似 Wifi 的功能,WebRTC 连接可能是多余的。毕竟,您可以使用 Wifi 来回传递数据,并且真的不需要额外的 WebRTC 通道层来做到这一点。

【讨论】:

  • 正如我提到的here,一旦 ICE 收集结束,offer 和 answer 将包含所有 ICE 候选人。当我尝试我在那里给出的示例时,我的报价是
  • @jib 我在过去看到过类似的例子,但关键问题是需要交换报价和​​答案。因此,即使压缩保证大小不会成为问题,您也必须让每个设备生成两个 QR 码,并在两个设备(Raspberry Pi 和电话)上一个接一个地扫描它们。是的,如果手机在同一个 wifi 上,可能会跳过 STUN 和 TURN。
  • 首先,感谢您的回答。手机和rp肯定会在同一个wifi上。是否可以将答案拆分为 2 个二维码?所以你必须先扫描第一个,然后再扫描第二个?
  • 一,如果他们可以通过Wifi相互通信,那么你不需要二维码。二、是否可以将答案分成2个二维码?可以。最终,offer 和 answers 是 JSON 对象。因此,您可以按顺序发送它们,然后将它们加入接收器,然后再将其提供给您的对等连接。
【解决方案2】:

由于您在本地网络上运行您的应用程序,因此您不需要 STUN 和 TURN 服务器。但是你仍然需要一个信令服务器。使用 QR 码无法发送信号,请阅读更多有关 WebRTC 的信息,您就会明白为什么。

但是信令服务器可以非常简单。由于您的本地网络中有该树莓派,您可以将其用作您的信令服务器。只需在其上安装 node、express 和 socket.io 即可。你只需要一个简单的 javascript 文件,我的只有 23 行代码。停止使用 QR 码浪费您的时间,您将立即启动并运行您的信令服务器。您可以查看Google Codelab 的示例。希望对你有帮助!!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-11-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多