avconv/ffmpeg スレッドが機能しません。

avconv/ffmpeg スレッドが機能しません。

私が何か間違っているのですか?それとも「avconv」のスレッドオプションが壊れていますか?私はH264とmpeg2videoの「-threads」オプションを試しましたが、どんな値(0〜4)を与えてもパフォーマンスに違いはありませんでした。

画面を複数の640x640タイルに分割し、同時に各タイルに対して別々のavconvインスタンスを実行すると、1タイルあたり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.1

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 ni 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_pstatevm cale 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をダウンロードしてコンパイルし、同じ結果を得ました。

関連情報