Как передать медиа-файл с помощью PHP?

Я пытаюсь создать приложение, в котором я должен передавать медиа-файлы (аудио и видео) в браузере. Я читаю файл через php и отправляю данные в браузер. Я использую следующий код.

header("Cache-Control: no-cache, must-revalidate"); // HTTP/1.1
header("Expires: Sat, 26 Jul 1997 05:00:00 GMT"); // Date in the past
header("Content-Type: {$file->getMimetype()}");
header("Content-Disposition: inline; filename=".$filename.";");
header("Content-Length: ".strlen($file_content));

echo $file_content;

все работает нормально, за исключением случаев, когда я пытаюсь переслать видео или аудио (я имею в виду, что текущее местоположение воспроизведения равно 0: 15, и оно напрямую переходит в 1: 25), медиа останавливается, и когда я снова нажимаю кнопку воспроизведения, он начинается с начало.

Я думаю, что проблема в буферизации, но не могу разобраться. Я делаю что-то неправильно в заголовке или что-то еще требуется.

спасибо.

4 ответов


Я думаю, вам нужно реализовать заголовок диапазона, чтобы клиент мог перейти к определенной позиции в файле. Вы, вероятно, можете узнать, что идет не так нюхают запрос игрок отправляет.


то, что вы хотите, называется "content-Range requests"

посмотреть здесь возобновление загрузки при использовании PHP для отправки файла?


Я недавно наткнулся на это, что может вам помочь:

http://www.jasny.net/articles/how-i-php-x-sendfile/

вместо того, чтобы передавать весь файл через PHP (который съедает память), вы можете использовать x-sendfile. Это модуль Apache, который позволяет запускать PHP-программу, но передавать управление обратно на веб-сервер для обработки фактической загрузки файла после того, как ваш код сделал то, что ему нужно (аутентификация и т. д.).

Это означает, что ваш PHP-код не должен беспокоиться о том, как файл обслуживается; пусть веб-сервер делает то, для чего он предназначен.

надеюсь, это поможет.


вот хороший учебник для него, вы хотите только раздел PHP, но все же: http://www.devshed.com/c/a/PHP/Video-Streaming-PHP-Script-Tutorial/3/