gpt4 book ai didi

ruby-on-rails - Rails + X-Sendfile 向 Ipad 提供大型视频

转载 作者:行者123 更新时间:2023-12-03 20:59:38 25 4
gpt4 key购买 nike

我有一个提供大型(数百 MB)视频文件的应用程序,它在桌面浏览器上运行良好,在 Apache 上使用 Rails + X-Sendfile。
一个重要的要求是这些视频必须是私有(private)的并且只对登录用户可见,所以这就是我使用 Rails 为它们提供服务的原因。

一切都与其他设备完美配合。我以这种方式提供视频:

response.headers["X-Sendfile"]=  filename
send_file filename, :disposition => :inline, :stream => true, :x_sendfile => true

但是 平板 的请求需要字节范围 header 。一个解决方案(不能完美地工作)是这样的:
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", :stream => true, :disposition => 'inline', :file_name => filename

使用这个解决方案,我遇到了大于 50mb 的视频的问题,更重要的是,我给 rails 一个它不应该承担的责任。通过 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 可能有类似的解决方案。

从某种意义上说,我必须添加一个内部重定向到文件夹路径的代理 header 。这看起来多么愚蠢,Apple 存在某种隐私问题,这使得播放音频和视频文件成为必要。再次不确定这是否是您的解决方案,但对于 nginx,这确实奇迹并治愈了我长达一个月的头痛。

关于ruby-on-rails - Rails + X-Sendfile 向 Ipad 提供大型视频,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22581727/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com