我正在使用Rails 4作为我的Web应用程序,我正在使用VideoJS来显示它,例如:
我总是从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中配置一些东西吗?我应该编辑哪些设置?或者这是我经历的异常?
不要使用rails来提供视频文件.虽然像独角兽这样的服务器支持流媒体视频文件,但有几个原因可能是个坏主意.这里有很多不同的联系.rails应用程序通常应该花费不超过200毫秒来返回响应.当您的流式视频时,连接保持打开的时间不会太长.
为什么这么重要?考虑一下rails web服务器设计用于运行ruby代码并生成基于文本的输出.为了尽快做到这一点,非常聪明的人在编写诸如puma和raptor等服务器时会做出一些决定.在猛禽的情况下,我知道他们从不在运行时分配新对象,因为它太昂贵了.相反,它们维护一个对象池来处理传入的请求.请求将被移交,然后池中的对象被释放.这对于短期请求很好,但是如果你的池中只有5个对象呢?只要有5个人在您的网站上观看视频,您的服务器就会很快耗尽连接.在发生这种情况时,您的网站将覆盖世界其他地区.有关猛禽如何工作的详细信息,请参阅http://www.rubyraptor.org/how-we-made-raptor-up-to-4x-faster-than-unicorn-and-up-to-2x-faster-than-彪马torquebox /
另一个原因是内存使用.与nginx相比,rails服务器正在进行更复杂和更高级别的处理.它具有智能,如连接数据库和处理会话.这些东西不是免费的,并且会在您的服务器上花费内存.诸如nginx之类的前端服务器没有任何这种开销,并且可以以完全相同的方式提供视频文件.
理想情况下,rails甚至不应该提供静态资产,例如JS和CSS.您可以更好地配置前向Web服务器,以直接对客户端执行此操作.您将减少开销.视频是另外一个问题.我建议看看为托管视频而构建的外部托管服务.亚马逊有S3,我相信还有其他一些.
对于WEBRick来说也是如此.它是一个开发服务器甚至没有编译的好处.这是纯粹的红宝石,所以它会比猛禽或美洲豹更糟糕.