Festlegen der Eingabe- und Ausgabestreams

Festlegen der Eingabe- und Ausgabestreams

Ist es möglich, dieses Problem mit ffmpeg+pyhton oder in Verbindung mit einer anderen Lösung zu lösen? Ich brauche eine Serverlösung, daher sind Vmix, obs usw. nicht geeignet. (Beispiel: Ich habe zwei (und/oder mehr) Streams

rtmp://host/live/input_stream_1
rtmp://host address/live/input_stream_2
 ect

Ist es möglich, das „Routing“ von Streams zu organisieren (einen vorrangigen Live-Video-Stream auszuwählen und ihm Ebenen gemäß der folgenden Logik zuzuweisen):

Es gibt input_stream_1- es ist standardmäßig und lokal - Videos werden aus einem Netzwerkordner per ffmpeg gepackt und eingeflogen rtmp://host address/live/output_stream_1A(+ Overlay-Ebenen - Logos usw.).

Wenn ein eingehender Stream input_stream_2erscheint, muss der Inhalt von input_stream_1durch den Inhalt von ersetzt input_stream_2und gesendet werden. Wenn input_stream_2er stoppt, soll dann zurückgekehrt werden input_stream_1?

Vielleicht wird es eine Kombination aus ffmpeg sein (wie vorgeschlagen indieser Threadund indieser Thread) UndPython-Lösungen.

Die Logik der Ebenen könnte wie folgt aussehen:Bild

Antwort1

import subprocess

Festlegen der Eingabe- und Ausgabestreams

Eingabestream_1 = "rtmp://host/live/Eingabestream_1" Eingabestream_2 = "rtmp://host/live/Eingabestream_2" Ausgabestream = "rtmp://host/live/Ausgabestream"

Festlegen des Standardeingabestreams

aktueller_Eingabestream = Eingabestream_1

Legen Sie die Overlay-Ebenen fest, die auf den Stream angewendet werden sollen

overlay_layers = "-i logo.png -filter_complex overlay"

Verwenden Sie eine While-Schleife, um die Streams kontinuierlich zu lesen und weiterzuleiten

while True: # Verwenden Sie FFmpeg, um den aktuellen Eingabestream zu lesen und den Ausgabestream zu schreiben 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

verwandte Informationen