在无法访问 Internet 的本地网络中使用 WebRTC 运行应用程序
Posted
技术标签:
【中文标题】在无法访问 Internet 的本地网络中使用 WebRTC 运行应用程序【英文标题】:Running an application with WebRTC within a local network that doesn't have internet access 【发布时间】:2020-09-14 01:56:09 【问题描述】:我希望在一个项目中使用 WebRTC,在该项目中,我需要通过本地网络将视频从一台计算机(带有 wifi 热点和 USB 摄像头的机器人)直播到另一台计算机(机器人的控制器)。在这种情况下,两台计算机都是单板计算机,视频流是单向的。我还希望两台计算机在两个方向上相互通信数据。我在研究中发现了 WebRTC,它似乎具有我正在寻找的这两种功能。
从演示 NodeJS 程序的初始测试来看,WebRTC 似乎几乎正是我所寻找的。不过,我一直试图克服的一个大问题是,默认情况下,它似乎需要在两个客户端之间使用在线信号服务器。我研究并发现可以使用第三台计算机在本地网络中创建信令服务器,但这样的设置不适合我的项目。
我研究了其他解决方案并遇到了OpenVidu,它实现了 WebRTC,但允许将信令服务器内置到其中一台客户端计算机中(至少这是我在另一台 stack overflow post 中读到的内容)。我还没有测试这个工具,看看它是否能解决我的问题,但我目前被项目使用的 docker 映像阻止,不支持我的单板计算机使用的 ARM 处理器,因此需要特殊安装。
在我完成这个可能有效也可能无效的过程之前,我想问一下是否有另一种更简单的解决方案来运行 WebRTC,无需互联网访问且不需要第三台计算机作为信令服务器,或者是否有其他工具的建议比 WebRTC 更适合我的应用程序。我对这项技术非常陌生,肯定会错过一个简单的或现有的解决方案。非常感谢您对此事的任何帮助。
对于那些好奇的人,正在使用的单板计算机是 NVidia Jetson Nanos。
【问题讨论】:
您不需要信号服务器,尽管它使事情变得更容易。您可以在 2 台设备中的任何一台上运行服务器 - 不需要第三台电脑。网络上有很多使用 NodeJS 创建信令服务器的示例。然后您可以使用 webrtc 连接来发送视频和数据。 您能否提供其中一个示例的链接? 【参考方案1】:找到了解决办法。使用Google Codelabs example,修复只涉及删除配置中的默认ice 服务器。本质上,它意味着改变
const config =
iceServers: [
urls: ["stun:stun.l.google.com:19302"]
]
到
const config =
iceServers: []
【讨论】:
【参考方案2】:你可以在你的局域网上运行本地 turnserver。这非常简单直接。 检查这个enter link description here
安装后运行
turnserver -p 19302
现在你的配置文件:
const config =
iceServers: [
urls: ["stun:<<YOUR HOST IP>>:19302"]
]
【讨论】:
感谢您的来信!我不知道有一个内置的服务器工具。在这篇文章发布几个月后,我发现自己需要一个本地轮流服务器,最后选择了coturn,它运行得很好。 局域网中不需要 TURN 服务器。 我使用修订版 72 .. 问题始于 Chrome 和 mDNS。我需要在 Google Chrome 中禁用 mDNS,这不再可行,所以我尝试了 turnserver,效果很好。 @jch 目前 python 的 aiortc 包存在一个问题,如果不指定任何 TURN/STUN 服务器,RTC 连接将无法工作。几个月前我遇到了这个,所以现在可能已经修补了。据我所知,这只是 python 的 WebRTC 库的一个问题,所以你对其他语言是正确的。 我在 c++ 中使用 webrtc,我不得不禁用 Chrome 功能,正如我所提到的。但是在 Chrome 更新后禁用此功能是不可能的,因此我使用了 turnserver。也许有一个修复或者我应该将 webrtc 升级到更新的版本。我不知道。我只是提一下我的经历:)以上是关于在无法访问 Internet 的本地网络中使用 WebRTC 运行应用程序的主要内容,如果未能解决你的问题,请参考以下文章