avconv/ffmpeg 스레드가 작동하지 않습니다.

avconv/ffmpeg 스레드가 작동하지 않습니다.

제가 뭔가 잘못하고 있는 건가요? 아니면 "avconv"의 스레딩 옵션이 깨졌나요? 나는 H264와 mpeg2video의 "-threads" 옵션을 시도했는데 어떤 값(0~4)을 부여하더라도 성능에는 차이가 없었습니다.

화면을 여러 개의 640x640 타일로 분할하고 동시에 각 타일에 대해 별도의 avconv 인스턴스를 실행하면 타일당 90FPS를 얻습니다.

2560x1440 ffmpeg 스트림을 생성하면 12FPS를 얻습니다.

스레드가 시스템 수준에서 작동하지만 avconv 내에서는 작동하지 않는다는 것은 명백합니다.

클라이언트 측에서는 타일형 mplayer 인스턴스를 사용할 수 있는데 이는 문제가 되지 않습니다. 한 스트림의 이미지 버퍼가 다른 스트림에 표시될 때 깜박이는 결함이 많이 있습니다. (각 타일마다 다른 UDP 포트 번호를 사용하고 있으므로 그렇지 않습니다.) 이것이 avconv 결함인 것으로 의심됩니다. 여러 인스턴스에서 실행되도록 설계되지 않았으므로 일종의 버퍼를 공유합니다.

내가 사용한 명령은 다음과 같습니다.

avconv -f x11grab -s 640x640 -프레임 속도 180 -i :0.0+320,400 -c:v mpeg2video -q:v 20 -pix_fmt yuv420p -g 1 -thread 4 -f mpegts udp://192.168.0.7:1231

Avconv/ffmpeg 버전:

avconv 버전
ffmpeg 버전 2.8.8-0ubuntu0.16.04.1 저작권 (c) 2000-2016 FFmpeg 개발자
gcc 5.4.0으로 구축됨 (Ubuntu 5.4.0-6ubuntu1~16.04.2) 20160609
구성: --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
libav 코덱 56.60.100/56.60.100
libav 형식 56.40.101 / 56.40.101
libav장치 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
libsresample 1.2.101/1.2.101
libpostproc 53. 3.100 / 53. 3.100

프로세서의 경우:

프로세서: 0
Vendor_id: 정품 AMD
CPU 시리즈: 21
모델: 1
모델명: AMD FX(tm)-4170 쿼드 코어 프로세서
2 단계
마이크로코드: 0x6000629
CPU MHz: 2900.000
캐시 크기: 2048KB
실제 ID: 0
형제자매: 4
코어 수: 0
CPU 코어: 2
캡사이신: 0
초기 산: 0
FPU: 예
fpu_Exception: 예
CPUID 레벨: 13
직장: 예
플래그: 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 sse 3 cx16 sse4_1 sse4_2 popcnt aes xsave avx lahf_lm cmp_legacy svm extapic cr8_legacy abm sse4a missalignsse 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_cleanl ushbyasid 디코딩 보조 일시 중지 필터 pf 임계값
오류: fxsave_leak sysret_ss_attrs
보고밉 : 8456.93
TLB 크기: 1536 4K 페이지
클플러시 사이즈: 64
캐시 정렬: 64
주소 크기: 48비트 물리적 주소, 48비트 가상 주소
전원 관리: ts ttp tm 100mhzsteps hwpstate cpb

...등

앱이 가상 현실을 스트리밍하고 있습니다. 90FPS가 되어야 하고 지연이 없어야 합니다. 타일로 분할된 경우 프레임 속도는 문제가 되지 않으며 이는 스레드가 엉망이라는 것을 증명합니다. 눈에 띄는 지연이 발생하지 않는 유일한 코덱은 mpeg2video입니다.

또한 소스 버전 3.2.2에서 최신 ffmpeg를 다운로드하여 컴파일했는데 동일한 결과를 얻었습니다.

관련 정보