Laravel项目+媒体服务器,用于部署在Docker

时间:2017-07-19 23:11:27

标签: laravel amazon-web-services docker video video-streaming

经过数小时的研究,没有任何相关内容,我决定问。

我对视频流的概念很陌生,所以如果我的问题看起来很简单,请原谅我。

我正在构建一个需要包含媒体流功能的项目。它应该有以下选项:

  1. VOD - 用户将文件上传到服务器,需要将其转码为少数不同分辨率的MP4文件。对于转码我正在尝试使用部署为Docker镜像的CloudTranscode(https://github.com/bfansports/CloudTranscode)的方法。服务器应该向播放器提供具有特定缓冲区大小的流,因此当播放暂停时,我们缓冲例如+5秒就可以了。自适应比特率会很好,但是我不确定它如何与不同的玩家一起工作(我考虑使用Video.JS,因为高定制选项,加上它是免费的)。
  2. 实时视频捕获 - 用户访问从网络摄像头捕获视频的特定页面,并将该流发送到服务器,以便进一步向客户端分发流。对于大多数浏览器而言,WebRTC可能是一个不错的选择,但iOS设备可能无法使用它,所以任何建议都会非常感激
  3. 实时视频流 - 用户访问某个页面,在那里他们可以观看从第2点中提到的用户捕获的流。此处可以由一个或多个用户观看流(也可以是1或10,000个用户)
  4. 切入追逐我的问题如下:

    1. 我可以用于此目的的最佳媒体服务器软件,考虑到高可扩展性(在AWS EC2上部署为Docker容器),以及可能的大量流媒体和观看负载用户,以及多设备/平台/浏览器支持?
    2. 什么是最好的网页媒体播放器(再次)将是跨浏览器/平台/设备,记住与媒体服务器本身的良好集成,以实现自适应分辨率流?如果播放器在外观方面具有广泛的自定义选项(例如悬停时间线时缩略图显示),那也不错。
    3. 您是否知道任何更好的视频转码解决方案,而不是提到的CloudTranscode ,考虑到Docker设置,以及一些易于使用的API(这里有一些即时转码会很好,所以工人不需要等待整个文件上传吗?
    4. 如果我在EC2实例上使用自动调节功能会发生什么情况,并且会自动启动更多媒体服务器实例?我们假设我们有实例1(I1)和实例2( I2)。一些用户开始在I1上进行广播,并且1000个用户正在观看流,这是服务器实例的限制,因为它耗尽了资源。接下来,另外几个用户正在尝试查看流,因此他们通过AWS负载均衡器连接到I2 - 这对于实时流如何工作?对不起,但我是这个概念的新手,所以再次 - 请原谅我的基本问题。
    5. 到目前为止,我们找到了一些可能与我的需求相关的媒体服务器,包括:

      • Wowza Media Server(付费)
      • Red5媒体服务器(免费)
      • Kurento媒体服务器(免费)

      我的应用程序是用 Laravel 编写的,我需要与媒体服务器进行一些 PHP 集成。

      显然,免费解决方案是最受欢迎的,但是只要付费解决方案满足我的需求,我就不介意付费。

      这里的任何输入都会有很多相关内容 - 甚至是部分解决方案/建议。我有点被困在这里,所以任何可以让我更接近解决方案的建议都非常受欢迎!

      祝你好运

1 个答案:

答案 0 :(得分:0)

如果有人需要此类信息,我最终会使用 Nginx Plus 媒体服务器功能。它能够为实时和VOD流提供服务,它具有开箱即用的负载均衡器,可以在多个容器实例上切换流量,还有许多强大的功能。此外,他们还有直接从AWS Marketplace部署的映像,并且在EC2实例运行时每小时支付一次许可。当然还有免费版本,但我对Nginx Plus的支持非常满意。

使用JS中的 getUserMedia()来捕获用户的实时流。仍有轻微的故障,但我会让它工作(问题与MediaRecorder API吐出的WebM块相关,但我几乎完成了使用一些Python代码修改服务器端的每个块)。

如果有人需要帮助,我将乐意为您提供帮助。