我们的网站上有一个 MP4 视频;它在 IE9+、Firefox、Chrome 和 Mac 上的 Chrome 中运行良好。但是,在 Safari 上,视频根本无法播放 - 它会触发“停滞”事件,然后不会加载任何内容。我会发布我们的 HTML,但我发现 Safari 甚至在导航到原始 MP4 的 URL 时也不会播放它,从而进一步追踪了问题。下载并在本地播放时,该视频在 Quicktime 中运行良好。
最奇怪的是,在我们所有的开发人员中,当我从我的开发计算机上运行相关服务器时,我可以让视频在 Safari 上运行。此外,同一目录下的其他 MP4 文件也存在类似问题。这对我来说是关键,我一直在寻找从服务器传输视频的方式的任何细微差别 - 请求/响应 header 、确切的文件大小等。
从 Chrome 复制的标题(只是因为 Safari 更难复制/粘贴)
Accept:text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8
Accept-Encoding:gzip, deflate, sdch
Accept-Language:en-US,en;q=0.8
Cache-Control:max-age=0
Connection:keep-alive
DNT:1
Host:*************:8443
User-Agent:Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2171.95 Safari/537.36
Response Headers
Accept-Ranges:bytes
Content-Length:44875102
Content-Type:video/mp4;charset=UTF-8
Date:Tue, 30 Dec 2014 21:11:51 GMT
ETag:W/"44875102-1419959755000"
Last-Modified:Tue, 30 Dec 2014 17:15:55 GMT
Server:Apache-Coyote/1.1
(另外,以防万一这让您想起一个较旧的问题;我知道 Windows 上的 Safari 已经死了很久了。这个问题发生在 OS X 上)
编辑:可能会有帮助的新信息。我从我自己的网络服务器上获取了一段个人视频,该视频能够在有问题的 Safari 浏览器上运行,并将其下载到我们服务器的本地视频目录中。 从那里,它遇到了与我们其他视频相同的问题。这向我表明 MP4 本身可能无关紧要 - 这可能是我们 Tomcat 7 网络服务器的某种服务器问题。我们确实正确注册了 Content-Types,这至少涵盖了基础知识,但我很好奇是否还有其他必要的部分。
更多信息:我最初没想过要提及这一点,但我们正在通过 HTTPS 连接加载我们的网页和视频。我们的大多数测试服务器都没有有效的证书,因此我们需要单击标准浏览器警告“此服务器可能不是它所说的那个人”。我们现在正在研究如何才能在我们的所有服务器上拥有正确的证书。
最佳答案
Safari 需要网络服务器支持“Range”请求 header 才能播放您的媒体内容。
对于合法的“范围”请求响应,您的网络服务器需要返回状态代码“206”。
关于html - <video> 在其他浏览器中播放,但在 Safari 中不播放,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27712778/