
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:
- Qual pode ser o motivo dessa queda de FPS?
- O upscaling do servidor de produção pode me ajudar a corrigir esse problema?
- Posso executar vários processos FFMpeg para streaming do mesmo servidor sem queda de desempenho?
Desde já, obrigado :)
Responder1
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.
Sim, atualizar o servidor de produção com mais núcleos de CPU me ajudou a corrigir o problema.
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.