強化されたビデオ レンダラー
[このページで説明されているコンポーネントである拡張ビデオ レンダラーは、レガシ機能です。 これは、MediaPlayer および IMFMediaEngine コンポーネントを介して公開される単純なビデオ レンダラー (SVR) に置き換えられました。 ビデオ コンテンツを再生するには、これらのコンポーネントのいずれかにデータを送信し、新しいビデオ レンダラーをインスタンス化できるようにする必要があります。 これらのコンポーネントは、Windows 10 および Windows 11 用に最適化されています。 Windows でビデオ メディアを再生する新しいコードでは、可能な場合は、EVR ではなく、MediaPlayer または下位レベルの IMFMediaEngine API を使うことを強くお勧めします。 Microsoft は、レガシ API を使用する既存コードを、新しい API を使用するように可能であれば書き直すことを提案しています。]
拡張ビデオ レンダラー (EVR) は、ユーザーのモニターにビデオを表示するコンポーネントです。 EVR には 2 つのバージョンがあります。
- メディア ファンデーション アプリケーション用の EVR メディア シンク。
- DirectShow アプリケーション用の EVR フィルター。
どちらのバージョンも同じ内部オブジェクトを使ってビデオをレンダリングし、同じインターフェイスの多くを共有します。
EVR は最大 16 個のビデオ ストリームをミックスできます。 最初の入力ストリームは、"参照ストリーム" と呼ばれます。 参照ストリームは常に Z オーダーの最初に出現します。 その他のストリームはすべて "サブストリーム" と呼ばれ、参照ストリームの上にミックスされます。 アプリケーションはサブストリームの Z オーダーを変更できますが、サブストリームを Z オーダーの最初にすることはできません。
グラフィックス ドライバーによってサポートされるビデオ形式が決まりますが、通常は以下に限定されます。
- 参照ストリーム: ピクセル単位のアルファがないプログレッシブまたはインターレース YUV (NV12 や YUY2 など)。またはプログレッシブ RGB。
- サブストリーム: AYUV や AI44 など、ピクセル単位のアルファがあるプログレッシブ YUV。
使用できるサブストリーム形式は、参照ストリームの形式によって異なります。 詳細については、「EVR メディアの種類のネゴシエーション」を参照してください。
内部的には、EVR は "ミキサー" と呼ばれるオブジェクトを使い、入力ストリームのフレームを 1 つの画面に合成してレンダリングします。 ミキサーは、インターレース解除と色補正も実行します。 ミキサーからの出力は、最終的な合成ビデオ フレームです。 "プレゼンター" と呼ばれる 2 つ目のオブジェクトは、ビデオ フレームをディスプレイにレンダリングします。 プレゼンターは、フレームがレンダリングされるタイミングをスケジュールし、Direct3D デバイスを管理します。 アプリケーションは、ミキサーまたはプレゼンターのカスタム実装を提供できます。
出力フレーム レートは参照ストリームにロックされます。 サブストリームが新しいフレームを受信するたびに、ミキサーはそれらのフレームを保持します。 参照ストリームが新しいフレームを受信すると、ミキサーはそのフレームをサブストリーム フレームと合成します (参照ストリームがインターレースである場合、完全な参照フレームには複数のメディア サンプルが必要になる場合があります)。ミキサーが参照フレームを待機している間に、サブストリームが複数のフレームを受信する可能性があります。 その場合、ミキサーは前のサブストリーム フレームを単に破棄します。
プレゼンターは Direct3D デバイスを作成するため、DirectX ビデオ アクセラレーション (DXVA) サービスにアクセスする必要がある他のパイプライン オブジェクトとデバイスを共有する役割も担います。 特に、EVR ミキサーは、DXVA ビデオ処理サービスを使って、ビデオのインターレース解除とミキシングを行います。 EVR の外部で、ソフトウェア デコーダーはビデオ デコードを高速化するために DXVA を使う場合があります。 プレゼンターは、Direct3D デバイス マネージャーを使って Direct3D デバイスを共有します。 次の図は、EVR の内部アーキテクチャを示しています (灰色で網掛けされているソフトウェア デコーダーは EVR の一部ではありません)。
EVR のインターフェイス
EVR では、次のインターフェイスがサポートされています。 これらのインターフェイスの一部は、ミキサーまたはプレゼンターによって実装されます。 各インターフェイスのリファレンス トピックでは、インターフェイスへのポインターを取得する方法について説明しています。
Interface | 説明 |
---|---|
IEVRFilterConfig | EVR フィルターの入力ピンの数を設定します (DirectShow のみ)。 |
IEVRFilterConfigEx | EVR フィルターを構成します (DirectShow のみ)。 |
IEVRTrustedVideoPlugin | EVR プラグインが保護されたビデオをレンダリングできるようにします。 |
IMFDesiredSample | EVR プレゼンターがミキサーに特定のフレームを要求できるようにします。 |
IMFQualityAdvise | 品質マネージャーが EVR のビデオ品質を調整できるようにします。 |
IMFTopologyServiceLookup | カスタム ミキサーまたはプレゼンターが EVR からインターフェイス ポインターを取得できるようにします。 |
IMFVideoDeviceID | EVR ミキサーまたはプレゼンターのデバイス識別子を返します。 |
IMFVideoDisplayControl | EVR がビデオを表示する方法を制御します。 |
IMFVideoMixerBitmap | 静的ビットマップ画像をビデオにアルファブレンドします。 |
IMFVideoMixerControl | 拡張ビデオ レンダラー (EVR) がビデオ サブストリームをミックスする方法を制御します。 |
IMFVideoMixerControl2 | ビデオのインターレース解除の設定を制御します。 |
IMFVideoPositionMapper | 入力ビデオ ストリーム上の位置を、出力ビデオ ストリーム上の対応する位置にマップします。 |
IMFVideoPresenter | EVR プレゼンターによって公開されます。 |
IMFVideoProcessor | 調整、ノイズ フィルター、詳細フィルターなどのビデオ処理を制御します。 |
IMFVideoRenderer | EVR のミキサーまたはプレゼンターを設定します。 |
IMFVideoSampleAllocator | ビデオ サンプルを割り当てます。 |
このセクションの内容
トピック | 説明 |
---|---|
DirectShow EVR フィルターの使用 | DirectShow アプリケーションで EVR を使う方法。 |
EVR メディア シンクの使用 | メディア ファンデーション アプリケーションで EVR を使う方法。 |
ビデオ表示コントロールの使用 | EVR がアプリケーション ウィンドウ内でビデオを表示する方法を制御する方法。 |
ビデオ ミキサー コントロールの使用 | EVR ミキサーの動作方法を制御する方法。 |
EVR メディアの種類のネゴシエーション | EVR が入力として受け入れることができるビデオ形式を決定する方法について説明します。 |
カスタム ミキサー | EVR のカスタム ミキサーを作成する方法。 |
EVR プレゼンターを作成する方法 | EVR のカスタム プレゼンターを作成する方法。 |
関連トピック