Tutorial · FFmpeg pentru video live
Tutorial de streaming FFmpeg de la o comandă la un canal live
Acest tutorial de streaming FFmpeg te pune pe live cu o singură comandă: FFmpeg citește fișierul, camera sau ecranul tău, îl encodează în video H.264 și audio AAC și îl trimite prin RTMP către canalul tău Primcast.
Vei găsi comanda pentru fiecare tip de sursă, setările de encoder care mențin redarea fluidă pentru spectatorii tăi și o versiune SRT pentru conexiuni lungi sau instabile.
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"
Înlocuiește cuvintele evidențiate cu propriile tale valori. Pasul 02 explică fiecare flag.
Înainte să începi: FFmpeg și patru valori din panoul tău
Ai nevoie de FFmpeg pe computerul care trimite video și de setările de encoder ale canalului tău. Ambele durează câteva minute.
Instalează FFmpeg
Folosește managerul de pachete al sistemului tău, apoi verifică dacă rulează. Orice versiune curentă funcționează cu comenzile de pe această pagină.
# Windowswinget install Gyan.FFmpeg# macOS (Homebrew)brew install ffmpeg# Debian sau Ubuntusudo apt install ffmpeg# verifică-lffmpeg -version
Copiază setările de encoder
Autentifică-te, deschide contul tău video și găsește cardul Live streaming. Lista sa Setări encoder conține tot ce are nevoie FFmpeg:
- Server
- Arată ca
rtmp://HOST:1935/APP. Gazda ta și numele aplicației. - Nume stream
- De obicei
livestream. Se pune la sfârșitul adresei. - Nume utilizator
- Datele tale de autentificare pentru publicare.
- Parolă
- Dă clic pe Afișează pentru a o vedea sau pe Parolă nouă pentru a o înlocui.
Dacă panoul tău afișează și o adresă Cel mai apropiat server, folosește-o pe aceea ca server. Encoderul tău se conectează atunci la cea mai apropiată locație a noastră (New York, Miami, San Francisco, Amsterdam sau București), iar streamul călătorește mai departe către canalul tău prin rețeaua noastră. Numele streamului, numele de utilizator și parola rămân aceleași.
Primul tău stream RTMP cu FFmpeg, flag cu flag
Pune numele de utilizator și parola în fața gazdei, urmate de un @, și adaugă numele streamului după aplicație. Restul comenzii îi spune lui FFmpeg cum să encodeze.
rtmp://USERNAME:PASSWORD@HOST:1935/APP/livestream
Păstrează ghilimelele în jurul adresei. Dacă parola ta conține @, : sau /, scrie-le ca %40, %3A și %2F sau dă clic pe Parolă nouă în panou pentru una fără ele.
| Flag | Ce face |
|---|---|
-re | Citește un fișier la viteza sa reală de redare. Fără el, FFmpeg trimite un fișier cât de repede poate, iar streamul se întrerupe. Omite-l pentru camere și dispozitive de captură, care rulează deja în timp real. |
-i input.mp4 | Intrarea ta: un fișier, un dispozitiv sau alt stream. Pasul 03 are câte una pentru fiecare. |
-c:v libx264 | Encodează video ca H.264, pe care orice player și browser îl poate afișa. |
-preset veryfast | Schimbă puțină calitate pentru viteză, astfel încât computerul să țină pasul în timp real. Încearcă faster sau medium dacă ai CPU de rezervă. |
-b:v 2500k -maxrate 2500k -bufsize 5000k | Menține video aproape de un 2.500 kbps constant, astfel încât streamul să nu ceară niciodată mai mult upload decât ai. Pasul 04 are valori pentru fiecare rezoluție. |
-pix_fmt yuv420p | Formatul de culoare pe care îl așteaptă telefoanele, televizoarele și browserele. |
-force_key_frames "expr:gte(t,n_forced*2)" | Un keyframe la fiecare 2 secunde, indiferent de rata de cadre. Redarea este împărțită în segmente pe keyframes, așa că acesta contează cel mai mult. |
-sc_threshold 0 | Oprește keyframe-urile suplimentare la schimbările de scenă, astfel încât ritmul de 2 secunde să rămână fix. |
-c:a aac -b:a 128k -ar 44100 -ac 2 | Audio stereo AAC la 128 kbps și 44,1 kHz. Encoderul AAC încorporat al FFmpeg nu are nevoie de niciun flag suplimentar. |
-f flv | Împachetează streamul în FLV, formatul pe care îl transportă RTMP. |
Ghidurile mai vechi, inclusiv prima versiune a acestei pagini, adaugă -strict experimental pentru AAC. FFmpeg a eliminat eticheta experimentală de la encoderul său AAC în versiunea 3.0, așa că o poți omite.
Alege-ți sursa: fișier, webcam, ecran sau cameră IP
Doar partea de intrare se schimbă. În fiecare exemplu, [encoding] reprezintă flag-urile video și audio de la pasul 02, iar RTMP_ADDRESS adresa ta între ghilimele.
Transmite un fișier video cu FFmpeg
Adaugă -stream_loop -1 înainte de intrare pentru a-l reda în buclă până când oprești FFmpeg.
ffmpeg -re -stream_loop -1 -i video.mp4 \ [encoding] -f flv "RTMP_ADDRESS"
Webcam pe Windows
Listează mai întâi dispozitivele, apoi folosește numele exacte pe care le afișează.
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 pe macOS
Lista afișează fiecare cameră și microfon cu un număr. "0:0" înseamnă camera 0 și microfonul 0.
ffmpeg -f avfoundation -list_devices true -i "" ffmpeg -f avfoundation -framerate 30 \ -video_size 1280x720 -i "0:0" \ [encoding] -f flv "RTMP_ADDRESS"
Webcam pe Linux
Video de la dispozitivul camerei, sunet de la intrarea implicită a desktopului tău.
ffmpeg -f v4l2 -framerate 30 -video_size 1280x720 \ -i /dev/video0 -f pulse -i default \ [encoding] -f flv "RTMP_ADDRESS"
Ecranul tău pe Windows
Capturează întregul desktop la 30 de cadre pe secundă. Adaugă un microfon cu o a doua intrare dshow dacă vrei sunet.
ffmpeg -f gdigrab -framerate 30 -i desktop ^ [encoding] -f flv "RTMP_ADDRESS"
Cameră IP prin RTSP
Dacă camera trimite deja H.264 cu un interval de keyframe de 2 secunde (setat în propriul său meniu), copiază video așa cum este și encodează doar sunetul. Altfel, folosește flag-urile complete de codare.
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"
Camera nu are microfon? Înlocuiește flag-urile audio cu -an.
Exemplele termină liniile cu \ (macOS și Linux) sau ^ (Command Prompt pe Windows). În PowerShell, sau dacă ai îndoieli, pune întreaga comandă pe o singură linie.
Setări encoder FFmpeg care rezistă în direct
Alege un rând care se potrivește vitezei tale de upload. Lasă o treime din upload liberă: dacă un test de viteză arată 6 Mbps, trimite cel mult aproximativ 4.
| Imagine | Adaugă la comandă | Video | Audio | Upload necesar |
|---|---|---|---|---|
| 1080p, 30 fps | -vf scale=-2:1080 -r 30 | 4500k | 128k | 7 Mbps |
| 720p, 30 fps | -vf scale=-2:720 -r 30 | 2500k | 128k | 4 Mbps |
| 480p, 30 fps | -vf scale=-2:480 -r 30 | 1200k | 96k | 2 Mbps |
Setează -b:v și -maxrate la valoarea video și -bufsize la dublul acesteia. Comanda din pasul 02 este rândul 720p. Planurile plătite de live video acceptă până la 5 Mbps la intrare, suficient pentru rândul 1080p.
Trei reguli care previn majoritatea blocajelor de buffering
- Menține cadrele cheie la un interval fix de 2 secunde. Un interval lung sau fluctuant apare ca blocaj pentru spectatorii tăi, iar din partea ta arată ca o defecțiune de server.
- Menține rata de biți constantă cu
-maxrateși-bufsize, astfel încât o scenă aglomerată să nu depășească uploadul tău. - Urmărește valoarea
speed=din linia de stare a FFmpeg. Ar trebui să stea la 1x. Sub aceasta, computerul tău nu poate codifica în timp real.
Lasă GPU-ul tău să facă codificarea
Dacă speed= scade sub 1x, înlocuiește -c:v libx264 -preset veryfast cu encoderul hardware pe care îl are computerul tău. CPU-ul rămâne apoi liber pentru orice altceva.
- GPU NVIDIA
-c:v h264_nvenc -preset p4- Grafică Intel
-c:v h264_qsv- Mac
-c:v h264_videotoolbox
Rulează ffmpeg -encoders pentru a vedea care sunt incluse în versiunea ta.
Trimite în schimb un flux FFmpeg SRT
SRT menține un flux stabil pe legături lungi sau cu pierderi, cum ar fi Wi-Fi-ul unei locații, o conexiune mobilă de upload sau un feed de pe alt continent, unde RTMP tinde să se blocheze. Este inclus în planurile Pro și Platinum ale CDN-ului nostru video.
Cardul tău de Live streaming are apoi o secțiune SRT ingest cu portul și fraza de acces proprii. Copiază URL-ul pe o singură linie și folosește-l ca ieșire, cu MPEG-TS în loc de FLV. Indicatorii de codificare rămân aceiași.
Un flux SRT se redă sub propriul nume, așa că folosește linkul de redare afișat lângă el, sub Se redă la.
ffmpeg -re -i input.mp4 \ [encoding] \ -f mpegts \ "srt://HOST:PORT?passphrase=PASSPHRASE&pbkeylen=16"
Versiunea ta de FFmpeg trebuie să aibă suport SRT. Verifică cu ffmpeg -protocols și caută srt în lista de ieșire.
Verifică dacă ești live și repară ce nu merge
- Pornește FFmpeg și lasă fereastra deschisă. O linie de stare care continuă să numere
frame=șitime=înseamnă că trimite. - Deschide cardul de Live streaming. În 15 secunde ar trebui să spună live și să arate ce trimite encoderul tău, aproape de rata ta de biți.
- Copiază linkul de redare din același panou și deschide-l în VLC (Media, Deschide flux de rețea) sau rulează
ffplay "PLAYBACK_LINK". Panoul îți oferă și un cod de embed pentru propriul site.
| Ce vezi | Ce să faci |
|---|---|
| FFmpeg se oprește imediat cu o eroare de conexiune sau I/O | Verifică gazda și numele aplicației literă cu literă. Unele rețele de birou și hotel blochează portul 1935: încearcă altă conexiune. |
| Se conectează, apoi serverul refuză fluxul | Numele de utilizator sau parola este greșită, sau parola are un caracter care necesită codificare. Dă clic pe Parolă nouă, actualizează comanda și încearcă din nou. |
speed= rămâne mult peste 1x pe un fișier | Ai omis -re. Adaugă-l înainte de -i. |
speed= rămâne sub 1x | Folosește un preset mai rapid (superfast), un rând mai jos din pasul 04 sau encoderul GPU-ului tău. |
| FFmpeg arată bine, dar spectatorii au buffering | Verifică indicatorii cadrelor cheie, apoi scade rata de biți. Uploadul tău poate fi mai lent decât crezi la ora aceea. |
| Fluxul se termină când se termină fișierul | Adaugă -stream_loop -1 înainte de -i. |
Întrebări despre streaming cu FFmpeg
Cum transmit stream către un server RTMP cu FFmpeg?
Codifică în H.264 și AAC, împachetează rezultatul în FLV cu -f flv și dă-i lui FFmpeg adresa RTMP ca ultim argument. Pentru un canal Primcast, adresa este serverul, aplicația și numele streamului tău, cu numele de utilizator și parola în fața gazdei: rtmp://USERNAME:PASSWORD@HOST:1935/APP/livestream.
Unde găsesc adresa serverului, numele de utilizator și parola?
În contul tău, pe cardul Live streaming al contului video, la setările Encoder. Parola rămâne ascunsă până apeși pe Afișează, iar Parolă nouă îți generează una proaspătă. Streamul care rulează deja continuă, iar noua parolă se aplică la următoarea conexiune.
Mai am nevoie de -strict experimental pentru audio AAC?
Nu. Codificatorul AAC propriu al FFmpeg a pierdut eticheta experimentală în FFmpeg 3.0, lansat în 2016. Simplu -c:a aac funcționează pe orice build actual, așa că poți elimina flagul din comenzile mai vechi.
Ce interval de cadre cheie ar trebui să folosească FFmpeg pentru streaming live?
Un interval fix de 2 secunde. Tăiem segmentele de redare pe cadre cheie, așa că un interval mai lung sau variabil se transformă în blocaje pentru spectatorii tăi. Folosește -force_key_frames "expr:gte(t,n_forced*2)" cu -sc_threshold 0, sau -g setat la dublul ratei de cadre.
La ce bitrate ar trebui să transmit?
Aproximativ 2.500 kbps pentru 720p și 4.500 kbps pentru 1080p la 30 de cadre pe secundă, plus 128 kbps pentru audio. Menține totalul la două treimi din viteza de upload măsurată, ca un moment lent pe linia ta să nu oprească streamul.
Cum rulez în buclă un fișier video non-stop cu FFmpeg?
Pune -re -stream_loop -1 înainte de -i și FFmpeg reia fișierul până îl oprești. Asta ține însă un computer ocupat toată ziua. Planurile plătite de CDN video includ canale TV 24/7 care redau videoclipurile tale de pe partea noastră.
Poate FFmpeg să codifice streamul pe GPU-ul meu?
Da. Folosește h264_nvenc pe un GPU NVIDIA, h264_qsv pe grafica Intel sau h264_videotoolbox pe un Mac, în loc de libx264. Flagurile pentru cadre cheie și bitrate rămân aceleași.
Pot trimite SRT în loc de RTMP?
Da, pe planurile video CDN Pro și Platinum. Panoul tău îți oferă un port SRT și o frază de acces. Folosește -f mpegts și URL-ul srt:// pe o singură linie din panou ca ieșire.
Preferi o fereastră în locul liniei de comandă?
Același canal funcționează cu orice codificator care vorbește RTMP. Aceste tutoriale folosesc aceleași patru valori.
Ai nevoie de un canal către care să transmiți?
Deschide un canal video, inserează valorile tale în comandă și judecă singur imaginea. Te-ai blocat la un flag? Chatul nostru răspunde în câteva secunde și poate să se uite la canalul tău cât aștepți, iar o persoană preia oricând ceri.