从生产服务器到 FB 的 FFMPEG 流式传输过程中 FPS 下降

从生产服务器到 FB 的 FFMPEG 流式传输过程中 FPS 下降

我制作了一个 rails 应用程序,可以将实时视频流式传输到 facebook rtmp 服务器,并将其部署在 AWS 上。我使用 nginx 作为 Web 服务器。查看 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. 这取决于同时运行的进程类型。如果我们要重新编码完整的视频,那么它就相当繁重。但是如果我们尝试仅更改视频容器或使用任何其他使用视频流复制的进程,那么它与其他进程相比就稍微轻松一些。

相关内容