本番サーバーから FB への FFMPEG ストリーミング プロセスで FPS が低下する

本番サーバーから FB への FFMPEG ストリーミング プロセスで FPS が低下する

Facebook の rtmp サーバーにライブ動画をストリーミングできる Rails アプリを作成し、AWS にデプロイしました。Web サーバーには nginx を使用しました。FFMpeg プロセスのログ ファイルを表示した後に発生する主な問題は、FFmpeg プロセスの FPS が低下し始めることがあることです。25 FPS で安定している場合もありますが、25 のままになる時間が長く、その後低下し始め、ライブ ストリーミング中に許容できない 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 にストリーミングしようとすると、この問題に直面することはありません。

私の質問は次のとおりです。

  1. この FPS 低下の原因は何でしょうか?
  2. 実稼働サーバーをスケールアップすると、この問題を解決できますか?
  3. パフォーマンスを低下させることなく、同じサーバーからストリーミングするために複数の FFMpeg プロセスを実行できますか?

前もって感謝します :)

答え1

  1. FPS が低下した理由は、ビデオのエンコードが非常に重いため、CPU の効率が悪かったことに間違いなく起因しています。

  2. はい、CPU コアを増やして運用サーバーをアップグレードすると、問題を解決できました。

  3. それは、同時に実行されているプロセスの種類によって異なります。ビデオ全体を再エンコードする場合、負荷はかなり高くなります。ただし、ビデオ コンテナーのみを変更したり、ビデオ ストリームのコピーを使用する他のプロセスを使用したりする場合は、他のプロセスに比べて負荷はいくらか軽くなります。

関連情報