Задать вопрос
@nik184
PHP-Symfony, Android developer

Почему функция sleep в php, вызыванная во время стриминга записи, делает её недоступной для перемотки в хроме?

Этот код вернёт пользователю запись, которую без проблем можно будет перематывать.

header("Content-Type: audio/webm");
header("Accept-Ranges: bytes");
header('X-Accel-Buffering: no');
header('Transfer-Encoding: chunked');

$path = "record.webm";
readfile($path);    
die();


А этот сделает аудио непригодным для перемотки в хроме.

header("Content-Type: audio/webm");
header("Accept-Ranges: bytes");
header('X-Accel-Buffering: no');
header('Transfer-Encoding: chunked');

$path = "record.webm";
readfile($path);
sleep(1);
die();


Я не могу избежать использования функции sleep, так как должен возвращать частями файл, который записыватся в реальном времени. Причем в ff этого и не надо, там всё работает нормально. Для хрома же я уже думаю над тем чтобы по окончании записи делать дополнитальный запрос к серверу, чтобы вернуть запись уже целиком без задержек. Конечно хотелось бы избежать подобных костылей, но как?
  • Вопрос задан
  • 59 просмотров
Подписаться 1 Средний 1 комментарий
Решения вопроса 1
@alexdora
Топ-менеджер
По-моему вы решаете задачу костылем. Любая трансляция и разбиение на чанки это должен делать не PHP, к примеру nginx + ffmpeg отлично решат этот вопрос на базе HLS. И все будет работать с перемоткой.

То что вы задумали это попытка использовать молоток чтобы копать яму. Даже сомневаюсь что реализация полностью работающая возможна без настоящей многопоточности. Точнее она возможна скорее всего, но рано или поздно все пойдет не туда куда нужно.

Ищите nginx + rtmp
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы