2015-10-13 5 views
0

У меня есть 1-5 входные потоки, каждый из которых загружается в несколько другом временном смещении.ffmpeg - переключает потоки rtmp в один кодированный выход?

С помощью rtmp и ffmpeg я могу надежно закодировать один поток в список воспроизведения HLS, который легко воспроизводится на iOS, моей целевой платформе доставки.

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

Поэтому я хочу переключаться между rtmp://localhost/live/stream1 .. rtmp://localhost/live/stream5 на регулярной основе. Иногда бывает несколько потоков, а иногда нет.

Есть ли способ, по которому ffmpeg может вращаться между входными потоками при создании списка воспроизведения HLS? Моя цель состоит в том, чтобы избежать дублирования экземпляров ffmpeg по причинам, связанным с затратами на сервер, и я думаю, что подключение дискретно кодированных входных потоков для воспроизведения было бы трудным, если не невозможным.

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

ответ

1

Включение входов в режиме реального времени может привести к задержкам из-за начального времени соединения и буферизации (rtmp_buffer).

Нет прямого способа сделать это с помощью ffmpeg. Будучи проектом с открытым исходным кодом, вы можете добавить функциональность самостоятельно. Она не должна быть очень сложной, если все все ваши входы одни и те же кодеки, количество дорожек, размеров кадров и т.д.

Some people suggested с помощью другого программного обеспечения, чтобы сделать выключатель, такие как MLT или с помощью фильтров, таких как zmq (ZeroMQ) в make ffmpeg принять команды.

Один из способов сделать это было бы повторно поток в качестве источника mpgets на локальный порт и использовать локальный адрес в качестве входных данных в команде, которая выводит HLS:

Stream Switcher (60-е каждого потока, один на один раз) - вы можете сделать скрипт с собственной логикой, это для иллюстративных целей:

ffmpeg -re -i rtmp://.../stream1 -t 60 -f mpegts udp://127.0.0.1:10000 
ffmpeg -re -i rtmp://.../stream2 -t 60 -f mpegts udp://127.0.0.1:10000 
[...] 
ffmpeg -re -i rtmp://.../stream5 -t 60 -f mpegts udp://127.0.0.1:10000 

Используйте локальный адрес в качестве источника для HLS потока - он будет ждать ввода, если нет ни и исправьте DTS/PTS, но вы, вероятно, введете некоторые задержки при переключении:

ffmpeg -re -i udp://127.0.0.1:10000 /path/to/playlist.m3u8 

 Смежные вопросы

  • Нет связанных вопросов^_^