avconv / ffmpeg threading não funciona

1

Estou fazendo algo errado ou a opção de segmentação em "avconv" está quebrada? Eu tentei a opção "-threads" com H264 e mpeg2video e, independentemente do valor que eu dou (0 a 4), não há diferença no desempenho.

Se eu dividir a tela em vários blocos de 640x640 e executar instâncias separadas de avconv para cada uma simultaneamente, obtenho 90 FPS em cada.

Se eu criar apenas um fluxo de 2560x1440 ffmpeg, receberei 12 FPS.

Então, claramente, a segmentação está funcionando no nível do sistema, mas não dentro de uma região.

No lado do cliente, posso usar instâncias do mplayer lado a lado, isso não é um problema. Há muitas falhas de cintilação onde o buffer de imagem de um fluxo é mostrado no outro. (Eu estou usando números de porta UDP diferentes para cada bloco, então não é isso) Eu suspeito que isso seja uma falha do avconv onde ele não foi projetado para ser executado em várias instâncias e, portanto, ele compartilha algum tipo de buffer.

O comando que eu uso:

avconv -f x11grab -s 640x640 -framerate 180 -i :0.0+320,400 -c:v mpeg2video -q:v 20 -pix_fmt yuv420p -g 1 -threads 4 -f mpegts udp://192.168.0.7:1231

Versão Avconv / ffmpeg:

avconv -version
ffmpeg version 2.8.8-0ubuntu0.16.04.1 Copyright (c) 2000-2016 the FFmpeg developers
built with gcc 5.4.0 (Ubuntu 5.4.0-6ubuntu1~16.04.2) 20160609
configuration: --prefix=/usr --extra-version=0ubuntu0.16.04.1 --build-suffix=-ffmpeg --toolchain=hardened --libdir=/usr/lib/x86_64-linux-gnu --incdir=/usr/include/x86_64-linux-gnu --cc=cc --cxx=g++ --enable-gpl --enable-shared --disable-stripping --disable-decoder=libopenjpeg --disable-decoder=libschroedinger --enable-avresample --enable-avisynth --enable-gnutls --enable-ladspa --enable-libass --enable-libbluray --enable-libbs2b --enable-libcaca --enable-libcdio --enable-libflite --enable-libfontconfig --enable-libfreetype --enable-libfribidi --enable-libgme --enable-libgsm --enable-libmodplug --enable-libmp3lame --enable-libopenjpeg --enable-libopus --enable-libpulse --enable-librtmp --enable-libschroedinger --enable-libshine --enable-libsnappy --enable-libsoxr --enable-libspeex --enable-libssh --enable-libtheora --enable-libtwolame --enable-libvorbis --enable-libvpx --enable-libwavpack --enable-libwebp --enable-libx265 --enable-libxvid --enable-libzvbi --enable-openal --enable-opengl --enable-x11grab --enable-libdc1394 --enable-libiec61883 --enable-libzmq --enable-frei0r --enable-libx264 --enable-libopencv
libavutil      54. 31.100 / 54. 31.100
libavcodec     56. 60.100 / 56. 60.100
libavformat    56. 40.101 / 56. 40.101
libavdevice    56.  4.100 / 56.  4.100
libavfilter     5. 40.101 /  5. 40.101
libavresample   2.  1.  0 /  2.  1.  0
libswscale      3.  1.101 /  3.  1.101
libswresample   1.  2.101 /  1.  2.101
libpostproc    53.  3.100 / 53.  3.100

Quanto aos processadores:

processor       : 0
vendor_id       : AuthenticAMD
cpu family      : 21
model           : 1
model name      : AMD FX(tm)-4170 Quad-Core Processor
stepping        : 2
microcode       : 0x6000629
cpu MHz         : 2900.000
cache size      : 2048 KB
physical id     : 0
siblings        : 4
core id         : 0
cpu cores       : 2
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 mmxext fxsr_opt pdpe1gb rdtscp lm constant_tsc rep_good nopl nonstop_tsc extd_apicid aperfmperf pni pclmulqdq monitor ssse3 cx16 sse4_1 sse4_2 popcnt aes xsave avx lahf_lm cmp_legacy svm extapic cr8_legacy abm sse4a misalignsse 3dnowprefetch osvw ibs xop skinit wdt lwp fma4 nodeid_msr topoext perfctr_core perfctr_nb cpb hw_pstate vmmcall arat npt lbrv svm_lock nrip_save tsc_scale vmcb_clean flushbyasid decodeassists pausefilter pfthreshold
bugs            : fxsave_leak sysret_ss_attrs
bogomips        : 8456.93
TLB size        : 1536 4K pages
clflush size    : 64
cache_alignment : 64
address sizes   : 48 bits physical, 48 bits virtual
power management: ts ttp tm 100mhzsteps hwpstate cpb

...and so on

O aplicativo está transmitindo realidade virtual. Precisa ser 90 FPS sem latência. Se dividida em blocos, o framerate não é um problema que comprove que o threading está confuso. O único codec que não introduz qualquer latência perceptível é o mpeg2video.

Eu também fiz o download e compilei a partir do último ffmpeg - versão 3.2.2 e obtive os mesmos resultados.

    
por user83311 14.12.2016 / 07:33

0 respostas

Tags