在 iOS 上,直接访问 MP4 时播放,但通过 PHP 读取时不播放
2022-08-30 21:06:09
我使用PHP脚本在提供视频请求之前对其进行验证。此脚本在桌面上按预期工作,使用 Safari 和 Chrome。但是在iOS上,我得到了一个坏掉的播放按钮。
我确信视频已针对iPhone / iPad进行了正确编码,因为当我直接访问它时,它可以按预期工作。
相关 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()
类似于但对于非常大的文件,可以在PHP手册页上的注释中找到:http://php.net/manual/en/function.readfile.php。无论如何,只有~5 MB,这小于内存限制 - 在这种情况下,我实际上可以在正常情况下进行替换并产生完全相同的行为。readfile()
test-video.mp4
readfile()
当我直接访问时,我得到的标题是:test-video.mp4
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 脚本中的标头是:
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
我已经尝试了许多不同的标头排列,甚至将它们与直接请求中的标头完全匹配,但无济于事。
有没有人在iOS上通过PHP成功提供HTML5视频?
[注意:我会尝试使用X-Sendfile,但该网站位于共享主机上,访问权限非常有限。
编辑:我正在阅读iOS可能对文件扩展名敏感,所以我尝试设置一个RewriteRule,将MP4请求重写回我的原始PHP脚本,但这也没有帮助。