Открытие mp4 через php приводит к полной загрузке перед воспроизведением
Я пытаюсь передать файл 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');
Я пробовал скручивать с похожими результатами. Есть идеи, что вызывает эту задержку?
2 ответа
Скорее всего, ваш Flash-плеер надеется, что вы справитесь с HTTP Range
запросы, чтобы он мог начать быстрее при воспроизведении.
Аудиоплеер HTML5/Flash jPlayer имеет раздел в своем руководстве разработчика об этом. Перейдите к части о запросах байтового диапазона:
Ваш сервер должен разрешить запросы Range. Это легко проверить, посмотрев, включает ли ответ вашего сервера Accept-Ranges в его заголовок.
Также обратите внимание, что они предлагают решение PHP для обработки Range
запросы, если вам нужно использовать PHP вместо прямой загрузки.
smartReadFile.php
https://groups.google.com/forum/
Другой вариант - просто заставить apache отправлять сам файл, а не читать его в php и выводить его на выход с помощью X-Sendfile.
Сначала убедитесь, что apache скомпилирован с поддержкой sendfile, затем измените ваш выходной код так:
header ('X-Sendfile: ' . $src);
header ('Content-Type: video/mp4');
header ('Content-Disposition: attachment; filename="' . $filename . '"');
exit;
Обычно это быстрее, чем делать это через PHP.