0

次のコードを使用して、Web カメラからキャプチャし、同時にビデオをプレビューしようとしています ( pRendererはウィンドウ化された VMR9 フィルターを指し、 mPMuxはICaptureGraphBuilder2::SetOutputFileNameによって返されるマルチプレクサーを指します)。

hr = mPBuild->RenderStream(
    &PIN_CATEGORY_PREVIEW,
    &MEDIATYPE_Video,
    mPCapVideo,
    NULL,
    pRenderer);

hr = mPBuild->RenderStream(
    &PIN_CATEGORY_CAPTURE,
    &MEDIATYPE_Video,
    mPCapVideo,
    NULL,
    mPMux);

プレビューは問題ないように見えますが、キャプチャされたビデオは解像度が 352x288 しかなく、ひどく歪んでおり、その中に自分の顔の 2 つのインスタンスをまだ認識できますが、明るい緑色の領域があふれ、インターレース アーティファクトが表示されます。このビデオのレンダリングに失敗するのは Windows Media Player のみのようです。VLC と Quicktime は正しくレンダリングされた 352x288 ビデオを表示します。

デフォルトのレンダラーを使用する場合:

hr = mPBuild->RenderStream(
    &PIN_CATEGORY_PREVIEW,
    &MEDIATYPE_Video,
    mPCapVideo,
    NULL,
    NULL);

hr = mPBuild->RenderStream(
    &PIN_CATEGORY_CAPTURE,
    &MEDIATYPE_Video,
    mPCapVideo,
    NULL,
    mPMux);

キャプチャされた AVI のサイズは 640x480 で、Media Player を含むすべてのプレーヤーで適切に再生できます。

キャプチャされたファイルであっても、VMR9 がグラフ全体にビデオ サイズを課しているようです。この直感は、 IMediaControl::Runの呼び出しの直前に配置された次のコードによって確認されます。

IBasicVideo *pBasicVideo;
hr = mPGraph->QueryInterface(IID_PPV_ARGS(&pBasicVideo));
long w, h;
hr = pBasicVideo->GetVideoSize(&w, &h);

デフォルトのレンダラーではwhは 640, 480 ですが、私の VMR9 インスタンスでは 352, 288 です。

** 編集 **

問題は、ある時点で、何らかの理由で、カメラの出力 PIN の形式が次の形式から切り替わることでした。

RGB24
352x288

に:

I420
352x288

そして、Media Player は AVI 内のそのようなフォーマットに問題があると思います。興味深いことに、Explorer のビデオのサムネイルは問題なく、最初のフレームを適切な色で見ることができました。

4

2 に答える 2

2

RenderStreamは、他の DirectShow API メソッドの高レベル ラッパーであり、欠落部分を埋めるためのストリーミング パイプライン (フィルター グラフ) を構築します。Intelligent Connectを積極的に使用しているため、そこに不要なフィルターや、通話時までに既に持っているフィルターのメディア タイプ (フォーマット) に影響を与える可能性のあるフィルターなど、知らない新しいフィルターが追加されている可能性があります。 .

これは、フォーマットが不明な理由で 640x480 から 352x288 に変更された原因である可能性があります。効果的なトポロジーを推測するのは難しく、それを見つけるのはあなた次第です。より信頼性の高い方法はRenderStream、関心のある特定のフィルターを追加して接続することにより、より制御しやすい方法でより小さな増分でグラフを回避および構築することです。

于 2013-11-19T20:04:00.327 に答える
2

2 つのフィルターを接続する場合、ビデオ形式 (解像度を含む) が一致している必要があります。異なるレンダラーは異なる形式を好む可能性があるため、この動作が得られます。IAMStreamConfig インターフェイスのウェブカメラの出力ピンをクエリして、サポートされている形式のリストを取得し、必要なものを選択できます。キャプチャしたビデオの再生に関する問題は、ヘッダーが正しくないために発生するはずでした。実際のビデオ形式は、ファイル ヘッダーで指定されたものではありませんでした。

于 2013-11-11T08:24:12.590 に答える