Eğitim · Canlı video için FFmpeg
FFmpeg yayın eğitimi tek komuttan canlı kanala
Bu FFmpeg yayın eğitimi sizi tek bir komutla canlıya çıkarır: FFmpeg dosyanızı, kameranızı veya ekranınızı okur, H.264 video ve AAC ses olarak kodlar ve RTMP üzerinden Primcast kanalınıza gönderir.
Her kaynak türü için komutu, izleyicileriniz için oynatmayı akıcı tutan kodlayıcı ayarlarını ve uzun ya da kararsız bağlantılar için bir SRT sürümünü burada bulacaksınız.
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"
Vurgulanan sözcükleri kendi değerlerinizle değiştirin. Adım 02 her bayrağı açıklar.
Başlamadan önce: FFmpeg ve panelinizden dört değer
Videoyu gönderen bilgisayarda FFmpeg'e ve kanalınızın kodlayıcı ayarlarına ihtiyacınız var. İkisi de birkaç dakika sürer.
FFmpeg'i kurun
Sisteminizin paket yöneticisini kullanın, ardından çalıştığını kontrol edin. Güncel herhangi bir sürüm bu sayfadaki komutlarla çalışır.
# Windowswinget install Gyan.FFmpeg# macOS (Homebrew)brew install ffmpeg# Debian veya Ubuntusudo apt install ffmpeg# kontrol edinffmpeg -version
Kodlayıcı ayarlarınızı kopyalayın
Oturum açın, video hesabınızı açın ve Canlı yayın kartını bulun. Kodlayıcı ayarları FFmpeg'in ihtiyaç duyduğu her şeyi listeler:
- Sunucu
rtmp://HOST:1935/APPgibi görünür. Sunucu adınız ve uygulama adınız.- Yayın adı
- Genellikle
livestream. Adresin sonuna eklenir. - Kullanıcı adı
- Yayın giriş bilginiz.
- Parola
- Görmek için Göster'e, değiştirmek için Yeni parola'ya tıklayın.
Panelinizde ayrıca bir En yakın sunucu adresi görünüyorsa, sunucu olarak onu kullanın. Kodlayıcınız böylece en yakın konumumuza (New York, Miami, San Francisco, Amsterdam veya Bükreş) bağlanır ve yayın ağımız üzerinden kanalınıza iletilir. Yayın adı, kullanıcı adı ve parola aynı kalır.
İlk FFmpeg RTMP yayınınız, bayrak bayrak
Kullanıcı adınızı ve parolanızı sunucunun önüne, ardından bir @ işareti koyun ve uygulamadan sonra yayın adını ekleyin. Komutun geri kalanı FFmpeg'e nasıl kodlayacağını söyler.
rtmp://USERNAME:PASSWORD@HOST:1935/APP/livestream
Adresin çevresindeki tırnak işaretlerini koruyun. Parolanız @, : veya / içeriyorsa bunları %40, %3A ve %2F olarak yazın ya da panelden Yeni parola'ya tıklayıp bunları içermeyen bir tane alın.
| Bayrak | Ne yapar |
|---|---|
-re | Bir dosyayı gerçek oynatma hızında okur. Bu olmadan FFmpeg dosyayı olabildiğince hızlı gönderir ve yayın bozulur. Zaten gerçek zamanlı çalışan kameralar ve yakalama aygıtları için bunu kullanmayın. |
-i input.mp4 | Girdiniz: bir dosya, bir aygıt veya başka bir yayın. Adım 03'te her biri için bir tane var. |
-c:v libx264 | Videoyu her oynatıcının ve tarayıcının gösterebileceği H.264 olarak kodlar. |
-preset veryfast | Bilgisayarın gerçek zamanlı yetişebilmesi için biraz kaliteden ödün verip hız kazandırır. Yedek CPU'nuz varsa faster veya medium deneyin. |
-b:v 2500k -maxrate 2500k -bufsize 5000k | Videoyu sabit 2.500 kbps civarında tutar, böylece yayın sahip olduğunuzdan daha fazla yükleme istemez. Adım 04'te her çözünürlük için değerler var. |
-pix_fmt yuv420p | Telefonların, TV'lerin ve tarayıcıların beklediği renk biçimi. |
-force_key_frames "expr:gte(t,n_forced*2)" | Kare hızı ne olursa olsun her 2 saniyede bir ana kare. Oynatma ana karelerde bölümlere ayrılır, bu yüzden en önemlisi budur. |
-sc_threshold 0 | Sahne değişimlerinde ekstra ana kareleri durdurur, böylece 2 saniyelik ritim sabit kalır. |
-c:a aac -b:a 128k -ar 44100 -ac 2 | 128 kbps ve 44,1 kHz'de AAC stereo ses. FFmpeg'in yerleşik AAC kodlayıcısı ekstra bayrak gerektirmez. |
-f flv | Yayını RTMP'nin taşıdığı biçim olan FLV'ye sarar. |
Bu sayfanın ilk sürümü de dahil eski rehberler AAC için -strict experimental ekler. FFmpeg, AAC kodlayıcısından deneysel etiketini 3.0 sürümünde kaldırdı, bu yüzden bunu kullanmayabilirsiniz.
Kaynağınızı seçin: dosya, web kamerası, ekran veya IP kamera
Yalnızca girdi kısmı değişir. Her örnekte [encoding], adım 02'deki video ve ses bayraklarını; RTMP_ADDRESS ise tırnaklı adresinizi temsil eder.
FFmpeg ile bir video dosyası yayınlayın
FFmpeg'i durdurana kadar tekrarda oynatmak için girdiden önce -stream_loop -1 ekleyin.
ffmpeg -re -stream_loop -1 -i video.mp4 \ [encoding] -f flv "RTMP_ADDRESS"
Windows'ta web kamerası
Önce aygıtlarınızı listeleyin, ardından yazdırdığı tam adları kullanın.
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"
macOS'ta web kamerası
Liste her kamerayı ve mikrofonu bir numarayla gösterir. "0:0", kamera 0 ve mikrofon 0 anlamına gelir.
ffmpeg -f avfoundation -list_devices true -i "" ffmpeg -f avfoundation -framerate 30 \ -video_size 1280x720 -i "0:0" \ [encoding] -f flv "RTMP_ADDRESS"
Linux'ta web kamerası
Video kamera aygıtından, ses masaüstünüzün varsayılan girişinden gelir.
ffmpeg -f v4l2 -framerate 30 -video_size 1280x720 \ -i /dev/video0 -f pulse -i default \ [encoding] -f flv "RTMP_ADDRESS"
Windows'ta ekranınız
Tüm masaüstünü saniyede 30 kare yakalar. Ses istiyorsanız ikinci bir dshow girdisiyle mikrofon ekleyin.
ffmpeg -f gdigrab -framerate 30 -i desktop ^ [encoding] -f flv "RTMP_ADDRESS"
RTSP üzerinden IP kamera
Kamera zaten 2 saniyelik ana kare aralığıyla H.264 gönderiyorsa (kendi menüsünde ayarlanır), videoyu olduğu gibi kopyalayın ve yalnızca sesi kodlayın. Aksi takdirde tam kodlama bayraklarını kullanın.
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"
Kamerada mikrofon yok mu? Ses bayraklarını -an ile değiştirin.
Örnekler satırları \ (macOS ve Linux) veya ^ (Windows Komut İstemi) ile bitirir. PowerShell'de veya emin değilseniz tüm komutu tek satıra yazın.
Canlı yayında dayanıklı FFmpeg kodlayıcı ayarları
Yükleme hızınıza uyan bir satır seçin. Yükleme hızınızın üçte birini boş bırakın: hız testi 6 Mbps gösteriyorsa, yaklaşık 4'ten fazlasını göndermeyin.
| Görüntü | Komuta ekleyin | Video | Ses | Gereken yükleme |
|---|---|---|---|---|
| 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 |
-b:v ve -maxrate değerlerini video rakamına, -bufsize değerini ise bunun iki katına ayarlayın. Adım 02'deki komut 720p satırıdır. Ücretli canlı video planları 5 Mbps'e kadar giriş alır; bu, 1080p satırı için yeterlidir.
Arabelleğe almayı çoğunlukla önleyen üç kural
- Ana kareleri sabit 2 saniyede tutun. Uzun veya değişken bir aralık, izleyicilerinizde donma olarak görünür ve sizin tarafınızdan sunucu hatası gibi görünür.
-maxrateve-bufsizeile bit hızını sabit tutun; böylece yoğun bir sahne yükleme hızınızı aşamaz.- FFmpeg'in durum satırındaki
speed=değerini izleyin. 1x'te kalmalıdır. Bunun altındaysa bilgisayarınız gerçek zamanlı kodlama yapamıyordur.
Kodlamayı GPU'nuz yapsın
speed= 1x'in altına düşerse, -c:v libx264 -preset veryfast yerine bilgisayarınızdaki donanım kodlayıcıyı kullanın. Böylece CPU diğer her şey için boş kalır.
- NVIDIA GPU
-c:v h264_nvenc -preset p4- Intel grafik
-c:v h264_qsv- Mac
-c:v h264_videotoolbox
Derlemenizin hangilerini içerdiğini görmek için ffmpeg -encoders komutunu çalıştırın.
Bunun yerine FFmpeg SRT akışı gönderin
SRT, mekan Wi-Fi'si, mobil yükleme bağlantısı veya başka bir kıtadan gelen besleme gibi uzun veya kayıplı bağlantılarda akışı sabit tutar; RTMP bu tür bağlantılarda takılma eğilimindedir. Video CDN hizmetimizin Pro ve Platinum planlarıyla birlikte gelir.
Canlı yayın kartınızda, kendi bağlantı noktanız ve parolanızla birlikte bir SRT alım bölümü bulunur. Tek satırlık URL'sini kopyalayın ve çıktı olarak kullanın; FLV yerine MPEG-TS kullanın. Kodlama bayrakları aynı kalır.
SRT akışı kendi adı altında oynatılır; bu nedenle yanında Şurada oynatılır altında gösterilen oynatma bağlantısını kullanın.
ffmpeg -re -i input.mp4 \ [encoding] \ -f mpegts \ "srt://HOST:PORT?passphrase=PASSPHRASE&pbkeylen=16"
FFmpeg derlemenizin SRT desteğine sahip olması gerekir. ffmpeg -protocols ile kontrol edin ve çıktı listesinde srt arayın.
Canlı yayında olduğunuzu kontrol edin ve olmayanı düzeltin
- FFmpeg'i başlatın ve pencereyi açık bırakın.
frame=vetime=değerlerini saymaya devam eden bir durum satırı, gönderim yapıldığı anlamına gelir. - Canlı yayın kartını açın. 15 saniye içinde canlı yazmalı ve kodlayıcınızın gönderdiğini, bit hızınıza yakın şekilde göstermelidir.
- Aynı panelden oynatma bağlantısını kopyalayın ve VLC'de (Medya, Ağ Akışı Aç) açın veya
ffplay "PLAYBACK_LINK"komutunu çalıştırın. Panel ayrıca kendi web siteniz için bir yerleştirme kodu da verir.
| Gördüğünüz | Yapmanız gereken |
|---|---|
| FFmpeg bağlantı veya G/Ç hatasıyla hemen duruyor | Ana bilgisayar ve uygulama adını harf harf kontrol edin. Bazı ofis ve otel ağları 1935 numaralı bağlantı noktasını engeller: başka bir bağlantı deneyin. |
| Bağlanıyor, ardından sunucu akışı reddediyor | Kullanıcı adı veya parola yanlış ya da parolada kodlanması gereken bir karakter var. Yeni parola'ya tıklayın, komutu güncelleyin ve yeniden deneyin. |
speed= bir dosyada 1x'in çok üzerinde kalıyor | -re bayrağını atlamışsınız. -i'den önce ekleyin. |
speed= 1x'in altında kalıyor | Daha hızlı bir ön ayar (superfast), adım 04'ten daha düşük bir satır veya GPU'nuzun kodlayıcısını kullanın. |
| FFmpeg normal görünüyor ama izleyiciler arabelleğe alıyor | Ana kare bayraklarını kontrol edin, ardından bit hızını düşürün. Yükleme hızınız o saatte düşündüğünüzden daha yavaş olabilir. |
| Dosya bitince akış bitiyor | -i'den önce -stream_loop -1 ekleyin. |
FFmpeg yayın soruları
FFmpeg ile bir RTMP sunucusuna nasıl yayın yaparım?
H.264 ve AAC olarak kodlayın, çıktıyı -f flv ile FLV formatına sarın ve FFmpeg'e son argüman olarak RTMP adresini verin. Bir Primcast kanalı için adres; sunucunuz, uygulamanız ve yayın adınızdan oluşur; kullanıcı adı ve parolanız sunucu adının önünde yer alır: rtmp://KULLANICIADI:PAROLA@SUNUCU:1935/UYGULAMA/canliyayin.
Sunucu adresimi, kullanıcı adımı ve parolamı nerede bulurum?
Hesabınızda, video hesabınızın Canlı yayın kartında, Encoder ayarları altında. Parola, Göster'e tıklayana kadar gizli kalır ve Yeni parola size yeni bir tane verir. Canlı olan yayın çalışmaya devam eder ve yeni parola bir sonraki bağlantıda geçerli olur.
AAC ses için hâlâ -strict experimental gerekiyor mu?
Hayır. FFmpeg'in kendi AAC kodlayıcısı, 2016'da yayınlanan FFmpeg 3.0'da deneysel etiketini kaybetti. Düz -c:a aac her güncel sürümde çalışır, bu yüzden eski komutlardaki bayrağı kaldırabilirsiniz.
FFmpeg canlı yayın için hangi ana kare aralığını kullanmalı?
Sabit 2 saniye. Oynatma bölümlerini ana karelerde kesiyoruz, bu yüzden daha uzun veya değişken bir aralık izleyicileriniz için takılmalara dönüşür. -force_key_frames "expr:gte(t,n_forced*2)" ile birlikte -sc_threshold 0 kullanın veya -g değerini kare hızınızın iki katına ayarlayın.
Hangi bit hızında yayın yapmalıyım?
Saniyede 30 karede 720p için yaklaşık 2.500 kbps ve 1080p için 4.500 kbps, artı 128 kbps ses. Hattınızdaki yavaş bir anın yayını durdurmaması için toplamı ölçülen yükleme hızınızın üçte ikisinde tutun.
FFmpeg ile bir video dosyasını gün boyu nasıl döngüye alırım?
-i öncesine -re -stream_loop -1 koyun; FFmpeg siz durdurana kadar dosyayı tekrar oynatır. Ancak bu, bir bilgisayarı tüm gün meşgul eder. Ücretli video CDN planları, videolarınızı bizim tarafımızdan oynatan 7/24 TV istasyonu kanallarını içerir.
FFmpeg yayını GPU'mda kodlayabilir mi?
Evet. libx264 yerine NVIDIA GPU'da h264_nvenc, Intel grafiklerde h264_qsv veya Mac'te h264_videotoolbox kullanın. Ana kare ve bit hızı bayrakları aynı kalır.
RTMP yerine SRT gönderebilir miyim?
Evet, Pro ve Platinum video CDN planlarında. Paneliniz size bir SRT bağlantı noktası ve parola verir. Çıktı olarak -f mpegts ve paneldeki tek satırlık srt:// URL'sini kullanın.
Komut satırı yerine pencere mi tercih edersiniz?
Aynı kanal, RTMP konuşan her kodlayıcıyla çalışır. Bu eğitimler aynı dört değeri kullanır.
Yayın yapacağınız bir kanala mı ihtiyacınız var?
Bir video kanalı açın, değerlerinizi komuta yapıştırın ve görüntüyü kendiniz değerlendirin. Bir bayrakta mı takıldınız? Sohbetimiz saniyeler içinde yanıt verir ve siz beklerken kanalınıza bakabilir; istediğinizde bir kişi devralır.