视频和音频流 - 仅服务器到客户端

ToT*_*oTa 3 html audio video webrtc

有没有一种方法可以使用服务器上安装的摄像头将网站上的视频和音频流式传输给客户端 - 例如,像 youtube 那样?

我已经开始阅读webrtc,但是如果我使用 webrtc,我应该创建一个 stun/turn 服务器和其他东西,对于单向流,我认为这是不必要的(这只是我对这些事情的理解..),因为我不从字面上看,不需要客户提供任何东西,既不需要他们的视频,也不需要音频。

那么有没有一种方法可以使用html5,仅在一个方向上流式传输来实现这一目标:

server (camera) -> clients

有什么关于这方面的事情吗,还是我应该坚持下去webrtc

elb*_*ita 5

我将解释这种情况的可能解决方案,可能还有其他解决方案,但我希望我的解决方案能让您大致了解如何做到这一点,并作为一个起点来探索更多有关 WebRTC 的惊人可能性。如果有不明白的地方,请告诉我。

因此,WebRTC 是一个免费、开放的项目,它通过简单的 API 为浏览器和移动应用程序提供实时通信 (RTC) 功能。太好了,那就是:WebRTC 拥有相当好的浏览器支持(但并非在所有浏览器中都支持,Safari 一个月前才在 Safari 11 中开始支持它)。但在本例中我们想在服务器端使用WebRTC。归根结底,我们仍然可以考虑点对点实时通信,其中我们的对等点之一就是服务器。

我不知道您是否熟悉 Node.js,但我建议您用它编写服务器应用程序(<3 Javascript!):

  • 有一些库封装了要在服务器端使用的 WebRTC 功能,例如node-webrtcnode-rtc-peer-connection

  • 但我建议您看一下electronics-werbrtc,因为其他人可能正在使用已弃用的方法或不完整。electro-webrtc 在后台运行一个无头 Electron 客户端来使用 Chromium 的内置 WebRTC 实现。因此,有了它,您应该能够访问服务器中的摄像头并创建一个流以提供给其他对等方(浏览器)。

以上所有内容都是与 WebRTC 相关的任务,在本例中:流视频对等(服务器)到对等(浏览器)。


现在,我们来谈谈信号处理、眩晕和转向。

  • 信令:现在想象一个有 2 个浏览器的点对点场景,它们希望建立直接连接并在彼此之间传输视频和音频。但他们彼此不认识,就像如果我不知道你的家庭住址,我就无法给你写信一样。因此他们需要一种服务来帮助他们相互了解,这样他们就可以拥有对方的IP。这应该由所谓的“信令服务器”来完成。如果您以某种方式知道其他对等 IP,则不需要信令服务器。

  • STUN/TURN:上面的方案在局域网中完美运行,其中每个对等点都有自己的 IP 地址,并且它们之间没有防火墙和路由器。但否则,您可以将对等点置于 NAT 或防火墙后面,然后您的信令服务器将无法使两个对等点发现自己。如果您的对等点位于 NAT 后面,则需要 STUN 服务器,如果您的对等点位于防火墙后面,则需要 TURN 服务器。这有点简化,但我只是想让您大致了解何时可能需要 STUN/TURN 服务器。

为了更好地理解信令、STUN 和 TURN,有一篇非常图文并茂的文章对它们进行了完美的解释。


现在,对于您的场景

  • 我认为你可能不需要 STUN/TURN 服务器,而且你也可能不需要实现信令过程,因为应该从服务器接收流的浏览器会知道该服务器地址,对吧?这样他们就可以与其建立 WebRTC 连接。
  • 编辑:您可能需要在服务器和客户端(浏览器)之间实现某种握手,因此这将是信令过程。这不是 WebRTC 的一部分,因此您需要自己实现它。正如我所说,这是两个对等方可以发现彼此的方式,但它们也交换本地媒体条件信息,例如编解码器、它们可以处理的分辨率等。对于您的情况,您的信令服务器可以托管在同一台服务器中你用来strea:你可以构建一个小的node.js应用程序,在那里运行并轻松管理所有信号处理过程,这没什么大不了的。我建议您阅读这篇文章,特别是“如何构建信令服务? ”部分。一般来说,该网站上的所有 WebRTC 文章都非常有帮助。

你能理解这个吗?我认为有了它,你可以开始更多地挖掘,看看这是否足够,或者你需要实现更多的东西。希望能帮助到你!