次の方法で共有


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

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

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

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

このグラフのフィルターは次のとおりです。

  • AVI スプリッターは AVI ファイルを解析します。 タイプ 1 DV ファイルの場合、出力ピンはインターリーブ DV サンプルを提供します。
  • Infinite Pin Tee フィルターは、インターリーブされた DV を送信ストリームとプレビュー ストリームに分割します。 両方のストリームに同じインターリーブ データが含まれています。 (このグラフでは、ライブ キャプチャと同様に、ファイルから読み取るときにフレームをドロップする危険性がないため、 スマート ティーの代わりに無限ピン ティーを使用します)。
  • DV スプリッターは、インターリーブされたストリームを DV ビデオ ストリームに分割します。これは、DV ビデオ デコーダーによってデコードされ、オーディオ ストリームです。 どちらのストリームもプレビュー用にレンダラーされます。

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

ICaptureGraphBuilder2 *pBuilder;  // Capture graph builder.
IBaseFilter           *pDV;       // DV capture filter (MSDV)

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

// 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");

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

// Add the AVI Splitter filter to the graph.
IBaseFilter *pAviSplit;
hr = CoCreateInstance(CLSID_AviSplitter, 0, CLSCTX_INPROC_SERVER
    IID_IBaseFilter, reinterpret_cast<void**>)(&pAviSplit));
hr = pGraph->AddFilter(pAviSplit, L"AVI Splitter");

// Connect the file source to the AVI Splitter.
hr = pBuilder->RenderStream(0, 0, pFileSource, 0, pAviSplit);
if (FAILED(hr))
{
    // This is not an AVI file. 
}

// Connect the file source to the Infinite Pin Tee.
hr = pBuilder->RenderStream(0, &MEDIATYPE_Interleaved, pAviSplit, 0, pTee);
if (FAILED(hr))
{
    // This is not a type-1 DV file.
}

// Render one stream from the Infinite Pin Tee to MSDV, for transmit.
hr = pBuilder->RenderStream(0, 0, pTee, 0, pDV);

// Render another stream from the Infinite Pin Tee for preview.
hr = pBuilder->RenderStream(0, 0, pTee, 0, 0);
  1. IGraphBuilder::AddSourceFilter を呼び出して、フィルター グラフにソース フィルターを追加します。
  2. AVI スプリッターと無限ピン ティーを作成し、グラフに追加します。
  3. ICaptureGraphBuilder2::RenderStream を呼び出して、ソース フィルターを AVI スプリッターに接続します。 MEDIATYPE_Interleavedを指定して、ソース ファイルが type-1 DV ファイルでない場合にメソッドが失敗することを確認します。 その場合は、バックアウトして、代わりに type-2 送信グラフを作成できます。
  4. 再び RenderStream を呼び出して、AVI スプリッターから無限ピン ティーにインターリーブ ストリームをルーティングします
  5. RenderStream を 3 回目に呼び出して、1 つのストリームを Infinite Pin Tee から MSDV フィルターにルーティングして、デバイスに送信します。
  6. 最後に RenderStream を呼び出して、グラフのプレビュー セクションを作成します。

プレビューが不要な場合は、ファイル ソースを MSDV フィルターに接続するだけです。

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

DirectShow でのデジタル ビデオ