Tutorial · FFmpeg für Live-Video

FFmpeg-Streaming-Tutorial von einem Befehl zum Live-Kanal

Dieses FFmpeg-Streaming-Tutorial bringt Sie mit einem einzigen Befehl live: FFmpeg liest Ihre Datei, Kamera oder Ihren Bildschirm, kodiert sie zu H.264-Video und AAC-Audio und sendet sie per RTMP an Ihren Primcast-Kanal.

Sie finden hier den Befehl für jede Quellenart, die Encoder-Einstellungen für eine flüssige Wiedergabe bei Ihren Zuschauern und eine SRT-Variante für lange oder instabile Verbindungen.

ffmpeg · rtmp
ffmpeg -re -i input.mp4 \ -c:v libx264 -preset veryfast \ -b:v 2500k -maxrate 2500k -bufsize 5000k \ -pix_fmt yuv420p \ -force_key_frames "expr:gte(t,n_forced*2)" \ -sc_threshold 0 \ -c:a aac -b:a 128k -ar 44100 -ac 2 \ -f flv "rtmp://USERNAME:PASSWORD@HOST:1935/APP/livestream"

Ersetzen Sie die hervorgehobenen Wörter durch Ihre eigenen Werte. Schritt 02 erklärt jede Flagge.

01

Bevor Sie starten: FFmpeg und vier Werte aus Ihrem Panel

Sie benötigen FFmpeg auf dem Computer, der das Video sendet, und die Encoder-Einstellungen Ihres Kanals. Beides dauert nur ein paar Minuten.

FFmpeg installieren

Verwenden Sie den Paketmanager Ihres Systems und prüfen Sie anschließend, ob es läuft. Jede aktuelle Version funktioniert mit den Befehlen auf dieser Seite.

installieren
# Windowswinget install Gyan.FFmpeg# macOS (Homebrew)brew install ffmpeg# Debian oder Ubuntusudo apt install ffmpeg# prüfenffmpeg -version

Encoder-Einstellungen kopieren

Melden Sie sich an, öffnen Sie Ihr Videokonto und suchen Sie die Karte Live-Streaming. Die Encoder-Einstellungen listen alles auf, was FFmpeg benötigt:

Server
Sieht aus wie rtmp://HOST:1935/APP. Ihr Host- und Anwendungsname.
Stream-Name
Normalerweise livestream. Er steht am Ende der Adresse.
Benutzername
Ihr Publishing-Login.
Passwort
Klicken Sie auf Anzeigen, um es zu sehen, oder auf Neues Passwort, um es zu ersetzen.

Wenn Ihr Panel auch eine Adresse für den nächstgelegenen Server anzeigt, verwenden Sie diese als Server. Ihr Encoder verbindet sich dann mit unserem nächstgelegenen Standort (New York, Miami, San Francisco, Amsterdam oder Bukarest) und der Stream läuft über unser Netzwerk weiter zu Ihrem Kanal. Stream-Name, Benutzername und Passwort bleiben gleich.

02

Ihr erster FFmpeg-RTMP-Stream, Flagge für Flagge

Setzen Sie Benutzername und Passwort vor den Host, gefolgt von einem @, und fügen Sie den Stream-Namen nach der Anwendung hinzu. Der Rest des Befehls teilt FFmpeg mit, wie es kodieren soll.

rtmp-adresse
rtmp://USERNAME:PASSWORD@HOST:1935/APP/livestream

Behalten Sie die Anführungszeichen um die Adresse bei. Wenn Ihr Passwort @, : oder / enthält, schreiben Sie diese als %40, %3A und %2F, oder klicken Sie im Panel auf Neues Passwort, um eines ohne diese Zeichen zu erhalten.

Was jede FFmpeg-Flagge im Befehl bewirkt
FlaggeWas sie bewirkt
-reLiest eine Datei in ihrer echten Abspielgeschwindigkeit. Ohne diese Flagge sendet FFmpeg eine Datei so schnell wie möglich und der Stream bricht ab. Lassen Sie sie bei Kameras und Aufnahmegeräten weg, die bereits in Echtzeit laufen.
-i input.mp4Ihre Eingabe: eine Datei, ein Gerät oder ein anderer Stream. Schritt 03 hat für jede Quelle einen Befehl.
-c:v libx264Kodiert Video als H.264, das jeder Player und Browser anzeigen kann.
-preset veryfastTauscht etwas Qualität gegen Geschwindigkeit, damit der Computer in Echtzeit mithalten kann. Versuchen Sie faster oder medium, wenn Sie CPU-Leistung übrig haben.
-b:v 2500k -maxrate 2500k -bufsize 5000kHält das Video nahe bei konstanten 2.500 kbps, damit der Stream nie mehr Upload verlangt, als Sie haben. Schritt 04 enthält Werte für jede Auflösung.
-pix_fmt yuv420pDas Farbformat, das Handys, Fernseher und Browser erwarten.
-force_key_frames "expr:gte(t,n_forced*2)"Ein Keyframe alle 2 Sekunden, unabhängig von der Bildrate. Die Wiedergabe wird an Keyframes in Segmente unterteilt, daher ist diese Einstellung am wichtigsten.
-sc_threshold 0Verhindert zusätzliche Keyframes bei Szenenwechseln, damit der 2-Sekunden-Rhythmus konstant bleibt.
-c:a aac -b:a 128k -ar 44100 -ac 2AAC-Stereo-Audio mit 128 kbps und 44,1 kHz. Der eingebaute AAC-Encoder von FFmpeg benötigt keine zusätzliche Flagge.
-f flvVerpackt den Stream in FLV, das Format, das RTMP transportiert.

