次の方法で共有


Type-2 DV ファイルをキャプチャする

[このページに関連付けられている機能 DirectShow は、従来の機能です。 MediaPlayer、IMFMediaEngine、Media Foundation のオーディオ/ビデオ キャプチャに置き換わりました。 これらの機能は、Windows 10とWindows 11用に最適化されています。 新しいコードでは、可能であれば、DirectShow ではなく Media Foundation で MediaPlayerIMFMediaEngineAudio/Video Capture を使用することを強くお勧めします。 Microsoft は、レガシ API を使用する既存のコードを、可能であれば新しい API を使用するように書き換えるよう提案しています。]

タイプ 2 DV AVI ファイルには、DV ビデオを含むストリームとオーディオを含むストリームの 2 つがあります。 プレビュー中に Type-2 ファイルをキャプチャするには、次の図に示すフィルター グラフを使用します。

プレビューを使用した type-2 キャプチャ

このグラフは、タイプ 1 キャプチャのグラフとほぼ同じです (「 Type-1 DV ファイルをキャプチャする」を参照)。 ただし、キャプチャ ストリームは、AVI Mux フィルターに到達する前に DV スプリッター フィルターを通過します。 したがって、AVI Mux は、オーディオ ストリームと DV でエンコードされたビデオ ストリームの 2 つのストリームを受け取ります。

次のようにこのグラフを作成します。

ICaptureGraphBuilder2 *pBuilder;  // Capture graph builder.
IBaseFilter           *pDV;       // DV capture filter (MSDV)
IBaseFilter           *pAviMux    // Avi Mux filter.
IBaseFilter           *pDVSplit;  // DV Splitter

// Initialize pDV (not shown). 
// Create and initialize the Capture Graph Builder (not shown).

// Create the DV Splitter and add it to the filter graph.
hr = CoCreateInstance(CLSID_DVSplitter, 0, CLSCTX_INPROC_SERVER,
    IID_IBaseFilter, reinterpret_cast<void**>)(&pDVSplit));
hr = pGraph->AddFilter(pDVSplit, L"DV Splitter");

// Create the file-writing section of the graph.
hr = pBuilder->SetOutputFileName(&MEDIASUBTYPE_Avi,
    OLESTR("C:\\Example2.avi"), &pAviMux, 0);

// Connect the capture pin to the DV Splitter, and render one stream from
// the DV Splitter to the AVI Mux. 
hr = pBuilder->RenderStream(&PIN_CATEGORY_CAPTURE, &MEDIATYPE_Interleaved, 
    pDV, pDVSplit, pAviMux);

// Render the other stream from the DV splitter to the AVI Mux.
hr = pBuilder->RenderStream(0, 0, pDVSplit, 0, pAviMux);

// Render the preview stream.
hr = pBuilder->RenderStream(&PIN_CATEGORY_PREVIEW, &MEDIATYPE_Interleaved, 
    pDV, 0, 0);

// Remember to release all interfaces.
  1. DV スプリッターを作成し、フィルター グラフに追加します。
  2. ICaptureGraphBuilder2::SetOutputFileName を呼び出して、AVI Mux フィルターをファイル ライター フィルターに接続します。
  3. ICaptureGraphBuilder2::RenderStream を呼び出して、MSDV キャプチャ フィルターを DV スプリッターに接続します。 この呼び出しは、DV スプリッターの出力ピンの 1 つを AVI Mux に接続します。
  4. 再び RenderStream を呼び出して、DV スプリッターの他のピンを AVI Mux に接続します。
  5. RenderStream を 3 回目に呼び出して、プレビュー ストリームをレンダリングします。 ビデオをプレビューしない場合は、この手順をスキップします。

DirectShow のデジタル ビデオ