2

画面をビデオ ストリームにキャプチャする作業を行った人はいますか (ローカル ファイルに保存するか、ネットワークに送信するため)。

私はそれがどのように行われるかを理解しており、いくつかのテストソリューションが機能していますが、まともなパフォーマンスを達成するのに苦労しています. CPU がすでに大量に使用されているコンピューターで、テキストやベクトル グラフィックを変更する約 4 メガピクセルの画面スペースをキャプチャする必要があります。

圧縮されていない BMP フレームをネットワークに送信することで、許容できる (望ましいとは言えませんが) パフォーマンスが得られますが、多くの理由から、少なくともオンサイトでの圧縮が重要です。

できるだけ少ない処理能力を使用してエンコードする方法に関する提案: 非常に高速なコーデックである可能性がありますか? または、メモリ内の画像をコピーしないようにするためのいくつかのトリックはありますか? DirectX (ほとんどの画面は WPF) で画面をキャプチャする価値はありますか?

4

4 に答える 4

2

わかりました...私はそれを試したことがないので、これは野蛮な推測です...しかしそれはもっともらしいようです。NvidiaCUDAを使うべきだと思います。例えば:

(メモリ内の)画像からテクスチャを作成し、後で圧縮できると考えていました。CUDA SDKには、DirectX Texture Compressor(DXTC)のサンプルがあります。

CUDAを使用した高品質のDXT圧縮。この例は、既存の計算集約型CPU圧縮アルゴリズムをGPUに並列に実装し、パフォーマンスを1桁向上させる方法を示しています。

(ビデオメモリの量に応じて)いくつかのテクスチャをメモリに保存し、それらを別のスレッドのディスク/ソケットに書き込むことができます。

これは単なる提案です...CUDAを使用してエンコーディングアルゴリズム( TMPGEncを参照)を実装して負荷をCPUからGPUに移動するのが最善の方法だと思いますが、これは注意が必要で、多くの作業が必要です。

于 2009-09-01T12:00:06.830 に答える
1

CUDA とスクリーン キャプチャを検索しているときにこれに遭遇したので、自分の経験を追加する必要があると考えました。過去に、VNC と FFMPEG を使用してソリューションを作成しました。VNC プロトコルを見ると、新しいイメージを使用してデルタ ウィンドウに基づいて送信を行っていることがわかります。基本的に、前の画面 + 変更 = 新しい画面です。伝達する必要があるのは変更だけです。送信コストを最小限に抑えるための多くのトリックと、データを転送するためのさまざまなペイロード拡張を見つけることができます。得られた知識を自分で展開することにした場合でも、これは優れたリソースです。VNC を使用してピクセル データを移動すると、生のピクセル データは jpeg データよりも CPU に負荷がかかることがわかりました。これは、バッファ コピーが圧縮よりもコストがかかるためです。

于 2010-02-28T06:20:55.173 に答える
0

多くのソフトウェアは、xvidcap や camstudio などのグラフィカル インターフェイスを使用してこれを行いますが、ffmpeg が適切な解決策になる場合があります ...

于 2009-09-01T08:18:11.973 に答える
0

私にとっては、ffmpeg + directshow スクリーン キャプチャデバイス+ huffyyuv を使用すると、ほとんど CPU を使用しません。しかし、大量のディスク/帯域幅:)

于 2011-09-20T23:07:21.607 に答える