MP4视频 - Safari - > Cloudflare - > nginx - > Rails =没有比赛

时间:2018-05-24 01:30:31

标签: ruby-on-rails nginx safari mp4 cloudflare

我已经看到了很多类似的问题和问题,我得出的结论是Safari需要206响应而不是200响应。

目前Cloudflare返回200而不是206,但我不完全确定我在其他地方也能正确设置。

这是我为视频提供的Rails控制器方法:

def videos file_name = params.fetch(:filename, '') file_path = "#{Rails.root}/app/assets/videos/#{file_name}.#{params.fetch(:extension, '')}" raise ActionController::RoutingError, 'Not Found' unless file_name.index('/').nil? && File.exist?(file_path) send_file(file_path, type: 'video/mp4', disposition: 'inline', status: (request.headers['Range'].present? ? 206 : 200)) end

基本上它会检查文件名中是否有任何/(以避免任何安全问题......以这种方式提供的所有视频都在服务器上的同一文件夹中),并确保文件存在,然后使用send_file来传递它,如果存在'Range'标题,则返回206状态,否则返回200.

我认为这是正确的...而且nginx配置非常简单,基本上只是传递给puma,但我并不清楚它是否重要,因为'Range'标题似乎不是通过Cloudflare将它传输到我的服务器,无论如何(我转储了标题,并没有看到任何关于'Range'的内容)。

编码是正确的,内容/ mime类型是正确的,它适用于Chrome& Firefox,一切看起来都很棒,只是它不能在Safari中播放。

我今天花了很多时间试图解决这个问题,我尝试了很多不同的事情,但我没有进一步的想法。

如何让这个愚蠢的东西在Safari上运行?

1 个答案:

答案 0 :(得分:0)

这个奇怪的标题恰好是我的情况。我按照下面列出的Apple指南确认了该问题,并确认我正在下载整个文件,并且在修复后仅下载了第一块。

curl --range 0-99 http://example.com/test.mov -o /dev/null

我通过更改nginx.conf中的gzip压缩设置来解决Safari .mp4播放问题,以删除 .mp4 文件的gzip压缩。

这是nginx中的块供参考。 (注意:根据您应用的配置方式,您可能需要将位置行更改为location ~ \.mp4$ {

location ~ ^/(assets|system|videos)/  {
   expires max;
   add_header Cache-Control public;
   add_header ETag "";
   gzip on;
   gzip_http_version 1.1;
   gzip_vary on;
   gzip_comp_level 6;
   gzip_proxied any;

   # Reference configuration
   #gzip_types text/plain text/html text/css application/json application/javascript application/x-javascript text/javascript video/mp4 application/mp4 image/jpeg image/png image/svg+xml application/x-font-ttf application/x-font-truetype application/font-woff application/font-woff2 application/vnd.ms-fontobject;

   # Kelton trying to fix cloudflare by removing the mp4 settings
   gzip_types text/plain text/html text/css application/json application/javascript application/x-javascript text/javascript image/jpeg image/png image/svg+xml application/application/x-font-ttf application/x-font-truetype application/font-woff application/font-woff2 application/vnd.ms-fontobject;
}

链接到Apple文档参考:https://developer.apple.com/library/archive/documentation/AppleApplications/Reference/SafariWebContent/CreatingVideoforSafarioniPhone/CreatingVideoforSafarioniPhone.html#//apple_ref/doc/uid/TP40006514-SW6