【问题标题】:Rails 4 - How to serve video?Rails 4 - 如何提供视频?
【发布时间】:2015-12-07 22:36:27
【问题描述】:

我正在为我的 Web 应用程序使用 Rails 4,并且我正在使用 VideoJS 来显示它,例如:

<video id="video1" class="video-js" controls preload="auto" width="640" height="264" poster="{{pCtrl.video.poster}}"  src="<%= @video.file %>">
        <source src="<%= @video.file %>" type="video/<%= @video.file.file.filename.last(3) %>">
</video>

我总是从 VideoJS 收到这个错误:

VIDEOJS: ERROR: (CODE:3 MEDIA_ERR_DECODE) The video playback was aborted due to a corruption problem or because the video used features your browser did not support.

当我打开 Chrome 的开发工具时,我看到下载的视频(340Mb .mp4 文件)状态为 206(部分内容)并且只有 2.8 Mb。

我以为是VideoJS的问题,后来又尝试直接访问,比如“http://localhost:3000/uploads/video/file/glrbfmso1449450792.mp4

视频会播放几秒钟,然后冻结,除非我刷新页面,否则它不会播放。我认为它只播放加载的 2.8 Mb。所以我认为这与WEBrick有关。

问题不在于视频文件,因为它在 VLC 和我使用 Glassfish(Java 编程)上正常播放。

那么,我的问题是:我应该在 Rails 或 WEBrick 中配置什么吗?有什么我应该编辑的设置吗?或者这是我正在经历的不寻常的事情?

【问题讨论】:

  • 您是通过应用程序流式传输此视频还是由网络服务器处理?
  • 什么意思?这就像一个YouTube。您加载一个带有“video”标签的 HTML 页面。我会更新我的问题
  • 视频在哪里托管?
  • 您可能不应该使用默认的 Rails 服务器(WEBrick?)来提供视频文件。在本地,安装薄之类的东西可能会有所帮助。在生产环境中,您将使用 nginx 或类似工具来提供静态资产。
  • 我能否建议将此问题改写为“从 Rails 应用程序提供视频的最佳方式是什么?”。您可能会获得更多流量。

标签: ruby-on-rails ruby-on-rails-4 video video-streaming html5-video


【解决方案1】:

不要使用 rails 来提供视频文件。尽管诸如独角兽之类的服务器支持流式视频文件,但有几个原因表明这是一个坏主意。这里有截然不同的联系。 Rails 应用程序通常需要不超过 200 毫秒才能返回响应。当您的流媒体视频时,连接保持打开更长时间的情况并不少见。

为什么这很重要?考虑一下设计用于运行 ruby​​ 代码并生成基于文本的输出的 rails web 服务器。为了尽快做到这一点,非常聪明的人在编写诸如 puma 和 raptor 之类的服务器时会做出许多决定。对于 raptor,我知道它们在运行时从不分配新对象,因为它太昂贵了。相反,它们维护一个用于处理传入请求的对象池。请求将被处理,然后池中的对象被释放。这对于短期请求来说很好,但如果池中只有 5 个对象怎么办?一旦有 5 个人在您的网站上观看视频,您的服务器将很快失去连接。当这种情况发生时,您的网站将连接到世界其他地方。有关 raptor 工作原理的更多详细信息,请参阅http://www.rubyraptor.org/how-we-made-raptor-up-to-4x-faster-than-unicorn-and-up-to-2x-faster-than-puma-torquebox/

另一个原因是内存使用。 Rails 服务器比 Nginx 执行更复杂和高级别的处理。它有一些智能,比如连接到数据库和处理会话。这些东西不是免费的,而且会消耗服务器上的内存。像 nginx 这样的前端服务器没有任何这种开销,并且可以以完全相同的方式提供视频文件。

理想情况下,rails 甚至不应该服务于静态资源,例如 JS 和 CSS。您最好配置您的前向 Web 服务器以直接对客户端执行此操作。您将拥有更少的开销。除此之外,视频是另一个问题。我建议查看为托管视频而构建的外部托管服务。 Amazon 有 S3,我相信还有其他一些。

同样的论点也适用于 WEBRick。它是一个开发服务器,甚至没有被编译的好处。它是纯红宝石,所以它会比猛禽或美洲狮更糟糕。

【讨论】:

  • 你能解释一下这是为什么吗?你提供的信息很有趣。是什么让 Rails 不是流式传输视频的好选择?另外,我会投票,但不接受答案,因为它并没有真正为我回答
  • 您好,感谢您的后续评论。我扩大了我的答案。请随意把它拆开,我会为你做更多的研究。
  • 感谢您的解释。我可以建议您也发布您的研究链接吗?在处理过 JSP 和 PHP 之后,我一直是 Rails 的忠实粉丝。这些东西很高兴知道,所以我可以根据应用程序选择更合适的语言/框架/服务器
  • 是的,没问题。我已将其添加到文章中。看看这个。读起来真的很棒。
  • @Stewart 我刚看了你的回答,我被冻住了我没想过用 Rails 服务资产可能是一个严肃的性能话题,在谈论 video 时甚至更重要资源。现在我正在考虑从 S3 提供文件,但我需要做些什么才能以正确的方式制作?在video html标签中设置src=s3_url够不够?
猜你喜欢
  • 2011-09-12
  • 2015-01-26
  • 1970-01-01
  • 1970-01-01
  • 2017-10-16
  • 1970-01-01
  • 2015-07-05
  • 2020-11-23
  • 2021-03-15
相关资源
最近更新 更多