我已经看到了很多与此类似的问题和问题,我得出的结论是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上工作?
发布于 2019-12-16 06:11:38
这个令人好奇的具体标题正是我的情况。我根据下面列出的苹果指南确认了这个问题,并验证了我下载的是整个文件,修复后只下载了第一块文件。
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;
}发布于 2022-02-25 08:27:54
在开始更改您的nginx配置之前,您可能需要检查您的mp4是否使用了所有主要浏览器供应商都支持的编解码器。
一个恰当的例子:我正在使用下面的ffmpeg命令为一个WordPress站点创建一个背景视频:
ffmpeg -i input.mov -vcodec libx265 -crf 32 -an output.mp4
当我上传它时,WordPress给了我这个错误,视频不能播放:
Media error: Format(s) not supported or source(s) not found
我错误地认为这是Cloudflare或nginx的问题。问题是,至少在这个时间点上,只有Microsoft Edge (版本16和更高版本)和Safari (版本11和更高版本)支持H.265。我应该使用H.264:
ffmpeg -i input.mov -vcodec libx264 -crf 32 -an output.mp4
我重新上传了视频,它工作得很好。
https://stackoverflow.com/questions/50499637
复制相似问题