Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/63.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby-on-rails-4/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails Rails 4-如何提供视频服务?_Ruby On Rails_Ruby On Rails 4_Video_Video Streaming_Html5 Video - Fatal编程技术网

Ruby on rails Rails 4-如何提供视频服务?

Ruby on rails Rails 4-如何提供视频服务?,ruby-on-rails,ruby-on-rails-4,video,video-streaming,html5-video,Ruby On Rails,Ruby On Rails 4,Video,Video Streaming,Html5 Video,我将Rails 4用于我的web应用程序,并使用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="

我将Rails 4用于我的web应用程序,并使用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>
当我打开Chrome的开发工具时,我看到下载的视频(340Mb.mp4文件)状态为206(部分内容),只有2.8MB

我原以为VideoJS有问题,但后来我尝试直接访问,如“”

视频会播放几秒钟,然后冻结,除非我刷新页面,否则不会播放。我认为它只播放2.8MB的加载。所以我相信这和韦布里克有关

问题不在于视频文件,因为它通常在VLC上播放,当我使用Glassfish(Java编程)时也会播放


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

不要使用rails来提供视频文件。尽管unicorn等服务器支持流式视频文件,但这不是一个好主意的原因有几个。这里有着截然不同的联系。rails应用程序返回响应的时间一般不超过200毫秒。当您观看流媒体视频时,连接保持打开状态的时间更长并不罕见

这有什么关系?考虑一下Rails Web服务器的设计,可以运行Ruby代码并生成基于文本的输出。为了尽快做到这一点,非常聪明的人在编写puma和raptor等服务器时会做出许多决定。在raptor的例子中,我知道他们从不在运行时分配新对象,因为它太昂贵了。相反,它们维护一个对象池来处理传入的请求。请求将被传递,然后池中的对象将被释放。这对于短期请求很好,但是如果池中只有5个对象呢?一旦有5个人在你的网站上观看视频,你的服务器将很快失去连接。当这种情况发生时,你的网站就被转移到了世界其他地方。有关raptor如何工作的更多详细信息,请参阅

另一个原因是内存使用。rails服务器所做的处理要比nginx复杂得多,层次也更高。它具有连接数据库和处理会话等智能。这些东西不是免费提供的,而且会消耗服务器上的内存。像nginx这样的前端服务器没有任何这种开销,可以以完全相同的方式提供视频文件

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


同样的观点也适用于韦德里克。它是一个开发服务器,甚至没有被编译的好处。它是纯红宝石,所以比猛禽或美洲狮还要糟糕

您是通过应用程序传输此视频,还是由web服务器处理?您的意思是什么?就像youtube。加载带有“video”标记的HTML页面。我将更新我的问题视频托管在哪里?您可能不应该使用默认的rails服务器(WEBrick?)来提供视频文件。在本地,安装thin之类的东西可能会有所帮助。在生产中,您会使用nginx或类似的工具来服务静态资产。我建议您将这个问题改写为“从rails应用程序服务视频的最佳方式是什么?”。你可能会有更多的流量。你能解释一下为什么吗?你提供的信息很有趣。是什么让Rails不是流式视频的好选择?另外,我会投赞成票,但不接受答案,因为它并不真正适合我嘿,谢谢你的后续评论。我扩大了我的答案。请随意挑选,我会为你做更多的研究。谢谢你的解释。我可以建议你也发布你的研究链接吗?在处理JSP和PHP之后,我一直是Rails的忠实粉丝。了解这些内容非常好,因此我可以根据应用程序选择更合适的语言/框架/服务器。没有问题。我已将其添加到文章中。过来看。这真是一本很棒的书。@Stewart我刚刚读了你的答案,我被冻住了,我没有想到用rails服务资产会是一个严肃的性能主题,在谈论视频资源时更重要。现在我正在考虑从S3提供文件,但是我需要做什么才能以正确的方式实现呢?在视频html标签中设置
src=s3\u url
是否足够?
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.