无法在Safari / Mac上通过PHP提供HTML5视频(5.0)

时间:2010-06-22 02:10:44

标签: php video html5

我在Safari中遇到一个奇怪的错误,当我通过PHP提供MP4视频时(使用基于令牌的身份验证系统对文档根目录下的文件进行模糊处理),Safari出于某种原因触发了<video>'s onerror事件,视频从不加载(我无法从发送到onerror的事件对象中获取任何有用信息 - 一切都未定义)。

当我直接访问PHP脚本时(即视频未嵌入页面中),视频控件会在闪烁到QuickTime问号之前暂时出现。

当我直接访问MP4文件时,它按预期工作。

奇怪的是,嵌入式视频在最新版Chrome for Mac中完美运行。

以下是通过PHP访问时的标题:

Connection:Keep-Alive
Content-Disposition:inline; filename="test.mp4"
Content-Length:5558749
Content-Type:video/mp4
Date:Tue, 22 Jun 2010 01:24:25 GMT
Keep-Alive:timeout=10, max=29
Server:Apache/2.2.15 (CentOS) mod_ssl/2.2.15 0.9.8l DAV/2 mod_auth_passthrough/2.1 FrontPage/5.0.2.2635
X-Powered-By:PHP/5.2.13

以下是直接访问test.mp4时的标题:

Accept-Ranges:bytes
Connection:Keep-Alive
Content-Length:5558749
Content-Type:video/mp4
Date:Tue, 22 Jun 2010 01:26:45 GMT
Etag:"1c04757-54d1dd-489944c5a6400"
Keep-Alive:timeout=10, max=30
Last-Modified:Tue, 22 Jun 2010 01:25:36 GMT
Server:Apache/2.2.15 (CentOS) mod_ssl/2.2.15 0.9.8l DAV/2 mod_auth_passthrough/2.1 FrontPage/5.0.2.2635

唯一不同的标题是:Accept-Ranges(我认为没有必要),Etag,Last-Modified,Content-Disposition和X-Powered-By。

Chrome不仅可以正常处理PHP服务的视频,而且当我使用相同的脚本通过Flash播放器加载MP4时,它也可以正常工作。我无法弄清楚Safari正在窒息。

编辑:此外,当我将内容处理更改为“附件”时,Safari会正确下载MP4文件。

4 个答案:

答案 0 :(得分:3)

为了任何遇到这个问题的人的利益,这里有解释:

我问我认为是关于另一个特定于Safari的HTML5视频问题的无关问题:Single PHP “exit;” statement prevents HTML5 video in Safari

最终问题与PHP exit语句无关。事实上问题是我使用$_SESSION变量来验证请求,而Safari使用单独的流程来处理无法访问相同$_SESSION数据的视频播放(与Chrome不同) )。

令人困惑的是,原始Safari进程和回放进程都分别请求了视频文件。我只是查看原始请求,它确实通过了基于$_SESSION的身份验证,所以我认为它不是问题的一部分。

无论如何,如果您使用$_SESSION数据来验证来自Safari中的HTML5 <video>播放器的请求check out the solution

答案 1 :(得分:1)

您是否尝试修改通过php发送的标题以匹配直接文件发送的标题,然后逐个删除它们/更改它们以查看它本身是什么?

答案 2 :(得分:1)

正如我昨天发现的那样,iPhone版的Safari将播放mp4文件推迟到集成在iPhone中的quicktime播放器。该播放器首先获取mp4的前两个字节(以某种方式确定我认为的关键帧)。它使用了接受范围标头。然后再次使用accept-range。

请求整个文件

我正在使用PHP提供这些mp4文件,我发现支持这个接受范围的标题一切都突然开始起作用了。它可能会解决桌面版Safari的问题,尽管在没有接受范围支持的情况下这一直对我有用。

成功。

鲍勃。

答案 3 :(得分:0)

我也在safari上遇到过类似的问题。我有一个PHP脚本,将mp4 / webm / ogv流式传输到html5视频播放器。直到几周前,它在野生动物园中运作良好。它继续在所有其他浏览器中工作,并且所有请求/响应标头信息对我来说都很好,尽管我不断加入插件未能在safari中加载错误。我最终意识到,由于我已将虚拟主机更改为https并使用openssl签署了自己的证书,因此safari阻止了对媒体内容的GET请求。故事的道德......如果您使用openssl并在本地开发,如果它不信任您的ssl证书,safari将不会为您检索视频数据。