
我製作了一個 Rails 應用程序,可以將即時視訊串流傳輸到 facebook rtmp 伺服器並將其部署在 AWS 上。我使用 nginx 作為網頁伺服器。我在查看 FFMpeg 進程的日誌檔案後遇到的主要問題是,有時 FFmpeg 進程的 FPS 開始下降。在某些情況下,它會穩定在25 FPS,但在某些情況下,它只會在一段時間內保持在25 FPS,之後就開始下降,有時甚至會下降到3-4 FPS,這在直播過程中是不可接受的。由於 FFMpeg 進程相當繁重,我也想分享我的 CPU 資訊。
CPU資訊為:
cat /proc/cpuinfo processor : 0 vendor_id : GenuineIntel cpu family : 6 model : 63 model name : Intel(R) Xeon(R) CPU E5-2676 v3 @ 2.40GHz stepping : 2 microcode : 0x25 cpu MHz : 2400.070 cache size : 30720 KB physical id : 0 siblings : 1 core id : 0 cpu cores : 1 apicid : 0 initial apicid : 0 fpu : yes fpu_exception : yes cpuid level : 13 wp : yes flags : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush mmx fxsr sse sse2 ht syscall nx rdtscp lm constant_tsc rep_good nopl xtopology eagerfpu pni pclmulqdq ssse3 fma cx16 pcid sse4_1 sse4_2 x2apic movbe popcnt tsc_deadline_timer aes xsave avx f16c rdrand hypervisor lahf_lm abm xsaveopt fsgsbase bmi1 avx2 smep bmi2 erms invpcid bogomips : 4800.14 clflush size : 64 cache_alignment : 64 address sizes : 46 bits physical, 48 bits virtual power management:
FPS 不穩定的 FFMPEG 日誌檔:https://drive.google.com/open?id=0B1gtp1iXJppkUndFamk4M0lRYzA
具有穩定 fps 的 FFMPEG 日誌檔:https://drive.google.com/open?id=0B1gtp1iXJppkMkVCZEJjYWJrVTA
當 FPS 穩定時,我還嘗試從同一台伺服器運行另一個並行 FFMpeg 進程,這導致兩個進程的 FPS 都下降至 13-14 FPS。
我目前正在使用這個 FFMPEG 指令:
ffmpeg -loop 1 -re -y -f image2 -i "image_path" -i "audio_path.aac" -acodec copy -bsf:a aac_adtstoasc -pix_fmt yuv420p -profile:v high -s 1280x720 -vb 400k -maxrate 400k -minrate 400k -bufsize 600k -deinterlace -vcodec libx264 -preset veryfast -g 30 -r 30 -t 14400 -strict -2 -f flv "rtmp_server_link"
當我嘗試使用本地主機上的應用程式串流傳輸到 FB 時,我從未遇到過這個問題。
所以,我的問題是:
- FPS 下降的原因可能是什麼?
- 升級生產伺服器可以幫助我解決這個問題嗎?
- 我可以運行多個 FFMpeg 進程來從同一台伺服器進行串流傳輸,而不會降低效能嗎?
提前致謝 :)
答案1
FPS 下降的原因肯定是 CPU 編碼視訊的效率低下,因為這種編碼相當繁重。
是的,使用更多 CPU 核心升級生產伺服器幫助我解決了這個問題。
這取決於同時運行的進程的類型。如果我們重新編碼完整的視頻,那麼它會很重。但是,如果我們嘗試僅更改視訊容器或使用任何使用視訊串流複製的其他進程,那麼與其他進程相比,它會稍微輕一些。