Rails 4 – 如何提供video?

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

<video id="video1" class="video-js" controls preload="auto" width="640" height="264" poster="{{pCtrl.video.poster}}" src=""> <source src="" type="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的开发工具时,我看到video(340Mb .mp4文件)的下载状态为206(部分内容),仅为2.8 Mb。

我认为这是VideoJS的一个问题,但后来我尝试直接访问,如“ http:// localhost:3000 / uploads / video / file / glrbfmso1449450792.mp4 ”

该video将播放几秒钟然后冻结,除非我刷新页面,否则它将无法播放。 我认为它只能播放2.8 Mb。 所以我认为它与WEBrick有关。

问题不在于video文件,因为它在VLC上正常播放,而且当我使用Glassfish(用Java编程)时。

那么我的问题是:我应该在Rails或WEBrick中配置一些东西吗? 我应该编辑哪些设置? 或者这是我经历的exception?

不要使用rails来提供video文件。 虽然像独角兽这样的服务器支持流媒体video文件,但有几个原因可能是个坏主意。 这里有很多不同的联系。 rails应用程序通常应该花费不超过200毫秒来返回响应。 当您的流式video时,连接保持打开的时间并不常见。

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

另一个原因是内存使用。 与nginx相比,rails服务器正在进行更复杂和更高级别的处理。 它具有智能,如连接数据库和处理会话。 这些东西不是免费提供的,并且会降低服务器的内存。 诸如nginx之类的前端服务器没有任何这种开销,并且可以以完全相同的方式提供video文件。

理想情况下,rails甚至不应该提供静态资产,例如JS和CSS。 您可以更好地配置前向Web服务器,以便直接对客户端执行此操作。 您将减少开销。 video是另外一个问题。 我建议看看为托管video而构建的外部托管服务。 亚马逊有S3,我相信还有其他一些。

对于WEBRick来说也是如此。 它是一个开发服务器,甚至没有编译的好处。 这是纯粹的ruby,所以它会比猛禽或美洲豹更糟糕。