Ältere Anleitungen, einschließlich der ersten Version dieser Seite, fügen -strict experimental für AAC hinzu. FFmpeg hat das experimentelle Label von seinem AAC-Encoder in Version 3.0 entfernt, daher können Sie es weglassen.

03

Wählen Sie Ihre Quelle: Datei, Webcam, Bildschirm oder IP-Kamera

Nur der Eingabeteil ändert sich. In jedem Beispiel steht [encoding] für die Video- und Audio-Flaggen aus Schritt 02 und RTMP_ADDRESS für Ihre Adresse in Anführungszeichen.

Videodatei mit FFmpeg streamen

Fügen Sie -stream_loop -1 vor der Eingabe hinzu, um sie in Dauerschleife abzuspielen, bis Sie FFmpeg stoppen.

datei
ffmpeg -re -stream_loop -1 -i video.mp4 \ [encoding] -f flv "RTMP_ADDRESS"

Webcam unter Windows

Listen Sie zuerst Ihre Geräte auf und verwenden Sie dann die exakten Namen, die ausgegeben werden.

windows · dshow
ffmpeg -list_devices true -f dshow -i dummy
ffmpeg -f dshow -rtbufsize 256M ^ -i video="Your Camera":audio="Your Microphone" ^ [encoding] -f flv "RTMP_ADDRESS"

Webcam unter macOS

Die Liste zeigt jede Kamera und jedes Mikrofon mit einer Nummer. "0:0" bedeutet Kamera 0 und Mikrofon 0.

macos · avfoundation
ffmpeg -f avfoundation -list_devices true -i ""
ffmpeg -f avfoundation -framerate 30 \ -video_size 1280x720 -i "0:0" \ [encoding] -f flv "RTMP_ADDRESS"

Webcam unter Linux

Video vom Kamera-Gerät, Ton vom Standard-Eingang Ihres Desktops.

linux · v4l2
ffmpeg -f v4l2 -framerate 30 -video_size 1280x720 \ -i /dev/video0 -f pulse -i default \ [encoding] -f flv "RTMP_ADDRESS"

Ihr Bildschirm unter Windows

Nimmt den gesamten Desktop mit 30 Bildern pro Sekunde auf. Fügen Sie ein Mikrofon mit einem zweiten dshow-Eingang hinzu, wenn Sie Ton möchten.

windows · gdigrab
ffmpeg -f gdigrab -framerate 30 -i desktop ^ [encoding] -f flv "RTMP_ADDRESS"

IP-Kamera über RTSP

Wenn die Kamera bereits H.264 mit einem 2-Sekunden-Keyframe-Intervall sendet (in ihrem eigenen Menü eingestellt), kopieren Sie das Video unverändert und kodieren nur den Ton. Andernfalls verwenden Sie die vollständigen Kodierungs-Flaggen.

rtsp-kamera
ffmpeg -rtsp_transport tcp \ -i "rtsp://CAM_USER:CAM_PASS@192.168.1.64:554/stream1" \ -c:v copy -c:a aac -b:a 128k \ -f flv "RTMP_ADDRESS"

Kein Mikrofon an der Kamera? Ersetzen Sie die Audio-Flaggen durch -an.

Die Beispiele beenden Zeilen mit \ (macOS und Linux) oder ^ (Windows-Eingabeaufforderung). Setzen Sie in PowerShell oder im Zweifelsfall den gesamten Befehl auf eine Zeile.

04

FFmpeg-Encoder-Einstellungen, die live standhalten

Wählen Sie eine Zeile, die zu Ihrer Upload-Geschwindigkeit passt. Lassen Sie ein Drittel Ihres Uploads frei: Wenn ein Geschwindigkeitstest 6 Mbps anzeigt, senden Sie nicht mehr als etwa 4.

