繁体   English   中英

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

[英]Safari 9.0 can not play mp4 video on the storage server

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

更新 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 文件反复出现的问题。

我测试您的本地主机的视频Node.js的静态服务器和它在Safari中,这意味着视频本身应该罚款发挥罚款。

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

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

更新 1

使用wireshark捕获来自Chrome的请求,可以看到导致来自服务器的响应以及要播放的视频,而来自Safari(在同一台机器上)的请求导致服务器没有响应。

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

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

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

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

然而,使用在Chrome一个HTTP工具(例如邮差)和改变的范围内,以0-1似乎没有停止服务器在Chrome情况下响应。 在使用该工具集,尽可能事实上,所有相同的标题如Safari套似乎仍然仿佛回到视频确定。

问题是 safari 或 iOs 需要块。 来自流媒体服务器的含义。 如果您的视频来自 blob 或文件服务器,则 safari 将引发错误。 您可以将其与这篇文章Failed to Load Resource, Plugin Handled Load on iOS 联系起来

为了更多地了解不在视频标签中播放的 mp4,我想在这里分享我的经验。 我最近花了很长时间解决一个问题,该问题阻止 mp4 在 Safari 中播放。

正如前面的一个答案中提到的那样,Safari 首先发送一个字节范围请求,要求接收 206 响应的 Video 标签。 但是,如果您使用 Service Worker,则响应返回 200,并且 Safari 似乎不知道如何处理此问题。 我们的解决方案是排除在 Safari 中使用 Service Worker。

我们通过使用 MacBook 上 Safari 调试器的网络选项卡解决我们在 iPad 上看到的问题发现了这一点。 附件是用于比较/参考的屏幕截图。 左侧选项卡显示默认情况下调用的外观。 右侧选项卡显示了使用 Service Worker 时您会看到的内容。

Safari 网络标签服务工作者

在我的情况下 Safari 15+ 浏览器将返回相同的 206 错误,但无论如何都会播放视频

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM