
Ich habe eine Rails-App erstellt, die Live-Videos auf den RTMP-Server von Facebook streamen kann, und sie auf AWS bereitgestellt. Als Webserver habe ich nginx verwendet. Das größte Problem, das ich nach dem Anzeigen der Protokolldateien von FFMpeg-Prozessen feststelle, ist, dass die FPS des FFmpeg-Prozesses manchmal zu sinken beginnen. In einigen Fällen bleibt sie stabil bei 25 FPS, in anderen Fällen bleibt sie nur eine Zeit lang bei 25, beginnt dann zu sinken und fällt manchmal sogar auf 3-4 FPS, was beim Live-Streaming inakzeptabel ist. Da der FFMpeg-Prozess ziemlich schwer ist, möchte ich auch meine CPU-Informationen teilen.
Die CPU-Informationen lauten:
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:
FFMPEG-Protokolldatei mit instabilen fps:https://drive.google.com/open?id=0B1gtp1iXJppkUndFamk4M0lRYzA
FFMPEG-Protokolldatei mit stabilen fps:https://drive.google.com/open?id=0B1gtp1iXJppkMkVCZEJjYWJrVTA
Als die FPS stabil waren, habe ich auch versucht, einen anderen parallelen FFMpeg-Prozess vom selben Server auszuführen, was dazu führte, dass die FPS bei beiden Prozessen auf 13–14 FPS sank.
Ich verwende derzeit diesen FFMPEG-Befehl:
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"
Ich habe dieses Problem nie, wenn ich versuche, mit einer App auf meinem lokalen Host zu FB zu streamen.
Meine Fragen sind also:
- Was kann der Grund für diesen FPS-Einbruch sein?
- Kann mir das Hochskalieren des Produktionsservers helfen, dieses Problem zu beheben?
- Kann ich mehrere FFMpeg-Prozesse zum Streamen vom selben Server ausführen, ohne dass die Leistung nachlässt?
Dank im Voraus :)
Antwort1
Der Grund für den FPS-Abfall war sicherlich die Ineffizienz der CPU bei der Videokodierung, da diese Kodierung recht aufwändig ist.
Ja, das Upgrade des Produktionsservers mit mehr CPU-Kernen hat mir geholfen, das Problem zu beheben.
Das hängt von der Art der gleichzeitig ausgeführten Prozesse ab. Wenn wir ein komplettes Video neu kodieren, ist das ziemlich aufwändig. Wenn wir jedoch versuchen, nur den Videocontainer zu ändern oder einen anderen Prozess zu verwenden, der das Kopieren des Videostreams nutzt, ist das im Vergleich zu anderen relativ leicht.