视频和音频流-仅服务器向客户端传输

3
有没有一种方法可以在网站上使用服务器上安装的摄像头流式传输视频和音频,只针对客户端进行流式传输,例如Youtube所做的那样?我已经开始阅读webrtc,但是如果我使用webrtc,我应该创建一个stun/turn服务器和其他东西,但我认为对于单向流,这不是必要的(这只是我的理解..),因为我不需要从客户端获取任何东西,既不需要他们的视频,也不需要音频。那么有没有一种方法可以使用HTML5实现这一点,只在一个方向上进行流式传输:服务器(摄像头)- >客户端?是否有相关的内容可供参考,或者我应该坚持使用webrtc?
1个回答

5
我将解释一个可能的解决方案,还有其他的可能性,但我希望我的解法能给你提供大致思路,并为探索WebRTC的惊人可能性提供起点。如果有任何不理解的地方,请告诉我。
因此,WebRTC是一个免费、开放的项目,为浏览器和移动应用程序提供了通过简单API进行实时通信(RTC)的功能。很好,这意味着WebRTC在浏览器上有相当好的支持(尽管不是每个浏览器都支持,Safari仅在一个月前的Safari 11中开始支持)。但在这种情况下,我们想要在服务器端使用WebRTC。归根结底,我们仍然可以思考点对点的实时通信,在其中一个对等方是服务器的情况下。
我不知道你是否熟悉Node.js,但我建议你用它来编写你的服务器应用程序(<3 Javascript!):
  • 有一些库可以包装WebRTC功能以在服务器端使用,例如node-webrtcnode-rtc-peer-connection

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

以上所有内容都与WebRTC相关,在这种情况下:流视频对等方(服务器)到对等方(浏览器)。


现在,让我们谈一下信令过程、STUN和TURN。

  • 信令:想象一下,有两个浏览器之间的点对点场景,它们想要建立直接连接并在彼此之间流式传输视频和音频。但是他们互相不认识,就像如果我不知道你的家庭地址,我就无法给你发送信件。因此,他们需要一种帮助他们相互了解的服务,这样他们就可以获得对方的IP地址。这应该由所谓的“信令服务器”完成。如果你某种方式知道另一个点对点的IP地址,你就不需要信令服务器。

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

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

现在,针对您的情况

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

这对你有意义吗?我认为你可以开始深入挖掘,看看是否足够,或者需要实现更多的东西。希望它能帮到你!


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