Empfohlene FFmpeg-Video- und Audio-Bitraten nach Auflösung
BildZum Befehl hinzufügenVideoAudioBenötigter Upload
1080p, 30 fps-vf scale=-2:1080 -r 304500k128k7 Mbps
720p, 30 fps-vf scale=-2:720 -r 302500k128k4 Mbps
480p, 30 fps-vf scale=-2:480 -r 301200k96k2 Mbps

Setzen Sie -b:v und -maxrate auf den Video-Wert und -bufsize auf das Doppelte davon. Der Befehl in Schritt 02 ist die 720p-Zeile. Die kostenpflichtigen Live-Video-Tarife nehmen bis zu 5 Mbps entgegen, genug für die 1080p-Zeile.

Drei Regeln, die das meiste Puffern verhindern

  1. Halten Sie Keyframes auf festen 2 Sekunden. Ein langes oder driftendes Intervall zeigt sich bei Ihren Zuschauern als Hängenbleiben, und von Ihrer Seite sieht es wie ein Serverfehler aus.
  2. Halten Sie die Bitrate mit -maxrate und -bufsize stabil, damit eine belebte Szene nicht über Ihren Upload hinaus ausschlagen kann.
  3. Beobachten Sie den Wert speed= in der Statuszeile von FFmpeg. Er sollte bei 1x liegen. Darunter kann Ihr Computer nicht in Echtzeit encodieren.

Lassen Sie Ihre GPU encodieren

Wenn speed= unter 1x fällt, ersetzen Sie -c:v libx264 -preset veryfast durch den Hardware-Encoder, den Ihr Computer hat. Die CPU ist dann für alles andere frei.

NVIDIA-GPU
-c:v h264_nvenc -preset p4
Intel-Grafik
-c:v h264_qsv
Mac
-c:v h264_videotoolbox

Führen Sie ffmpeg -encoders aus, um zu sehen, welche Ihr Build enthält.

05

Senden Sie stattdessen einen FFmpeg-SRT-Stream

SRT hält einen Stream über lange oder verlustbehaftete Verbindungen stabil, etwa ein Veranstaltungs-WLAN, einen mobilen Uplink oder einen Feed von einem anderen Kontinent, wo RTMP oft ins Stocken gerät. Es ist in den Pro- und Platinum-Tarifen unseres Video-CDN enthalten.

Ihre Live-Streaming-Karte hat dann einen Abschnitt SRT-Ingest mit Ihrem eigenen Port und Ihrer Passphrase. Kopieren Sie die One-line URL und verwenden Sie sie als Ausgabe, mit MPEG-TS anstelle von FLV. Die Encoding-Flags bleiben gleich.

Ein SRT-Stream läuft unter seinem eigenen Namen, verwenden Sie also den Wiedergabe-Link, der daneben unter Plays at angezeigt wird.

ffmpeg · srt
ffmpeg -re -i input.mp4 \ [encoding] \ -f mpegts \ "srt://HOST:PORT?passphrase=PASSPHRASE&pbkeylen=16"

Ihr FFmpeg-Build benötigt SRT-Unterstützung. Prüfen Sie mit ffmpeg -protocols und suchen Sie in der Ausgabeliste nach srt.

06

Prüfen Sie, ob Sie live sind, und beheben Sie, was nicht stimmt

  1. Starten Sie FFmpeg und lassen Sie das Fenster offen. Eine Statuszeile, die weiter frame= und time= zählt, bedeutet, dass gesendet wird.
  2. Öffnen Sie die Live-Streaming-Karte. Innerhalb von 15 Sekunden sollte sie live anzeigen und zeigen, was Ihr Encoder sendet, nahe an Ihrer Bitrate.
  3. Kopieren Sie den Wiedergabe-Link aus demselben Panel und öffnen Sie ihn in VLC (Medien, Netzwerkstream öffnen) oder führen Sie ffplay "PLAYBACK_LINK" aus. Das Panel gibt Ihnen auch einen Einbettungscode für Ihre eigene Website.
Häufige FFmpeg-Streaming-Probleme und ihre Lösungen
Was Sie sehenWas zu tun ist
FFmpeg stoppt sofort mit einem Verbindungs- oder E/A-FehlerPrüfen Sie Host- und Anwendungsnamen Buchstabe für Buchstabe. Einige Büro- und Hotelnetzwerke blockieren Port 1935: Versuchen Sie eine andere Verbindung.
Es verbindet, dann verweigert der Server den StreamBenutzername oder Passwort ist falsch, oder das Passwort enthält ein Zeichen, das encodiert werden muss. Klicken Sie auf Neues Passwort, aktualisieren Sie den Befehl und versuchen Sie es erneut.
speed= bleibt bei einer Datei deutlich über 1xSie haben -re ausgelassen. Fügen Sie es vor -i hinzu.
speed= bleibt unter 1xVerwenden Sie ein schnelleres Preset (superfast), eine niedrigere Zeile aus Schritt 04 oder den Encoder Ihrer GPU.
FFmpeg sieht gut aus, aber Zuschauer puffernPrüfen Sie die Keyframe-Flags und senken Sie dann die Bitrate. Ihr Upload ist zu dieser Stunde möglicherweise langsamer, als Sie denken.
Der Stream endet, wenn die Datei endetFügen Sie -stream_loop -1 vor -i hinzu.
07

