Транскодирование/ремультиплексирование FLV и потоковое воспроизведение на лету

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

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

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

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

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

Спасибо!


person Threeve    schedule 31.07.2012    source источник
comment
Если вы еще не видели его, рекомендуем вам ознакомиться с документацией FFmpeg по потоковой передаче MOV/MP4. для некоторого фона на такого рода проблеме.   -  person blahdiblah    schedule 31.07.2012


Ответы (1)


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

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

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

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

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

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

person Haqa    schedule 28.10.2012