What is the proper way to serve mp4 files through rails to an Ipad?

前端 未结 1 1634
天命终不由人
天命终不由人 2020-12-13 21:48

We\'re having trouble serving mp4s that will play on an ipad using a default rails 3 app. The mp4 is served correctly when viewing the route in chrome and other browsers on

相关标签:
1条回答
  • 2020-12-13 22:45

    The problem seems to be that rails doesn't handle http-range requests which ios needs for streaming mp4s.

    This was our solution for development, (using thin as our server):

      if(request.headers["HTTP_RANGE"]) && Rails.env.development?
    
        size = File.size(file_path)
        bytes = Rack::Utils.byte_ranges(request.headers, size)[0]
        offset = bytes.begin
        length = bytes.end - bytes.begin + 1
    
        response.header["Accept-Ranges"]=  "bytes"
        response.header["Content-Range"] = "bytes #{bytes.begin}-#{bytes.end}/#{size}"
        response.header["Content-Length"] = "#{length}"
    
        send_data IO.binread(file_path,length, offset), :type => "video/mp4", :stream => true,  :disposition => 'inline',
                  :file_name => file_name
    
      else
        send_file(file_path, :disposition => 'inline', :stream => true, :file_name => file_name)
      end
    

    Ultimately we will be using nginx XSendfile to serve the assets in our production environment as the above solution is much slower than what we need.

    0 讨论(0)
提交回复
热议问题