孤立局域网上的webRTC - 没有冰/眩晕/转服务器

bra*_*ter 23 webrtc

请帮忙!在隔离的LAN上,有没有什么方法可以简单地使用DHCP服务器分配的IP地址建立webRTC连接?我在学校里有一个孩子的教室,里面有针对学生无线上网的政策.我也有自己的网络应用程序,我可以在室内无线网络上托管,我想使用它,这样我就可以在我自己的浏览器中获得实时学生回复.一旦他们进入我的浏览器,我就可以将它们与localStorage一起缓存,并打开一个评估可能性的世界.

我知道我可以通过Node.js和Socket.io实现这一点 - 但我真的希望避免使用我有限的技能设置那种服务器.我是一名学习编程的科学老师,所以请随意"保持简单".谢谢!!

UPDATE

Alex,你是对的,如果所有的计算机都在同一个本地网络上,我可以避免使用STUN服务器.虽然我不得不咬紧牙关并在笔记本电脑上安装Node.js,但实际上并不复杂.然后我尝试了一大堆不起作用的"工作示例",直到我找到了这个和他的GitHub文件.

在Node中运行服务器脚本后,我在同一台计算机上的两个浏览器窗口之间有一个DataChannel连接,但在不同的计算机之间没有.我编辑.html文件指向我的本地服务器IP地址而不是' DataChannel'然后我可以连接多台计算机!然后是真正的测试 - 我可以在没有互联网连接的情况下使用它吗?我找到了使用Google的STUN服务器指定的行并将其更改为

var config = {"iceServers":[{"url":"stun:stun.l.google.com:19302"}]};

只是

var config = {"iceServers":[]};

有效.:-)

Dou*_*son 13

省略iceServers列表:

const pc = new RTCPeerConnection();
Run Code Online (Sandbox Code Playgroud)

要么iceServersRTCPeerConnection构造函数中省略该列表,要么使其成为空列表[]

来自RTCPeerConnection文档:

冰服务器 | 可选的

一组RTCIceServer对象,每个对象描述一个可能被 ICE 代理使用的服务器;这些通常是 STUN 和/或 TURN 服务器。如果没有指定,连接尝试将在没有可用的 STUN 或 TURN 服务器的情况下进行,这将连接限制为本地对等点。

webrtc/示例演示

的WebRTC项目有一个涓流冰样品,你可以用它来看看如何在变化iceServers的影响采集到的候选地址。您要查看的具体示例是。

  1. 按页面底部的“收集候选”按钮,使用默认设置运行它。这将返回一个地址列表,其中包括 NAT 公共端的地址。

    默认 ICE 服务器

  2. 现在从列表中删除所有 ICE 服务器并再次按收集候选,这次您应该只看到本地网络地址。

    没有 ICE 服务器

请注意,在我的网络上,2 个公共 IPv4 地址(以 98 开头)仅在我使用默认 ICE 服务器时出现。当我使用空的 ICE 服务器列表时,不再发现我的公共 IPv4 地址。另一方面,我的 IPv6 地址在两个测试中都相同,因为它们不受 NAT 的约束。

这是设置 iceServers 和 PeerConnection 的源代码链接

  • 浏览器通常不再提供默认的 ICE 服务器,因此不需要传递空的“[]”。我已经更新了 [MDN](https://developer.mozilla.org/en-US/docs/Web/API/RTCPeerConnection/RTCPeerConnection#RTCConfiguration_dictionary) 文章来反映这一点。抱歉造成任何混乱。Firefox 仍然有一个“about:config”首选项来启用默认的 ICE 服务器,这可能就是 MDN 所指的,但这是非标准的,可能不应该影响 MDN 和一般的 Web 编程建议。样本提供自己的服务器;它们不是“默认”的。 (2认同)
  • [getDefaultIceServers()](https://w3c.github.io/webrtc-pc/#dom-rtcpeerconnection-getdefaulticeservers) 由于缺乏实现而被标记为“存在风险的功能”。Firefox `media.peerconnection.default_iceservers` pref 的工作原理与您最初描述的一样,它只是非标准且很少使用,所以我不会担心 Web 开发人员对此的担心。特别是因为该功能不会成为通过 LAN 连接的障碍。 (2认同)

bra*_*ter 4

Alex,你是对的,如果所有计算机都在同一个本地网络上,我可以避免使用 STUN 服务器。虽然我不得不硬着头皮在我的笔记本电脑上安装 Node.js,但这确实并不复杂。然后我尝试了一大堆对我不起作用的“工作示例”,直到我找到了这个和他的 GitHub 文件。

在 Node 中运行服务器脚本后,我在同一台计算机上的两个浏览器窗口之间建立了 DataChannel 连接,但在不同计算机之间却没有。我编辑了 .html 文件以指向我的本地服务器 IP 地址而不是 localhost,然后我就可以连接多台计算机。然后是真正的测试 - 我可以在没有互联网连接的情况下使用它吗?我找到了指定使用 Google 的 STUN 服务器的行并将其更改为

var config = {"iceServers":[{"url":"stun:stun.l.google.com:19302"}]};

只是

var config = {"iceServers":[]};