次の方法で共有


ICaptureGraphBuilder2::RenderStream メソッド (strmif.h)

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

メソッドは RenderStream 、ソース フィルターの出力ピンをシンク フィルターに接続します。必要に応じて、中間フィルターを使用します。

構文

HRESULT RenderStream(
  [in] const GUID  *pCategory,
  [in] const GUID  *pType,
  [in] IUnknown    *pSource,
  [in] IBaseFilter *pfCompressor,
  [in] IBaseFilter *pfRenderer
);

パラメーター

[in] pCategory

Pin プロパティ セットに一覧表示されているピン カテゴリのいずれかを指定する GUID へのポインター。 カテゴリに関係なく、任意のピンと一致するには、このパラメーターを NULL に設定 します。 一般的な値は次のとおりです。

  • PIN_CATEGORY_CAPTURE
  • PIN_CATEGORY_PREVIEW
  • PIN_CATEGORY_CC

[in] pType

出力ピンのメディアの種類を指定するメジャー型 GUID へのポインター。メディアの種類に関係なく、任意のピンを使用する場合は NULL 。 使用可能な値の一覧については、「 主な型」を参照してください。

[in] pSource

接続の開始フィルターまたは出力ピンへのポインターを指定します。

[in] pfCompressor

圧縮フィルターなどの中間フィルターの IBaseFilter インターフェイスへのポインター。 NULL を指定できます。

[in] pfRenderer

レンダラーや mux フィルターなど、シンク フィルターの IBaseFilter インターフェイスへのポインター。 値が NULL の場合、メソッドは既定のレンダラーを使用します (「解説」を参照)。

戻り値

HRESULT 値を返します。 可能な戻り値は次のとおりです。

リターン コード 説明
S_OK
正常終了しました。
VFW_S_NOPREVIEWPIN
プレビューは 、スマート ティー フィルターを介してレンダリングされました。
E_FAIL
失敗しました。
E_INVALIDARG
引数が無効です。
E_POINTER
NULL ポインター引数。
VFW_E_NOT_IN_GRAPH
フィルターがフィルター グラフに含まれていません。 このエラーは、 AddFilter を呼び出して pSourcepIntermediate、または pSink をグラフに追加しなかった場合に発生する可能性があります。 また、SetFiltergraph を呼び出してグラフをキャプチャ グラフ ビルダーに接続しなかった場合にも発生する可能性があります。この場合、Capture Graph Builder オブジェクトは、独自のフィルター グラフを自動的に作成します。 「 グラフ ビルダーのキャプチャについて」を参照してください。

注釈

このメソッドは、チェーン内の 2 つ以上のフィルターを接続してストリームをレンダリングします。

  • pSource パラメーターは、フィルターまたは出力ピンのチェーンの開始を指定します。
  • pIntermediate パラメーターは、中間フィルター (通常は圧縮フィルター) を指定します。 このパラメーターは、NULL でもかまいません。
  • pSink パラメーターは、チェーンの末尾にあるフィルターを指定します。 通常、このフィルターはプレビュー用のレンダラーか、ファイル キャプチャ用の mux です。
メソッドは pSourcepIntermediate に接続し、 pIntermediatepSink に接続します。 pIntermediateNULL の場合、メソッドは pSourcepSink に接続するだけです。 pSourcepIntermediate、および pSink で指定されたすべてのフィルターは、 メソッドを呼び出す前にグラフに追加する必要があります。 メソッドは Intelligent Connect を使用するため、デコーダーなどの追加のフィルターがグラフに追加される可能性があります。

pSink パラメーターが NULL の場合、メソッドは既定のレンダラーの使用を試みます。 ビデオの場合は ビデオ レンダラーを使用し、オーディオには DirectSound レンダラーを使用します。

pSource がフィルターの場合、メソッドはそのフィルターで出力ピンを検索します。 その場合は、 pCategory パラメーターと pType パラメーターを使用して検索を絞り込みます。 たとえば、フィルターにプレビューとキャプチャ用の個別のピンがある場合は、PIN_CATEGORY_CAPTUREまたはPIN_CATEGORY_PREVIEWのいずれかを指定できます。 pSource が出力ピンの場合は、pCategorypType を NULL に設定します

いずれの場合も、 メソッドは接続されていないピンを検索します。 複数のピンが指定した条件を満たしている場合、メソッドは最初に見つけたピンを使用します。

DV キャプチャの場合、メディアの種類がMEDIATYPE_Interleavedされ、 pSink パラメーターが NULL の場合、メソッドはインターリーブされたストリームをオーディオ ストリームとビデオ ストリームに分割し、それらの両方のストリームをレンダリングします。

メソッドは RenderStream 、グラフのキャプチャに必要な詳細の多くを処理します。

スマートティー。 一部のキャプチャ フィルターにはキャプチャ ピンがありますが、プレビュー ピンはありません。 プレビューするには、キャプチャ ピンが スマート ティー フィルターに接続されている必要があります。 このフィルターは、キャプチャ ストリームとプレビュー ストリームの 2 つのストリームにデータを分割します。 PIN_CATEGORY_PREVIEWまたはPIN_CATEGORY_CAPTUREを指定すると、必要に応じて Smart Tee フィルターが挿入されます。 次に、指定したストリームを Smart Tee フィルターにレンダリングします。 プレビュー ストリームをレンダリングし、 メソッドで Smart Tee フィルターを使用すると、VFW_S_NOPREVIEWPINが返されます。

