Я использую 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()
аналогично readfile()
, но для очень больших файлов, которые можно найти в комментариях на странице руководства PHP: http://php.net/manual/en/function.readfile.php. В любом случае test-video.mp4
- это всего ~ 5 МБ, что меньше, чем предел памяти - и в этом случае я действительно могу заменить в обычном 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
Я пробовал много разных комбинаций заголовков, даже сопоставляя их точно с таковыми из прямого запроса, но безрезультатно.
Кто-нибудь успешно обслуживал видео HTML5 через PHP на iOS?
[Примечание: я бы попробовал использовать X-Sendfile, но сайт находится на общем хосте с очень ограниченным доступом.]
РЕДАКТИРОВАТЬ: Я читал, что iOS может быть чувствительна к расширениям файлов, поэтому я попытался настроить RewriteRule, который переписывает запросы MP4 обратно в мой оригинальный скрипт PHP, но это тоже не помогло.