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来说,这是奇迹,并治愈了我的一个月长的头痛.

相关文章

validates:conclusion,:presence=>true,:inclusion=>{...
一、redis集群搭建redis3.0以前,提供了Sentinel工具来监控各...
分享一下我老师大神的人工智能教程。零基础!通俗易懂!风趣...
上一篇博文 ruby传参之引用类型 里边定义了一个方法名 mo...
一编程与编程语言 什么是编程语言? 能够被计算机所识别的表...
Ruby类和对象Ruby是一种完美的面向对象编程语言。面向对象编...