次の方法で共有


Type-2 ファイルからの送信

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

プレビュー中に type-2 ファイルを送信するには、次の図に示すフィルター グラフを使用します。

プレビュー付き type-2 送信

タイプ 2 ファイルには、オーディオ ストリームと DV エンコードビデオ ストリームの 2 つのストリームがあります。 このグラフでは、 DV Muxer フィルターを使用してオーディオ ストリームとビデオ ストリームを組み合わせます。 インターリーブされたストリームを MSDV フィルターに送信しますが、プレビューのためにストリームをもう一度分割します。

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

// Add the DV Mux filter to the graph.
IBaseFilter *pDVMux;
hr = CoCreateInstance(CLSID_DVMux, 0, CLSCTX_INPROC_SERVER
    IID_IBaseFilter, reinterpret_cast<void**>)(&pDVMux));
hr = pGraph->AddFilter(pDVMux, L"DV Mux");

// Add the File Source filter to the graph.
IBaseFilter *pFileSource;
hr = pGraph->AddSourceFilter(L"C:\\Example2.avi", L"Source", 
    &pFileSource);

hr = pBuilder->RenderStream(0, 0, pFileSource, 0, pDVMux);
hr = pBuilder->RenderStream(0, 0, pFileSource, 0, pDVMux);

// Add the Infinite Pin Tee filter to the graph.
IBaseFilter *pTee;
hr = CoCreateInstance(CLSID_InfTee, 0, CLSCTX_INPROC_SERVER
    IID_IBaseFilter, reinterpret_cast<void**>)(&pTee));
hr = pGraph->AddFilter(pTee, L"Tee");

hr = pBuilder->RenderStream(0, 0, pDVMux, 0, pTee);
hr = pBuilder->RenderStream(0, 0, pTee, 0, pDV);
hr = pBuilder->RenderStream(0, &MEDIATYPE_Interleaved, pTee, 0, 0);

このコードでは、 RenderStream を複数呼び出します。

最初の 2 つでは、ソース フィルターを AVI スプリッターに接続し、AVI スプリッターを DV Mux に接続します。 最初の呼び出しでは、キャプチャ グラフ ビルダーによって自動的に AVI スプリッターがグラフに追加され、AVI スプリッターの出力ピンの 1 つが DV Mux に接続されます。 2 番目の呼び出しでは、キャプチャ グラフ ビルダーは、AVI スプリッターの 2 番目の出力ピンを検索し、DV Mux に接続します。

RenderStream の 3 番目の呼び出しは、DV Muxer を無限ピン ティー フィルターに接続します。 次の呼び出しでは、無限ピン ティーから MSDV キャプチャ フィルターに 1 つのストリームを接続します。 このストリームはデバイスに送信されます。 RenderStream の最後の呼び出しでは、グラフのプレビュー セクションがビルドされます。

送信中にプレビューしない場合は、無限ピン ティーを省略し、DV Mux を MSDV フィルターに接続するだけです。

hr = pBuilder->RenderStream(0, 0, pDVMux, 0, pDV);

DirectShow のデジタル ビデオ