我在Safari中遇到了一个奇怪的错误,当我通过PHP提供MP4视频(用基于令牌的身份验证系统混淆文档根目录下的文件)时,出于某种原因,Safari会触发<video>'sonerror事件,而且视频从不加载(我无法从发送给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将很好地下载MP4文件。

最佳答案

为了所有遇到这个问题的人的利益,这里有一个解释:
我问了一个我认为与另一个Safari特定HTML5视频问题无关的问题:Single PHP “exit;” statement prevents HTML5 video in Safari
最终问题与PHPexit语句无关。事实上,问题是我使用了一个$_SESSION变量来验证请求,而Safari使用一个单独的进程来处理无法访问相同$_SESSION数据的视频播放(比如说Chrome)。
令人困惑的是,原始的Safari进程和回放进程都分别请求视频文件。我只看了原始请求,它确实通过了基于$_SESSION的身份验证,所以我认为这不是问题的一部分。
无论如何,如果您使用$_SESSION数据来验证Safari中HTML5<video>播放器的请求,check out the solution

关于php - 无法在Safari/Mac(5.0)上通过PHP提供HTML5视频,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/3089784/

10-11 22:25
查看更多