ruby-on-rails – Rails X-Sendfile将大型视频提供给Ipad
我有一个应用程序服务大(几百MB)视频文件,它在桌面浏览器上运行正常,在Apache上使用Rails X-Sendfile.
一个重要的要求是,这些视频必须是私有的,只有登录的用户可见,所以这就是为什么我使用Rails来服务它们. 一切都与其他设备完美配合.我以这种方式提供影片: response.headers["X-Sendfile"]= filename send_file filename,:disposition => :inline,:stream => true,:x_sendfile => true 但是Ipad的请求需要字节范围头.一个解决方案(不能正常工作)就是这样的: size = File.size(filename) bytes = Rack::Utils.byte_ranges(request.headers,size)[0] offset = bytes.begin length = bytes.end - bytes.begin response.header["Accept-Ranges"]= "bytes" response.header["Content-Range"] = "bytes #{bytes.begin}-#{bytes.end}/#{size}" send_data IO.binread(filename,length,offset),:type => "video/mp4",:disposition => 'inline',:file_name => filename 有了这个解决方案,我遇到了超过50万个视频的问题,更重要的是,我承担起不应该拥有的责任.应该是通过x-sendfile模块处理流的重负载的apache.但我不知道如何. send_data方法没有x-sendfile参数,涉及send_file方法的解决方案不起作用. 我发现这两个类似于我的问题,但是他们没有工作:rails media file stream accept byte range request through send_data or send_file method,What is the proper way to serve mp4 files through rails to an Ipad? 任何关于发生什么的线索?自从几个星期以来我一直在努力,我需要让它工作.欢迎其他可行的解决方案. 解决方法
这可能是完全不相关的,因为我正在使用nginx作为服务器,但是如果它不适用于ios,请查看
this blog post.对于Apache可能有类似的解决方案.
在某种意义上,我不得不添加一个内部重定向到文件夹路径的代理头.苹果有可能看起来很愚蠢,有一些隐私问题让播放音频和视频文件变得必要.再次不知道这是否是您的解决方案,但是对于nginx来说,这是奇迹,并治愈了我的一个月长的头痛. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |