首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >MP4视频- Safari ->云Safari -> nginx -> Rails =无播放

MP4视频- Safari ->云Safari -> nginx -> Rails =无播放
EN

Stack Overflow用户
提问于 2018-05-24 09:30:31
回答 2查看 810关注 0票数 1

我已经看到了很多与此类似的问题和问题,我得出的结论是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上工作?

EN

回答 2

Stack Overflow用户

发布于 2019-12-16 06:11:38

这个令人好奇的具体标题正是我的情况。我根据下面列出的苹果指南确认了这个问题,并验证了我下载的是整个文件,修复后只下载了第一块文件。

代码语言:javascript
复制
curl --range 0-99 http://example.com/test.mov -o /dev/null

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

下面是nginx中的代码块以供参考。(注意:根据应用程序的配置方式,您可能需要将位置线更改为location ~ \.mp4$ {

代码语言:javascript
复制
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;
}

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

票数 0
EN

Stack Overflow用户

发布于 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

我重新上传了视频,它工作得很好。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50499637

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档