Fragen zum FFmpeg-Streaming

Wie streame ich mit FFmpeg zu einem RTMP-Server?

Kodieren Sie in H.264 und AAC, verpacken Sie die Ausgabe mit -f flv in FLV und übergeben Sie FFmpeg die RTMP-Adresse als letztes Argument. Bei einem Primcast-Kanal setzt sich die Adresse aus Server, Anwendung und Stream-Name zusammen, davor stehen Benutzername und Passwort vor dem Host: rtmp://USERNAME:PASSWORD@HOST:1935/APP/livestream.

Wo finde ich meine Serveradresse, meinen Benutzernamen und mein Passwort?

In Ihrem Konto auf der Karte „Live-Streaming“ Ihres Videokontos unter „Encoder-Einstellungen“. Das Passwort bleibt verborgen, bis Sie auf „Anzeigen“ klicken, und „Neues Passwort“ erzeugt ein frisches. Der aktuell laufende Stream läuft weiter, und das neue Passwort gilt für die nächste Verbindung.

Brauche ich für AAC-Audio weiterhin -strict experimental?

Nein. Der eigene AAC-Encoder von FFmpeg hat sein experimentelles Etikett mit FFmpeg 3.0 aus dem Jahr 2016 verloren. Schlichtes -c:a aac funktioniert in jedem aktuellen Build, Sie können das Flag also aus älteren Befehlen streichen.

Welches Keyframe-Intervall sollte FFmpeg beim Live-Streaming verwenden?

Ein festes Intervall von 2 Sekunden. Wir schneiden Wiedergabesegmente an Keyframes, ein längeres oder driftendes Intervall führt daher bei Ihren Zuschauern zu Hängern. Verwenden Sie -force_key_frames "expr:gte(t,n_forced*2)" mit -sc_threshold 0 oder setzen Sie -g auf das Doppelte Ihrer Bildrate.

Mit welcher Bitrate sollte ich streamen?

Etwa 2.500 kbps für 720p und 4.500 kbps für 1080p bei 30 Bildern pro Sekunde, plus 128 kbps Audio. Halten Sie die Gesamtbitrate bei zwei Dritteln Ihrer gemessenen Upload-Geschwindigkeit, damit ein kurzer Einbruch auf Ihrer Leitung den Stream nicht stoppt.

Wie lasse ich eine Videodatei mit FFmpeg rund um die Uhr in Schleife laufen?

Setzen Sie -re -stream_loop -1 vor -i, und FFmpeg spielt die Datei so lange ab, bis Sie den Vorgang beenden. Das hält allerdings einen Rechner den ganzen Tag beschäftigt. Die kostenpflichtigen Video-CDN-Tarife enthalten 24/7-TV-Senderkanäle, die Ihre Videos stattdessen von unserer Seite aus abspielen.

Kann FFmpeg den Stream auf meiner GPU kodieren?

Ja. Verwenden Sie h264_nvenc auf einer NVIDIA-GPU, h264_qsv auf Intel-Grafik oder h264_videotoolbox auf einem Mac – jeweils anstelle von libx264. Die Flags für Keyframes und Bitrate bleiben unverändert.

Kann ich SRT statt RTMP senden?

Ja, in den Video-CDN-Tarifen Pro und Platinum. Ihr Panel stellt Ihnen einen SRT-Port und eine Passphrase bereit. Verwenden Sie -f mpegts und die einzeilige srt://-URL aus dem Panel als Ausgabe.

08

Lieber ein Fenster als eine Befehlszeile?

Derselbe Kanal funktioniert mit jedem Encoder, der RTMP spricht. Diese Anleitungen verwenden dieselben vier Werte.

Brauchen Sie einen Kanal zum Streamen?

Eröffnen Sie einen Videokanal, fügen Sie Ihre Werte in den Befehl ein und beurteilen Sie das Bild selbst. Hängen Sie an einem Flag fest? Unser Chat antwortet in Sekunden und kann sich Ihren Kanal ansehen, während Sie warten – und ein Mensch übernimmt, sobald Sie es wünschen.