直接访问时播放MP4,但在iOS上通过PHP读取则不播放 [英] MP4 plays when accessed directly, but not when read through PHP, on iOS

查看:158
本文介绍了直接访问时播放MP4,但在iOS上通过PHP读取则不播放的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我使用PHP脚本在提供视频请求之前对其进行验证。此脚本可在桌面上使用Safari和Chrome按预期工作。但是在iOS上,我得到一个破坏的播放按钮。

I use a PHP script to validate video requests before serving them. This script works as expected on the desktop, with Safari and Chrome. But on iOS, I get a broken play button.

我确定该视频已正确编码为iPhone / iPad,因为当我直接访问它时,它可以作为预期。

I'm sure the video is properly encoded for iPhone/iPad, because when I access it directly, it works as expected.

相关的PHP代码:

$file_name = 'test-video.mp4';
$file_size = (string)(filesize($file_name));
header('Content-Type: video/mp4');
header('Content-Length: '.$file_size);
readfile_chunked($file_name);
exit;

readfile_chunked()类似于 readfile()但是对于非常大的文件,可以在PHP手册页的注释中找到: http://php.net/manual/en/function.readfile.php 。无论如何, test-video.mp4 只有~5 MB,小于内存限制 - 在这种情况下,我实际上可以替换正常的 readfile()并生成完全相同的行为。)

(readfile_chunked() is similar to readfile() but for very large files, found in the comments on the PHP manual page: http://php.net/manual/en/function.readfile.php. In any event, test-video.mp4 is only ~5 MB, which is less than the memory limit — and in this case I actually can substitute in the normal readfile() and produce the exact same behavior.)

我直接访问 test-video.mp4 时得到的标题是:

The headers I get when I access test-video.mp4 directly are:

Accept-Ranges:bytes
Connection:Keep-Alive
Content-Length:5558749
Content-Type:video/mp4
Date:Sun, 27 Jun 2010 21:02:09 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

PHP脚本的标题是:

The headers from the PHP script are:

Connection:Keep-Alive
Content-Disposition:inline; filename="test-video.mp4"
Content-Length:5558749
Content-Type:video/mp4
Date:Sun, 27 Jun 2010 21:03:32 GMT
Keep-Alive:timeout=10, max=15
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

我尝试了很多不同的标题排列,甚至匹配它们与直接请求完全无关。

I've tried many different permutations of headers, even matching them exactly to those from a direct request, to no avail.

有没有人在iOS上通过PHP提供HTML5视频成功?

Has anyone had success serving HTML5 video through PHP, on iOS?

[注意:我会尝试使用X-Sendfile,但该网站位于访问权限非常有限的共享主机上。]

[Note: I would try using X-Sendfile, but the site is on a shared host with very limited access.]

编辑:我读到iOS可能对文件扩展名很敏感,所以我尝试设置一个RewriteRule,将MP4请求重写回我原来的PHP脚本,但这也无济于事。

I was reading that iOS can be sensitive about file extensions, so I tried setting up a RewriteRule that rewrites MP4 requests back to my original PHP script, but that didn't help either.

推荐答案

如果你自己这样处理它,那么你需要哈哈ndle字节范围也请求你自己。

If you are handling it yourself like that, then you will need to handle byte-range requests yourself as well.

这篇关于直接访问时播放MP4,但在iOS上通过PHP读取则不播放的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