0

MP4ビデオをキャプチャするためのDirectshowアプリケーションを作成しています。以下のグラフを使用してこれを行います。

Input Stream --> MJPEG Decompressor --> x264vfw H.264/MPEG-4 AVC Codec --> GDCL Mpeg-4 Multiplexor --> File Writer

私のdirectshowアプリケーションでは、必要なフィルターを作成してグラフに接続し、最後にファイルライター操作とピンをキャプチャとして使用してストリームを赤くします。私のコードのその部分は以下の通りです。

GUID guid;
guid = MEDIASUBTYPE_x264;

hr = gcap.pBuilder->SetOutputFileName(&guid, gcap.wszCaptureFile,
                                      &g_mp4mux, &gcap.pSink);



hr = gcap.pBuilder->RenderStream(&PIN_CATEGORY_CAPTURE,
                                     &MEDIATYPE_Interleaved,
                                     gcap.pVCap, pVcompFilter, NULL);
if(hr != NOERROR)
{
    hr = gcap.pBuilder->RenderStream(&PIN_CATEGORY_CAPTURE,
                                        &MEDIATYPE_Video,
                                        gcap.pVCap, pVcompFilter, NULL);
    if(hr != NOERROR)
    {
        ErrMsg(TEXT("Cannot render video capture stream"));
        TearDownGraph();
        return FALSE;
    }
}

上記のコードについて

g_mp4muxGDCL MPEG-4 Muliplexrer ファイラーです

PVcompFilterx264vfw H.264/MPEG-4 AVC codecフィルターです

上記のコードを実行すると、HR=が得られますE_INVALIDARG

上記のコードの何が問題なのかわかりません。Plzヘルプ。ありがとう。

4

1 に答える 1

1

RenderStream内部でいくつかの手順を実行し、シーケンス中にエラーが発生した場合、エラーは詳細なしで転送されます。したがって、E_INVALIADRGあなたが持っているのはそれだけです、あなたはこれがあなたの呼び出しまたはいくつかの内部の間違った議論であるかどうかわかりません。

手始めに、引数を確認し(3番目と4番目のパラメーターでsを渡す可能性がありNULLます)、役に立たない場合は、RenderStreamをIGraphBuilder :: Connectなどの直接グラフ構築呼び出しに置き換えて、エラーの詳細を確認してください。

クロスポストについても言及してください:msdn.microsoft.com

于 2012-05-16T05:53:23.620 に答える