我有一个应用程序服务大(几百MB)视频文件,它在桌面浏览器上运行正常,在Apache上使用Rails X-Sendfile.
一个重要的要求是,这些视频必须是私有的,只有登录的用户可见,所以这就是为什么我使用Rails来服务它们.
一个重要的要求是,这些视频必须是私有的,只有登录的用户可见,所以这就是为什么我使用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?
任何关于发生什么的线索?自从几个星期以来我一直在努力,我需要让它工作.欢迎其他可行的解决方案.