Queda de FPS nos processos de streaming FFMPEG para FB do servidor de produção

Queda de FPS nos processos de streaming FFMPEG para FB do servidor de produção

Eu criei um aplicativo Rails que pode transmitir vídeos ao vivo para o servidor rtmp do Facebook e o implantei na AWS. Eu usei o nginx como servidor web. O principal problema que encontro depois de visualizar os arquivos de log dos processos FFMpeg é que às vezes o FPS do processo FFmpeg começa a cair. Em alguns casos, permanece estável em 25 FPS, mas em alguns casos, permanece em 25 apenas por algum tempo, e depois disso começa a cair e às vezes cai até 3-4 FPS, o que é inaceitável durante a transmissão ao vivo. Como o processo FFMpeg é bastante pesado, também gostaria de compartilhar as informações da minha CPU.

As informações da CPU são:

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:

Arquivo de log FFMPEG com fps instável:https://drive.google.com/open?id=0B1gtp1iXJppkUndFamk4M0lRYzA

Arquivo de log FFMPEG com fps estável:https://drive.google.com/open?id=0B1gtp1iXJppkMkVCZEJjYWJrVTA

Quando o FPS estava estável, também tentei executar outro processo FFMpeg paralelo no mesmo servidor, o que resultou na queda do FPS de ambos os processos para 13-14 FPS.

Atualmente estou usando este comando 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"

Nunca enfrento esse problema quando tento transmitir para o FB usando o aplicativo no meu host local.

Então, minhas perguntas são:

  1. Qual pode ser o motivo dessa queda de FPS?
  2. O upscaling do servidor de produção pode me ajudar a corrigir esse problema?
  3. Posso executar vários processos FFMpeg para streaming do mesmo servidor sem queda de desempenho?

Desde já, obrigado :)

Responder1

  1. O motivo da queda do FPS foi certamente a ineficiência da CPU para codificar o vídeo, já que essa codificação é bastante pesada.

  2. Sim, atualizar o servidor de produção com mais núcleos de CPU me ajudou a corrigir o problema.

  3. Isso depende do tipo de processos que estão sendo executados simultaneamente. Se estivermos recodificando o vídeo completo, ele será bastante pesado. Mas se tentarmos alterar apenas o contêiner de vídeo ou usar qualquer outro processo que use a cópia do fluxo de vídeo, então será um pouco leve em comparação com outros.

informação relacionada