Safari 9.0 无法播放存储服务器上的mp4视频

新手上路,请多包涵

以下视频链接不能用safari 9.0(最新版)播放。但是老版本的safari、chrome和firefox都可以玩。

http://assets00.grou.ps/0F2E3C/wysiwyg_files/Videos/saksuka/20150928104628-lhmkkfbhnkiisbhht.mp4

当我从服务器下载视频到我的电脑时,我可以玩 safari 9.0。

这就是为什么我不认为这个问题源于视频编码。

我已经完成了这些设置;

 mime.types
video/mp4   mp4 m4v
video/ogg   ogv
video/webm  webm

httpd.conf
AddType video/mp4 mp4 m4v
AddType video/ogg ogv
AddType video/webm webm

.htaccess
AddType video/mp4 mp4 m4v
AddType video/ogg ogv
AddType video/webm webm

原文由 Mehmet 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 1k
1 个回答

更新 2 - 2020 年 6 月

此问题最常见的根本原因似乎是未配置为正确处理范围请求的服务器。

Safari 在发送具有字节范围的请求时希望看到“206”响应。如果服务器响应“200”请求,则表明 Safari 无法处理。其他一些浏览器似乎对此没有问题 - 例如 Chrome。

下面的检查网络选项卡屏幕截图显示了带有范围请求和 206“部分内容”响应的成功视频播放:

在此处输入图像描述

虽然下面的示例显示了一个无法在 Safari 中播放但在 Chrome 中播放的视频 - 并且可以看出服务器只是简单地响应 200 请求:

在此处输入图像描述

您可以使用 CURL 命令测试服务器是否正确接受范围请求 - 请在此处查看来自苹果的信息:

如果您不确定您的媒体服务器是否支持字节范围请求,您可以在 OS X 中打开终端应用程序并使用 curl 命令行工具从服务器上的文件下载一小段:

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

如果该工具报告它下载了 100 个字节,则媒体服务器正确处理了字节范围请求。如果它下载了整个文件,您可能需要更新媒体服务器。有关 curl 的更多信息,请参阅 OS X 手册页。

(来自: https ://developer.apple.com/library/archive/documentation/AppleApplications/Reference/SafariWebContent/CreatingVideoforSafarioniPhone/CreatingVideoforSafarioniPhone.html#//apple_ref/doc/uid/TP40006514-SW6)

对第一个正确播放的视频使用上述参考中的 CURL 命令,我们可以看到响应是仅按预期返回请求的范围:

在此处输入图像描述

在上面的示例中使用相同的 CURL 命令,它在 Safari 中不播放(但在 Chrome 中播放)表明服务器正在响应完整文件,而不仅仅是请求的范围:

在此处输入图像描述

此 CURL 测试可能是检查您的服务器是否正确尝试处理请求的最快方法。

原始答案

这似乎是 Safari 上某些 mp4 文件反复出现的问题。

我在 localhost node.js 静态服务器上测试了您的视频,它在 Safari 中播放良好,这意味着视频本身应该没问题。

如果您查看 Safari 中的 Web 检查器,您会看到 Web 请求不包含某些标头。这会导致一些服务器出现问题,它们不会按照 Safari 期望的方式响应,或者根本不响应。

您可以看到正在讨论的类似问题(我认为第二个问题不是您的情况,但说明发送到服务器的请求中包含的信息可能会导致服务器“决定”不按您的意愿进行响应):

更新 1

使用wireshark抓取来自Chrome的请求,可以看到服务器有响应并播放视频,而来自Safari(在同一台机器上)的请求没有得到服务器的响应。

这些请求通常是相似的,并且都包含引荐来源网址标头。 Safari 浏览器最初只要求从服务器返回前 2 个字节 - 它通过使用“范围”标头来实现,该标头用于指定文件返回的字节范围:

  • 范围:字节=0-1\r\n

另一方面,Chrome 请求其范围请求中的整个视频:

  • 范围:字节=0-\r\n

但是,在 Chrome 上使用 HTTP 工具(例如 Postman)并将范围更改为 0-1 似乎并没有阻止服务器在 Chrome 情况下响应。事实上,使用该工具尽可能地设置所有与 Safari 设置相同的标头似乎仍然可以正常返回视频。

原文由 Mick 发布,翻译遵循 CC BY-SA 4.0 许可协议

推荐问题