Intereting Posts

прошивка avconv / ffmpeg не работает

Я что-то делаю неправильно, или вариант с резьбой в «avconv» сломан? Я попробовал вариант «-threads» с H264 и mpeg2video и независимо от того, какое значение я ему даю (от 0 до 4), нет никакой разницы в производительности вообще.

Если я разбиваю экран на несколько фрагментов 640×640 и запускаю отдельные экземпляры avconv для каждого одновременно, я получаю 90 FPS на каждый.

Если я просто создаю один поток ffmpeg 2560×1440, я получаю 12 FPS.

Так ясно, что потоки работают на системном уровне, но не в 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 -threads 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
 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

Что касается процессоров:

 процессор: 0
 vendor_id: AuthenticAMD
 cpu family: 21
 модель: 1
 Название модели: AMD FX (tm) -4170 Quad-Core Processor
 степпинг: 2
 микрокод: 0x6000629
 cpu МГц: 2900.000
 размер кеша: 2048 КБ
 физический идентификатор: 0
 братья и сестры: 4
 core id: 0
 Процессоры: 2
 апицид: 0
 исходный апицид: 0
 fpu: да
 fpu_exception: да
 Уровень cpuid: 13
 wp: да
 флаги: FPU VME-де-псевдоэфедрин TSC MSR пае MCE CX8 APIC SEP MTRR PGE MCA CMOV погладить pse36 clflush MMX fxsr сс sse2 ХТЫ системного вызова ого mmxext fxsr_opt pdpe1gb rdtscp ого constant_tsc rep_good nopl nonstop_tsc extd_apicid aperfmperf ПНИ PCLMULQDQ монитор SSSE3 CX16 sse4_1 sse4_2 POPCNT АЕС 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: 1536 страниц 4K
 размер clflush: 64
 cache_alignment: 64
 размер адресов: 48 бит физического, 48 бит виртуальных
 управление питанием: ts ttp tm 100mhzsteps hwpstate cpb

 ...и так далее

Приложение представляет собой поточную виртуальную реальность. Он должен быть 90 FPS без латентности. Если разделить на плитки, то частота кадров не является проблемой, которая доказывает, что потоки перепутаны. Единственным кодеком, который не представляет заметной задержки, является mpeg2video.

Я также загрузил и скомпилировал исходный файл ffmpeg версии 3.2.2 и получил те же результаты.