クローズド キャプション。 このメソッドを使用して、クローズド キャプションをキャプチャまたはプレビューできます。 キャプチャ フィルターの中には、垂直ブランキング間隔 (VBI) データを提供するものもあれば、クローズド キャプション データを提供するものもあります。 どちらの場合も処理するには、 メソッドを 2 回呼び出し、1 回は PIN_CATEGORY_VBI を使用し、1 回は PIN_CATEGORY_CC を使用します。 メソッドは、VBI データをクローズド キャプションに変換するために必要なフィルターを挿入します。 データをプレビューするには、 pSink パラメーターを NULL に設定 します。 データをファイルにキャプチャするには、マルチプレクサー フィルターの IBaseFilter インターフェイス ポインターを使用します。 同じグラフ内のデータをキャプチャしてプレビューできます。 NULL を使用し、もう一度マルチプレクサーを使用して メソッドを呼び出します。 pIntermediate パラメーターを NULL に設定します

ビデオ ポート ピン。 ビデオ ポート拡張機能 (VPE) ビデオ キャプチャ ハードウェアで動作するフィルターには、プレビュー ピンではなくビデオ ポート ピン (PIN_CATEGORY_VIDEOPORT) が含まれる場合があります。 プレビューまたはキャプチャを機能させるには、ビデオ ポート ピンを オーバーレイ ミキサー フィルターに接続する必要があります。 メソッドは、この詳細を処理します。 PIN_CATEGORY_VIDEOPORTを指定する必要はありません。 PIN_CATEGORY_PREVIEWまたはPIN_CATEGORY_CAPTUREを指定すると、 メソッドによってピンが正しく接続されます。 同様に、一部のフィルターはビデオ ポート ピン (PIN_CATEGORY_VIDEOPORT_VBI) を使用して VBI データを配信します。 PIN_CATEGORY_VIDEOPORTと同様に、 メソッドはこの詳細を処理します。 PIN_CATEGORY_VIDEOPORT_VBIを指定する必要はありません。

フィルターのサポート。 キャプチャ デバイスで Windows ドライバー モデル (WDM) ドライバーが使用されている場合、グラフには、テレビ チューナー フィルターアナログ ビデオ クロスバー フィルターなど、WDM ビデオ キャプチャ フィルターの上流にある特定のフィルターが必要になる場合があります。 このメソッドがストリームを正常にレンダリングすると、グラフに必要な WDM フィルターも挿入されます。 メソッドは、キャプチャ フィルターの入力ピンに対してクエリを実行して、サポートされているメディアを特定し、一致するフィルターに接続します。

コード例

一般的なキャプチャ グラフの場合は、中間フィルターを使用せず、プレビュー ピンを既定のレンダラーに接続します。
C++
// Video: 
pBuilder->RenderStream(&PIN_CATEGORY_PREVIEW, &MEDIATYPE_Video, 
    pCaptureFilter, NULL, NULL); 
// Audio:
pBuilder->RenderStream(&PIN_CATEGORY_PREVIEW, &MEDIATYPE_Audio, 
    pCaptureFilter, NULL, NULL); 
出力するファイルの種類に応じて、キャプチャ ピンを mux フィルターまたはファイル ライター フィルターに接続します。 AVI ファイルの場合は、 AVI Mux フィルターを使用します。 ASF ファイルの場合は、 WM ASF ライター フィルターを使用します。 通常、ICaptureGraphBuilder2::SetOutputFileName メソッドの ppf パラメーターからこのフィルターへのポインターを取得します。
C++
pBuilder->SetOutputFileName(&MEDIASUBTYPE_Avi, L"C:\\Example.avi", 
    &ppf, &pSink);
pBuilder->RenderStream(&PIN_CATEGORY_CAPTURE, &MEDIATYPE_Video,
    pCaptureFilter, NULL, ppf);

ファイル ソース

このメソッドを使用して、ファイルのトランスコードまたは再圧縮を行うことができます。 次の説明では、ファイルに最大 1 つのビデオ ストリームと 1 つのオーディオ ストリーム、または 1 つのインターリーブ ストリームがあることを前提としています。 それ以外の場合、メソッドは正しく機能しません。

ファイル ソースには 1 つの出力ピンがあるため、 pCategorypType を NULL に設定 します。 メソッドを 2 回呼び出します。1 回はビデオ ストリームをレンダリングし、1 回はオーディオ ストリームをレンダリングします。 最初の呼び出しでは、ソース フィルターをパーサー フィルターに接続し、パーサー フィルターの出力ピンの 1 つをレンダリングします。 2 番目の呼び出しでは、パーサーの残りの出力ピンがレンダリングされます。 1 つのストリームを圧縮し、もう一方のストリームを圧縮しない場合は、最初の呼び出しで必ずコンプレッサー フィルターを指定してください。 メソッドは、圧縮の種類に基づいて正しいストリームを自動的に選択します。

C++
pBuilder->RenderStream(NULL, NULL, pSrc, pCompressor, pMux);
pBuilder->RenderStream(NULL, NULL, pSrc, NULL, pMux);
完全な例については、「 AVI ファイルの再圧縮」を参照してください。

要件

要件
対象プラットフォーム Windows
ヘッダー strmif.h (Dshow.h を含む)
Library Strmiids.lib

こちらもご覧ください

グラフ ビルダーを使用したグラフの作成

エラーコードと成功コード

ICaptureGraphBuilder2 インターフェイス

ビデオ キャプチャ