拡張ビデオ レンダラー
[このページで説明するコンポーネント 拡張ビデオ レンダラーは、従来の機能です。 これは、MediaPlayer および IMFMediaEngine コンポーネントを介して公開される Simple Video Renderer (SVR) に置き換わりました。 ビデオ コンテンツを再生するには、これらのコンポーネントのいずれかにデータを送信し、新しいビデオ レンダラーをインスタンス化できるようにする必要があります。 これらのコンポーネントは、Windows 10 および Windows 11 用に最適化されています。 新しいコードでは、可能な場合は、MediaPlayer または IMFMediaEngine API 下位レベルを使用して、EVR ではなく Windows でビデオ メディアを再生することを強くお勧めします。 従来の API を使用する既存のコードは、可能であれば新しい API を使用するように書き直すよう提案しています。
拡張ビデオ レンダラー (EVR) は、ユーザーのモニターにビデオを表示するコンポーネントです。 EVR の 2 つのバージョンが存在します。
- Media Foundation アプリケーション用の 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 Device Managerを使用して Direct3D デバイスを共有します。 次の図は、EVR の内部アーキテクチャを示しています。 (ソフトウェア デコーダーは灰色で網掛けされ、EVR の一部ではありません)。
evr を示すアーキテクチャ図
EVR インターフェイス
EVR では、次のインターフェイスがサポートされています。 これらのインターフェイスの一部は、ミキサーまたは発表者によって実装されます。 各インターフェイスについて、リファレンス トピックでは、インターフェイスへのポインターを取得する方法について説明します。
インターフェイス | 形容 |
---|---|
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 メディア シンク の使用の | Media Foundation アプリケーションで EVR を使用する方法。 |
ビデオディスプレイコントロール を使用する | EVR がアプリケーション ウィンドウ内でビデオを表示する方法を制御する方法。 |
ビデオ ミキサー コントロールを使用した | EVR ミキサーの動作方法を制御する方法。 |
EVR メディア タイプ ネゴシエーション | 入力として受け入れ可能なビデオ形式を EVR が決定する方法について説明します。 |
カスタム ミキサー の | EVR のカスタム ミキサーを作成する方法。 |
EVR 発表者の を記述する方法 | EVR のカスタム 発表者を作成する方法。 |
関連トピック