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

标签 php video html

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

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

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

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

以下是通过 PHP 访问时的 header :

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 时的 header :

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

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

Chrome 不仅可以很好地处理 PHP 提供的视频,而且当我使用相同的脚本通过 Flash 播放器加载 MP4 时,它也可以正常工作。我只是想不通 Safari 正在窒息什么。

编辑:此外,当我将内容配置更改为“附件”时,Safari 会很好地下载 MP4 文件。

最佳答案

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

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

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

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

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

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

相关文章:

c# - 如何在除ffmpeg之外的C# windows窗体中合并音频和视频

jquery - 选择选项后删除对 twitter bootstrap drown 的关注

javascript - 单击两个链接时显示一个 Div

php - 如何在滚动时使用 php 和 jquery 加载结果?

php - Laravel 6 PHPUnit 测试 - 找不到驱动程序(SQL : PRAGMA foreign_keys = ON;))

PHP strtotime() 本周周一的不同结果

html - 选择具有数据属性的第一个元素

php - mysql随机更新一列(快)

android - MediaStore.EXTRA_DURATION_LIMIT Nexus 设备不工作?

python - 使用opencv和python从视频中提取帧