Poradnik · FFmpeg do wideo na żywo
Poradnik streamingu FFmpeg od jednego polecenia do kanału na żywo
Ten poradnik streamingu FFmpeg uruchomi Twoją transmisję jednym poleceniem: FFmpeg odczyta plik, kamerę lub ekran, zakoduje go do wideo H.264 i dźwięku AAC, a następnie wyśle przez RTMP na Twój kanał Primcast.
Znajdziesz tu polecenie dla każdego rodzaju źródła, ustawienia kodera, które zapewniają płynne odtwarzanie u widzów, oraz wersję SRT na długie lub niestabilne połączenia.
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"
Zamień wyróżnione słowa na własne wartości. Krok 02 wyjaśnia każdą flagę.
Zanim zaczniesz: FFmpeg i cztery wartości z panelu
Potrzebujesz FFmpeg na komputerze wysyłającym wideo oraz ustawień kodera swojego kanału. Obie rzeczy zajmą kilka minut.
Zainstaluj FFmpeg
Użyj menedżera pakietów swojego systemu, a następnie sprawdź, czy działa. Każde aktualne wydanie współpracuje z poleceniami na tej stronie.
# Windowswinget install Gyan.FFmpeg# macOS (Homebrew)brew install ffmpeg# Debian lub Ubuntusudo apt install ffmpeg# sprawdźffmpeg -version
Skopiuj ustawienia kodera
Zaloguj się, otwórz swoje konto wideo i znajdź kartę Live streaming. Jej lista Encoder settings zawiera wszystko, czego potrzebuje FFmpeg:
- Serwer
- Wygląda jak
rtmp://HOST:1935/APP. Nazwa Twojego hosta i aplikacji. - Nazwa strumienia
- Zwykle
livestream. Trafia na koniec adresu. - Nazwa użytkownika
- Twój login do publikowania.
- Hasło
- Kliknij Pokaż, aby je zobaczyć, lub Nowe hasło, aby je zastąpić.
Jeśli panel pokazuje również adres Nearest server, użyj go jako serwera. Twój koder połączy się wtedy z naszą najbliższą lokalizacją (Nowy Jork, Miami, San Francisco, Amsterdam lub Bukareszt), a strumień dotrze do Twojego kanału przez naszą sieć. Nazwa strumienia, nazwa użytkownika i hasło pozostają bez zmian.
Twój pierwszy strumień RTMP w FFmpeg, flaga po fladze
Umieść nazwę użytkownika i hasło przed hostem, oddziel je znakiem @, a po aplikacji dodaj nazwę strumienia. Reszta polecenia mówi FFmpeg, jak kodować.
rtmp://USERNAME:PASSWORD@HOST:1935/APP/livestream
Zachowaj cudzysłowy wokół adresu. Jeśli hasło zawiera @, : lub /, zapisz je jako %40, %3A i %2F albo kliknij Nowe hasło w panelu, aby otrzymać hasło bez tych znaków.
| Flaga | Działanie |
|---|---|
-re | Odczyta plik z jego rzeczywistą prędkością odtwarzania. Bez tego FFmpeg wysyła plik tak szybko, jak potrafi, i strumień się rwie. Pomiń ją w przypadku kamer i urządzeń przechwytujących, które już działają w czasie rzeczywistym. |
-i input.mp4 | Twoje wejście: plik, urządzenie lub inny strumień. Krok 03 zawiera po jednym dla każdego. |
-c:v libx264 | Koduje wideo jako H.264, które potrafi wyświetlić każdy odtwarzacz i przeglądarka. |
-preset veryfast | Poświęca odrobinę jakości na rzecz szybkości, aby komputer nadążał w czasie rzeczywistym. Wypróbuj faster lub medium, jeśli masz zapas mocy CPU. |
-b:v 2500k -maxrate 2500k -bufsize 5000k | Utrzymuje wideo blisko stabilnych 2500 kbps, dzięki czemu strumień nigdy nie żąda większego uploadu, niż masz. Krok 04 zawiera wartości dla każdej rozdzielczości. |
-pix_fmt yuv420p | Format kolorów oczekiwany przez telefony, telewizory i przeglądarki. |
-force_key_frames "expr:gte(t,n_forced*2)" | Kluczowa klatka co 2 sekundy, niezależnie od liczby klatek na sekundę. Odtwarzanie jest dzielone na segmenty na kluczowych klatkach, więc ta flaga ma największe znaczenie. |
-sc_threshold 0 | Zatrzymuje dodatkowe kluczowe klatki przy zmianach scen, dzięki czemu rytm 2 sekund pozostaje stały. |
-c:a aac -b:a 128k -ar 44100 -ac 2 | Dźwięk stereo AAC przy 128 kbps i 44,1 kHz. Wbudowany koder AAC w FFmpeg nie wymaga dodatkowej flagi. |
-f flv | Opakowuje strumień w FLV, format przenoszony przez RTMP. |
Starsze poradniki, w tym pierwsza wersja tej strony, dodają -strict experimental dla AAC. FFmpeg usunął etykietę eksperymentalną ze swojego kodera AAC w wersji 3.0, więc możesz ją pominąć.
Wybierz źródło: plik, kamera internetowa, ekran lub kamera IP
Zmienia się tylko część wejściowa. W każdym przykładzie [encoding] oznacza flagi wideo i audio z kroku 02, a RTMP_ADDRESS Twój adres w cudzysłowie.
Streamuj plik wideo za pomocą FFmpeg
Dodaj -stream_loop -1 przed wejściem, aby odtwarzać go w pętli, dopóki nie zatrzymasz FFmpeg.
ffmpeg -re -stream_loop -1 -i video.mp4 \ [encoding] -f flv "RTMP_ADDRESS"
Kamera internetowa w Windows
Najpierw wyświetl listę urządzeń, a potem użyj dokładnych nazw, które wypisze.
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"
Kamera internetowa w macOS
Lista pokazuje każdą kamerę i mikrofon z numerem. "0:0" oznacza kamerę 0 i mikrofon 0.
ffmpeg -f avfoundation -list_devices true -i "" ffmpeg -f avfoundation -framerate 30 \ -video_size 1280x720 -i "0:0" \ [encoding] -f flv "RTMP_ADDRESS"
Kamera internetowa w Linux
Wideo z urządzenia kamery, dźwięk z domyślnego wejścia pulpitu.
ffmpeg -f v4l2 -framerate 30 -video_size 1280x720 \ -i /dev/video0 -f pulse -i default \ [encoding] -f flv "RTMP_ADDRESS"
Twój ekran w Windows
Przechwytuje cały pulpit przy 30 klatkach na sekundę. Dodaj mikrofon za pomocą drugiego wejścia dshow, jeśli chcesz dźwięk.
ffmpeg -f gdigrab -framerate 30 -i desktop ^ [encoding] -f flv "RTMP_ADDRESS"
Kamera IP przez RTSP
Jeśli kamera już wysyła H.264 z 2-sekundowym interwałem kluczowych klatek (ustawionym w jej własnym menu), skopiuj wideo bez zmian i zakoduj tylko dźwięk. W przeciwnym razie użyj pełnych flag kodowania.
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"
Kamera nie ma mikrofonu? Zastąp flagi audio przez -an.
Przykłady kończą linie znakiem \ (macOS i Linux) lub ^ (wiersz poleceń Windows). W PowerShellu lub w razie wątpliwości umieść całe polecenie w jednej linii.
Ustawienia kodera FFmpeg, które wytrzymują na żywo
Wybierz wiersz pasujący do prędkości wysyłania. Zostaw jedną trzecią łącza wolną: jeśli test prędkości pokazuje 6 Mbps, wysyłaj nie więcej niż około 4.
| Obraz | Dodaj do polecenia | Wideo | Audio | Wymagane wysyłanie |
|---|---|---|---|---|
| 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 |
Ustaw -b:v i -maxrate na wartość wideo, a -bufsize na dwukrotność tej wartości. Polecenie w kroku 02 to wiersz 720p. Płatne plany transmisji na żywo przyjmują do 5 Mbps na wejściu, co wystarcza dla wiersza 1080p.
Trzy zasady, które zapobiegają większości buforowania
- Utrzymuj klatki kluczowe w stałym odstępie 2 sekund. Długi lub zmienny odstęp objawia się u widzów jako zacięcia, a z twojej strony wygląda jak awaria serwera.
- Utrzymuj stałą przepływność za pomocą
-maxratei-bufsize, aby ruchliwa scena nie przekroczyła twojego łącza wysyłania. - Obserwuj wartość
speed=w wierszu statusu FFmpeg. Powinna wynosić 1x. Poniżej tego komputer nie koduje w czasie rzeczywistym.
Pozwól GPU kodować
Jeśli speed= spada poniżej 1x, zamień -c:v libx264 -preset veryfast na sprzętowy koder dostępny w twoim komputerze. Procesor pozostaje wtedy wolny dla pozostałych zadań.
- GPU NVIDIA
-c:v h264_nvenc -preset p4- Grafika Intel
-c:v h264_qsv- Mac
-c:v h264_videotoolbox
Uruchom ffmpeg -encoders, aby zobaczyć, które kodery zawiera twoja kompilacja.
Wyślij zamiast tego strumień FFmpeg SRT
SRT utrzymuje stabilny strumień na długich lub zawodnych łączach, takich jak Wi-Fi w obiekcie, mobilne łącze wysyłania lub transmisja z innego kontynentu, gdzie RTMP często się zacina. Jest dostępny w planach Pro i Platinum naszego wideo CDN.
Twoja karta transmisji na żywo ma wtedy sekcję SRT ingest z własnym portem i hasłem. Skopiuj jej One-line URL i użyj go jako wyjścia, z MPEG-TS zamiast FLV. Flagi kodowania pozostają bez zmian.
Strumień SRT odtwarza się pod własną nazwą, więc użyj linku do odtwarzania widocznego obok, w sekcji Plays at.
ffmpeg -re -i input.mp4 \ [encoding] \ -f mpegts \ "srt://HOST:PORT?passphrase=PASSPHRASE&pbkeylen=16"
Twoja kompilacja FFmpeg musi obsługiwać SRT. Sprawdź za pomocą ffmpeg -protocols i poszukaj srt na liście wyjściowej.
Sprawdź, czy nadajesz na żywo, i napraw to, co nie działa
- Uruchom FFmpeg i pozostaw okno otwarte. Wiersz statusu, który stale zwiększa
frame=itime=, oznacza, że trwa wysyłanie. - Otwórz kartę transmisji na żywo. W ciągu 15 sekund powinna pokazać status na żywo i wyświetlić to, co wysyła twój koder, zbliżone do twojej przepływności.
- Skopiuj link do odtwarzania z tego samego panelu i otwórz go w VLC (Media, Otwórz strumień sieciowy) lub uruchom
ffplay "PLAYBACK_LINK". Panel daje też kod osadzenia na twoją własną stronę.
| Co widzisz | Co zrobić |
|---|---|
| FFmpeg natychmiast się zatrzymuje z błędem połączenia lub wejścia/wyjścia | Sprawdź host i nazwę aplikacji litera po literze. Niektóre sieci biurowe i hotelowe blokują port 1935: spróbuj innego połączenia. |
| Łączy się, a potem serwer odrzuca strumień | Nazwa użytkownika lub hasło są błędne albo hasło zawiera znak wymagający kodowania. Kliknij Nowe hasło, zaktualizuj polecenie i spróbuj ponownie. |
speed= utrzymuje się znacznie powyżej 1x na pliku | Pominąłeś -re. Dodaj je przed -i. |
speed= utrzymuje się poniżej 1x | Użyj szybszego presetu (superfast), niższego wiersza z kroku 04 lub kodera GPU. |
| FFmpeg wygląda dobrze, ale widzowie buforują | Sprawdź flagi klatek kluczowych, a następnie obniż przepływność. Twoje łącze wysyłania może być o tej porze wolniejsze, niż myślisz. |
| Strumień kończy się, gdy kończy się plik | Dodaj -stream_loop -1 przed -i. |
Pytania o streaming FFmpeg
Jak streamować na serwer RTMP za pomocą FFmpeg?
Zakoduj do H.264 i AAC, opakuj wyjście w FLV za pomocą -f flv i podaj FFmpeg adres RTMP jako ostatni argument. Dla kanału Primcast adres to Twój serwer, aplikacja i nazwa strumienia, z nazwą użytkownika i hasłem przed hostem: rtmp://USERNAME:PASSWORD@HOST:1935/APP/livestream.
Gdzie znajdę adres serwera, nazwę użytkownika i hasło?
Na swoim koncie, na karcie Transmisja na żywo konta wideo, w sekcji Ustawienia enkodera. Hasło pozostaje ukryte, dopóki nie klikniesz Pokaż, a Nowe hasło wygeneruje świeże. Strumień, który jest na żywo, nadal działa, a nowe hasło obowiązuje przy następnym połączeniu.
Czy nadal potrzebuję -strict experimental dla dźwięku AAC?
Nie. Własny koder AAC FFmpeg stracił etykietę eksperymentalną w FFmpeg 3.0, wydanym w 2016 roku. Zwykłe -c:a aac działa na każdej aktualnej wersji, więc możesz usunąć tę flagę ze starszych poleceń.
Jaki interwał klatek kluczowych powinien stosować FFmpeg do transmisji na żywo?
Stałe 2 sekundy. Segmenty odtwarzania tniemy na klatkach kluczowych, więc dłuższy lub zmienny interwał zamienia się w zacinanie dla widzów. Użyj -force_key_frames "expr:gte(t,n_forced*2)" z -sc_threshold 0 lub -g ustawionym na dwukrotność liczby klatek na sekundę.
Z jakim bitrate powinienem streamować?
Około 2500 kbps dla 720p i 4500 kbps dla 1080p przy 30 klatkach na sekundę, plus 128 kbps dźwięku. Utrzymuj łączną wartość na poziomie dwóch trzecich zmierzonej prędkości wysyłania, aby chwilowe spowolnienie łącza nie zatrzymało strumienia.
Jak zapętlić plik wideo przez całą dobę za pomocą FFmpeg?
Umieść -re -stream_loop -1 przed -i, a FFmpeg będzie odtwarzał plik, dopóki go nie zatrzymasz. To jednak zajmuje komputer przez cały dzień. Płatne plany wideo CDN obejmują całodobowe kanały stacji telewizyjnych, które odtwarzają Twoje filmy po naszej stronie.
Czy FFmpeg może kodować strumień na moim GPU?
Tak. Użyj h264_nvenc na GPU NVIDIA, h264_qsv na grafice Intel lub h264_videotoolbox na Macu, zamiast libx264. Flagi klatek kluczowych i bitrate pozostają takie same.
Czy mogę wysyłać SRT zamiast RTMP?
Tak, w planach wideo CDN Pro i Platinum. Panel daje Ci port SRT i hasło. Użyj -f mpegts i jednoliniowego adresu URL srt:// z panelu jako wyjścia.
Wolisz okno zamiast wiersza poleceń?
Ten sam kanał działa z każdym enkoderem obsługującym RTMP. Te samouczki wykorzystują te same cztery wartości.
Potrzebujesz kanału, na który możesz streamować?
Otwórz kanał wideo, wklej swoje wartości do polecenia i sam oceń obraz. Utknąłeś na jakiejś fladze? Nasz czat odpowiada w kilka sekund i może zajrzeć na Twój kanał, podczas gdy czekasz, a człowiek przejmuje rozmowę, kiedy tylko poprosisz.