
¿Es posible resolver este problema usando ffmpeg+pyhton o junto con otra solución? Necesito una solución de servidor, por lo que Vmix, obs, etc. no son adecuados. (por ejemplo: tengo dos (y/o más) transmisiones
rtmp://host/live/input_stream_1
rtmp://host address/live/input_stream_2
ect
¿Es posible organizar el "enrutamiento" de las transmisiones (eligiendo una transmisión de video en vivo prioritaria y aplicándoles capas de acuerdo con la lógica:
Hay input_stream_1
, es predeterminado y local, los videos de una carpeta de red se empaquetan a través de ffmpeg y se envían a rtmp://host address/live/output_stream_1A
(+ capas superpuestas, logotipos de ect).
Es necesario, cuando input_stream_2
aparece un flujo entrante, reemplazar el contenido de input_stream_1
por el contenido de input_stream_2
y enviarlo, y cuando input_stream_2
se detenga, ¿volverá input_stream_1
?
Tal vez sea una combinación de ffmpeg (como se sugiere eneste hiloy eneste hilo) ysoluciones de Python.
La lógica de las capas podría ser como:FOTO
Respuesta1
import subprocess
Establecer los flujos de entrada y salida
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"
Establecer el flujo de entrada predeterminado
flujo_entrada_actual = flujo_entrada_1
Configure las capas superpuestas para aplicarlas a la secuencia
overlay_layers = "-i logo.png -filter_complex superposición"
Utilice un bucle while para leer y enrutar continuamente las transmisiones
while True: # Use FFmpeg para leer el flujo de entrada actual y escribir el flujo de salida 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