
Можно ли решить эту проблему с помощью ffmpeg+pyhton или в сочетании с другим решением. Мне нужно серверное решение, поэтому Vmix, obs и т. д. не подходят. (например: у меня два (и/или больше) потока
rtmp://host/live/input_stream_1
rtmp://host address/live/input_stream_2
ect
Можно ли организовать «маршрутизацию» потоков (выбор приоритетного live-video-потока и наложение на них слоев согласно логике:
Есть input_stream_1
- он дефолтный и локальный - видео из сетевой папки упаковываются через ffmpeg и летят в rtmp://host address/live/output_stream_1A
(+накладываются слои -и т.д. логотипы).
Необходимо при input_stream_2
появлении входящего потока заменить содержимое на input_stream_1
содержимое input_stream_2
и отправить его, а при input_stream_2
остановке — вернуть input_stream_1
?
Возможно, это будет комбинация ffmpeg (как предложено вэта темаИ вэта тема) ирешения на Python.
Логика слоев может быть такой:ПИК
решение1
import subprocess
Установите входные и выходные потоки
input_stream_1 = "rtmp://host/live/input_stream_1" input_stream_2 = "rtmp://host/live/input_stream_2" output_stream = "rtmp://host/live/output_stream"
Установить входной поток по умолчанию
текущий_входной_поток = входной_поток_1
Установите слои наложения, которые будут применяться к потоку
overlay_layers = "-i logo.png -filter_complex наложение"
Используйте цикл while для непрерывного чтения и маршрутизации потоков
while True: # Использовать FFmpeg для чтения текущего входного потока и записи выходного потока ffmpeg_command = f"ffmpeg -i {current_input_stream} {overlay_layers} -c copy {output_stream}" subprocess.run(ffmpeg_command, shell=True)
# Check for incoming streams and switch to them if necessary
if incoming_stream_2_is_active():
current_input_stream = input_stream_2
else:
current_input_stream = input_stream_1