nginx-rtmp + ffmpeg перемещает moov mp4 в голову на лету

У меня есть следующий вариант использования:

1) Алиса публикует поток на сервер nginx-rtmp

2) Сервер конвертирует поток в mp4 (по умолчанию flv, если я правильно понимаю, и нужна трансформация кодека)

3) Боб должен иметь возможность запрашивать диапазон для этого файла mp4, пока Алиса все еще публикует

Однако кажется, что команда ffmpeg для преобразования flv в mp4 может быть выполнена только тогда, когда файл mp4 полностью сгенерирован, а затем ffmpeg выполнит второй проход и переместит «moov» в заголовок своего нового файла.

Наш вариант использования — разрешить Бобу использовать запрос диапазона для извлечения файла mp4, пока Алиса все еще публикует (т. е. смотрит видео Алисы как можно скорее) с момента времени 0 (т. е. со второго момента, когда Алиса начала публикацию). Таким образом, с moov mp4 во главе, легко выполнять запросы диапазона и реализовывать функциональность. Необработанный RTMP, похоже, не решает нашу проблему, поскольку мы не можем позволить Бобу смотреть запись Алисы с момента 0.

Вопрос такой: 1) Можно ли это сделать, пока flv еще не полностью сгенерирован? 2) Любая другая идея, как мы можем использовать nginx-rtmp/ffmpeg для достижения желаемой функциональности?

Огромное спасибо


person Eddie Xie    schedule 14.02.2017    source источник


Ответы (1)


Нет, это невозможно (если только вы не создадите полностью собственный плеер, в таком случае зачем вообще использовать MP4). Вам нужен потоковый или фрагментированный формат, такой как HLS или CMAF.

person szatmary    schedule 14.02.2017
comment
Есть ли способ динамически передавать байты кадра h.264 или даже какой-то аудиокадр mpeg в декодер браузера HTML5? Это то, о чем Media Source Extensions (MSE)? Позволяет ли он настроить конфигурацию декодера AVC и конфигурацию аудио (PPS и SPS)? Я не понимаю, почему FLV, содержащий только данные MPEG a/v, не воспроизводится в браузере (поскольку теперь это в основном разновидность формата mp4). - person VC.One; 15.02.2017
comment
@ VC.One Только что проверил, что flv ДЕЙСТВИТЕЛЬНО работает в этом сценарии. т.е. мне достаточно указать http сервер на записанный flv, и все необходимые требования соблюдены - person Eddie Xie; 15.02.2017
comment
FLV, безусловно, НЕ является вариацией MP4. MSE использует CMAF, поэтому я сказал это в своем ответе. (Или вы имеете в виду f4v. Потому что это разновидность MP4, но это просто Adobe пытается вас запутать. Не позволяйте им) - person szatmary; 16.02.2017