Перекодируйте /remux FLV и поток на лету

Я пытаюсь немного научить себя потоковому видео и транскодированию, с некоторыми разработками приложений Roku. У меня есть несколько видеофайлов (в основном в формате FLV (H.264/AAC)), которые я хотел бы передать потоку клиенту, который в данном случае представляет собой блок Roku (который принимает MP4 (H.264/AAC) и HTTP Live Streaming (HLS)). Мне интересно, можно ли транскодировать / перекомпоновать FLV-файлы и передавать их клиенту на лету, возможно, через HLS?

Я попытался использовать ffmpeg для повторного смешивания файлов и их обслуживания сразу во время процесса перекодирования, но они не воспроизводятся до завершения процесса записи. Я могу заставить Roku нормально проигрывать мои законченные файлы MP4 через Apache/Rails.

Но мне интересно... возможно ли настроить сервер для перекодирования / ремукса файла и немедленного перенаправления выходного файла (из ffmpeg/ любого другого инструмента, который я использую) на клиент? Если да, то какие инструменты необходимы для этого? Можно ли использовать сегментатор мультимедийных файлов, чтобы разделить файл по мере его перекодирования или повторного смешивания?

Я хорошо осознаю, что процесс транскодирования требует интенсивной загрузки ЦП, но меня не так сильно беспокоит практичность транскодирования и потоковой передачи на лету, поскольку это просто персональный образовательный проект (и у меня есть система простоя, которая способна, если справиться с этим).

Извиняюсь, если я далеко отсюда, просто пытаюсь взломать мой путь через это.

Спасибо!

1 ответ

Хитрость в получении HLS, обслуживаемого сразу после завершения сегмента TS, заключается в динамическом обновлении списка воспроизведения по мере поступления данных на диск.

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

Сегментер с открытым исходным кодом может сделать это, хитрость заключается в том, чтобы ffmpeg записал один поток MPEG-TS (несегментированный) и записал это в именованный канал (или эквивалент для вашей ОС), а затем прочитал сегментатор из этого именованного канала и запишите файлы в каталог в вашем общем веб-пространстве.

Сегментер многократно обновляет файл M3U8 на диске во время обработки, чтобы его можно было использовать в качестве "живого" потока до завершения задачи.

Когда ffmpeg закрывает свои выходные данные, сегментатор помещает конечный тег в M3U8, и файл становится "VOD".

Сегментер можно скачать здесь

Другие вопросы по тегам