Я пытаюсь передать файл mp4 на флеш-плеер через php, и видео загружается полностью, прежде чем начать воспроизведение.
$src = '/var/www/user/data/www/domain.com/video.mp4'; if(file_exists($src) and is_readable($src)) { header('Content-Type: video/mp4'); header('Content-Length: '.filesize($src)); readfile($src); } else die('error');
Я попробовал завиток с аналогичными результатами. Любые идеи, что вызывает эту задержку?
Скорее всего, ваш Flash-плеер надеется, что вы будете обрабатывать запросы HTTP Range
чтобы он мог быстрее начать работу при воспроизведении.
В аудиопроигрывателе HTML5 / Flash jPlayer содержится информация об этом в руководстве разработчика . Выделите часть запросов байтов:
Ваш сервер должен включить запросы диапазона. Это легко проверить, если вы ответили, что ответ вашего сервера включает Accept-Ranges в его заголовке.
Также обратите внимание, что они предлагают решение PHP для обработки запросов Range
если вам нужно использовать PHP вместо прямой загрузки.
smartReadFile.php
https://groups.google.com/forum/#!msg/jplayer/nSM2UmnSKKA/bC-l3k0pCPMJ
Другим вариантом было бы просто отправить Apache файл сам по себе, а не читать его в php и выгружать его на выходе с помощью X-Sendfile.
Сначала убедитесь, что apache скомпилирован с поддержкой sendfile, а затем измените код вывода:
header ('X-Sendfile: ' . $src); header ('Content-Type: video/mp4'); header ('Content-Disposition: attachment; filename="' . $filename . '"'); exit;
Обычно это быстрее, чем через PHP.