avconv / ffmpeg 线程不起作用

avconv / ffmpeg 线程不起作用

我做错了什么或者“avconv”中的线程选项损坏了吗?我尝试了 H264 和 mpeg2video 的“-threads”选项,无论我给它什么值(0 到 4),性能都没有任何差异。

如果我将屏幕分成多个 640x640 的图块,并同时为每个图块运行单独的 avconv 实例,则每个图块都会获得 90 FPS。

如果我只创建一个 2560x1440 ffmpeg 流,我会得到 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 -线程 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
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
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
中央处理器兆赫:2900.000
缓存大小:2048 KB
物理 ID:0
兄弟姐妹:4
核心编号:0
CPU核心:2
辣椒素 : 0
初始 apicid : 0
FPU:是的
fpu_异常:是的
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 监视器sse3 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_cleanlushbyasid 解码助手暂停过滤器pf阈值
错误:fxsave_leak sysret_ss_attrs
波哥米普:8456.93
TLB大小:1536 4K页
clflush 大小:64
缓存对齐:64
地址大小:48 位物理地址,48 位虚拟地址
电源管理:ts ttp tm 100mhzsteps hwpstate cpb

...等等

该应用程序是流媒体虚拟现实。它需要是 90 FPS 并且没有延迟。如果分成图块,帧速率不是问题,这证明线程混乱了。唯一不会引入任何明显延迟的编解码器是 mpeg2video。

我还从源最新的 ffmpeg - 版本 3.2.2 下载并编译并得到相同的结果。

相关内容