FFMpeg wechselt beim Streamen auf YouTube zwischen Live-Stream und Textvideo

FFMpeg wechselt beim Streamen auf YouTube zwischen Live-Stream und Textvideo

Ich betreibe seit einiger Zeit einen Youtube-Livestream und entwickle eine Lösung, mit der ich den Stream remote über einen Browser ausführen kann. Mein Plan ist, ein ASP.net Core Web-API-Projekt zu haben, das einen Hintergrunddienst ausführt, der, wenn ich die Streaming-Informationen an ihn sende, FFMpeg startet, um eine USB-Webcam zu streamen. Ich muss auch in der Lage sein, eine Taste zu drücken, um den Stream „stummzuschalten“, damit ein leeres Video mit einer Textüberlagerung (z. B. „Technische Schwierigkeiten“) angezeigt wird.

Meine bisherige Lösung besteht darin, zwei Instanzen von FFMpeg zu verwenden. Wenn ich den Modus wechsle, beende ich einen Prozess und starte den anderen. Ich habe es einigermaßen zum Laufen gebracht, aber wenn ich zwischen „Stummmodus“ und „Streamingmodus“ hin- und herschalte, scheint YouTube beim Ändern des Streams ins Stocken zu geraten. Ich vermute, das liegt daran, dass YouTube nicht erkennt, dass der Stummmodus beendet wurde, wenn ich vom Stummmodus zurück in den Streammodus wechsle. Außerdem zeigt der Stummmodus den Text wie gewünscht an, führt aber dazu, dass der YouTube-Player nicht mehr „live“ ist, sodass der Benutzer, wenn ich den normalen Stream wieder zum Laufen bringe, auf die Schaltfläche „Live“ klicken muss, um auf dem neuesten Stand zu sein.

Hier ist die Befehlszeile für beide Modi:

Stream-Modus:

ffmpeg.exe -f dshow -i video="<webcam name>" -f dshow -i audio="<microphone name>" -vcodec libx264 -pix_fmt yuv420p -preset veryfast -r 30 -g 60 -b:v 3500k -f flv rtmp://a.rtmp.youtube.com/live2/<stream key>

Stummmodus (blank.mp4 ist ein 3 Sekunden langes leeres Video):

ffmpeg.exe -stream_loop -1 -i ./FFMpeg/blankvid.mp4 -vf "drawtext=fontfile=C\\:/Windows/Fonts/Arial.ttf:text='Technical Difficulties':fontcolor=white:fontsize=60:box=1:[email protected]:boxborderw=5:x=(w-text_w)/2:y=(h-text_h)/2" -vcodec libx264 -pix_fmt yuv420p -preset veryfast -r 30 -g 60 -b:v 3500k -f flv -flvflags no_duration_filesize rtmp://a.rtmp.youtube.com/live2/<stream key>

Letzter Hinweis: Ich weiß, dass es eine Möglichkeit geben könnte, mit einem Farbfilter ein schwarzes Video zu erstellen, anstatt ein blankvid.mp4 zu haben. Wenn Sie auch wissen, wie Sie die Parameter dafür erhalten, wäre das sehr hilfreich.

Antwort1

Nach viel mehr Suchen und Ausprobieren scheint es nun zu funktionieren. Ich bin mir nicht sicher, ob alle Parameter notwendig sind, aber das Problem lag beim Befehl „Stumm“. Ich habe auch herausgefunden, wie ich den Farbfilter anstelle eines leeren Videos verwenden kann. Ich habe es schließlich geändert in

ffmpeg -re -stream_loop -1 -f lavfi -i "color=black:s=1280x720" -f lavfi -i anullsrc -vcodec libx264 -pix_fmt yuv420p -preset veryfast -r 30 -g 60 -b:v 3500k -vf "drawtext=fontfile=C\\:/Windows/Fonts/Arial.ttf:text='Technical Difficulties':fontcolor=white:fontsize=60:x=(w-text_w)/2:y=(h-text_h)/2" -f flv rtmp://a.rtmp.youtube.com/live2/<stream key>

verwandte Informationen