加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

ruby-on-rails – Rails X-Sendfile将大型视频提供给Ipad

发布时间:2020-12-16 19:53:34 所属栏目:百科 来源:网络整理
导读:我有一个应用程序服务大(几百MB)视频文件,它在桌面浏览器上运行正常,在Apache上使用Rails X-Sendfile. 一个重要的要求是,这些视频必须是私有的,只有登录的用户可见,所以这就是为什么我使用Rails来服务它们. 一切都与其他设备完美配合.我以这种方式提供影片:
我有一个应用程序服务大(几百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来说,这是奇迹,并治愈了我的一个月长的头痛.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读