1

アプリケーションでDirectShowを使用して、Webカメラからビデオをキャプチャしています。カメラを使用して1080Pビデオをプレビューおよびキャプチャするときに問題が発生します。例:LogitechのHD ProWebcamC910カメラ。1080Pビデオプレビューは非常にぎくしゃくしていて、HDの鮮明さは観察されませんでした。列挙されたデバイス名は「USBビデオデバイス」であることがわかりました

今日、これらのXPマシンにLogitechWebカメラソフトウェアをインストールしました。そのアプリケーションでは、ジャークすることなく1080Pビデオを見ることができました。また、Logitechアプリケーションで1080Pビデオを録画し、高品質で見ました。

しかし、アプリケーションをテストすると、

  1. 列挙されたデバイス名が、前の場合のように「USBビデオデバイス」ではなく「LogitechProWebcamC910」に変更されていることがわかります。

  2. 私のアプリケーションが消費するCPUは20%ですが、プロセス「SYSTEM」は60%以上を消費し、CPU全体は約100%回転します

    1. ビデオ品質が大幅に改善されたとしても、100%CPUが原因である可能性があります。

    2. アプリケーションを閉じると、「システム」プロセスによる高いCPU使用率がなくなります。

私のアプリケーションについて-ICaptureGraphBuilder2::RenderStreamを使用してプレビューストリームとキャプチャストリームを作成します。

キャプチャストリームでは、中間フィルターとしてサンプルグラバーを使用してカメラフィルターをNULLレンダラーに接続します。

プレビューストリームでは、

g_pBuild->RenderStream(&PIN_CATEGORY_PREVIEW,&MEDIATYPE_Video,cam,NULL,NULL); 

プレビューは、IVideoWindowインターフェイスを使用して指定されたウィンドウに表示されます。私は以下を使用します

g_vidWin->put_Owner((OAHWND)(HWND)hWnd);
g_vidWin->put_WindowStyle(WS_CHILD | WS_CLIPSIBLINGS);
g_vidWin->put_MessageDrain((OAHWND)hWnd);

フレームレートをさまざまな値(AvgTimePerFrame = 500000(20 fps)および666667(15 fps)など)に設定してみました。

しかし、すべての試行で、同じ結果が得られます。明瞭さは増していますが、「システム」による60%以上の利用により、まだいくつかのジャークが残っており、CPUはほぼ100%です。ビデオアプリケーションを閉じると、「システム」による使用率が1〜2%に戻ります。

これに関するどんな助けでも大歓迎です。

前もって感謝します、

4

1 に答える 1

0

IAMStreamConfig.SetFormat()を使用して、キャプチャ デバイスからの出力ストリーム (キャプチャおよびプレビュー) のフレーム レート、サイズ、色空間、および圧縮を選択します。

余談ですが、 「ソースフィルター自体のレートは変わらない」という上記のコメントは完全に間違っています。このインターフェイスの全体的な目的は、キャプチャしたビデオの出力形式とフレームレートを定義することです。

IAMStreamConfig.GetStreamCaps()を使用して、使用可能なフレーム レート、サイズ、色空間、および圧縮形式を確認します。ほとんどのカメラは、さまざまなフォーマットを提供しています。

あなたが直面している根本的な問題は、USB帯域幅(少なくともUSB3より前)が圧縮なしで30fps 1080Pを維持できないことです。私は、USB カメラの Microsoft LifeCam Studio ファミリに最も精通しています。これらのデバイスは、ハードウェア圧縮を実行してビデオをネットワーク経由で送信し、受信側で圧縮ビデオを Motion JPEG から変換するために CPU のかなりの部分を消費します。 YUV形式に。おそらく、Logitech カメラも同様の方法で動作します。

カメラが生成するフレームレートは、ソフトウェアでオート フォーカス、自動色補正、および自動露出を実行する追加のワークロードの影響を受けます。可能であれば、カメラのこれらの機能をすべて無効にしてみてください。Skype の時代には、カメラのソフトウェアとハ​​ードウェアは、より良い画質を優先して高いフレームレートを維持することにあまり注意を払わなくなりました。

キャプチャの DirectShow タイミング モデルは、カメラがフレームの欠落を示している限り、要求されたレートでフレームを生成できない場合でも引き続き機能します。これは、キャプチャされた各フレームに付随する「ドロップ フレーム」カウント フィールドを使用して行われます。ドロップされたフレームと「実際の」フレームの合計は、IAMStreamConfig.SetFormat()で設定された要求されたフレーム レートと等しくなければなりません

I7 で LifeCam Studio を使用して、プレビュー付きで 30fps 720p でキャプチャし、H.264 に圧縮し、CPU の約 30% を使用して .mp4 ファイルをディスクに書き込みました。カメラでは無効になっています。

于 2013-03-15T08:24:23.120 に答える