ビデオ表示コントロールの使用

[このページで説明されているコンポーネントである拡張ビデオ レンダラーは、レガシ機能です。 これは、MediaPlayer および IMFMediaEngine コンポーネントを介して公開される単純なビデオ レンダラー (SVR) に置き換えられました。 ビデオ コンテンツを再生するには、これらのコンポーネントのいずれかにデータを送信し、新しいビデオ レンダラーをインスタンス化できるようにする必要があります。 これらのコンポーネントは、Windows 10 および Windows 11 用に最適化されています。 新しいコードでは、可能な場合は EVR ではなく、Windows でビデオ メディアを再生するために、MediaPlayer または下位レベルの IMFMediaEngine API を使用することを強くお勧めします。 Microsoft は、レガシ API を使用する既存コードを、新しい API を使用するように可能であれば書き直すことを提案しています。]

IMFVideoDisplayControl インターフェイスによって、拡張ビデオ レンダラー (EVR) がアプリケーション ウィンドウ内でビデオを表示する方法が制御されます。 このインターフェイスは、DirectShow またはメディア ファンデーションで使用できます。 内部的には、ビデオ表示コントロールは、EVR の既定のプレゼンターによって提供されます。 カスタム プレゼンターを作成する場合は、同じインターフェイスを指定するか、カスタム インターフェイスを定義できます。

IMFVideoDisplayControl インターフェイスへのポインターを取得する正しい方法は、EVR の DirectShow バージョンとメディア ファンデーション バージョンのどちらを使用しているかによって異なります。 メディア ファンデーション EVR の場合、EVR を直接使用するか、メディア セッション (より一般的) を通じて使用するかによっても異なります。

IMFVideoDisplayControl インターフェイスへのポインターを取得するには、次の操作を行います。

  1. IMFGetService インターフェイスへのポインターを取得します。

    • DirectShow EVR フィルターを使用している場合は、フィルターで QueryInterface を呼び出します。

    • EVR メディア シンクを直接使用している場合は、メディア シンクで QueryInterface を呼び出します。

    • メディア セッションを使用している場合は、メディア セッションで QueryInterface を呼び出します。

  2. メディア セッションを使用している場合は、メディア セッションが状態値 MF_TOPOSTATUS_READY を含む MESessionTopologyStatus イベントを送信するまで待機します。 (それ以外の場合は、この手順をスキップしてください)。

  3. IMFGetService::GetService を呼び出して、IMFVideoDisplayControl インターフェイスを取得します。 サービス識別子は MR_VIDEO_RENDER_SERVICE です。

IMFVideoDisplayControl インターフェイスを使用して、次のタスクを実行できます。

  • クリッピング ウィンドウを設定する。

  • ソースと変換先の四角形を設定する。

  • ウィンドウ メッセージに応じてビデオ ウィンドウを更新する。

  • 全画面表示モードを有効または無効にする。

クリッピング ウィンドウ

アプリケーションでは、EVR がビデオを描画するウィンドウを提供する必要があります。 クリッピング ウィンドウを設定するには、アプリケーション ウィンドウのハンドルを使用して IMFVideoDisplayControl::SetVideoWindow を呼び出します。

ライセンス認証オブジェクトを使用して EVR メディア シンクを作成する場合、この手順は必要ありません。 ライセンス認証オブジェクトでは、MFCreateVideoRendererActivate 関数で指定したウィンドウ ハンドルを使用して、SetVideoWindow を自動的に呼び出します。

ソースとコピー先の四角形

再生中、プレゼンターは合成されたビデオ画像の一部を取得し、ビデオ ウィンドウの領域に描画します。 合成画像の一部は ''ソース四角形'' であり、ビデオ ウィンドウの領域は ''変換先四角形'' です。

ソース四角形は正規化された座標を使用して定義されます。点 (0.0, 0.0) はビデオの左上隅に対応し、(1.0, 1.0) はビデオの右下隅に対応します。 ソース四角形は、この四角形内の任意の領域にすることができます。 変換先四角形は、ウィンドウのクライアント領域を基準にピクセル単位で指定されます。 既定のソース四角形は画像全体であり、既定の変換先四角形は空の四角形です。

ソースと変換先の四角形を設定するには、IMFVideoDisplayControl::SetVideoPosition を呼び出します。

ライセンス認証オブジェクトを使用して EVR メディア シンクを作成する場合、この手順は必要ありません。 ライセンス認証オブジェクトでは、ウィンドウのクライアント領域全体と等しい移動先四角形が自動的に設定されます。 ただし、ソース四角形を変更するか、別の変換先四角形を設定する場合は、SetVideoPosition を呼び出す必要があります。

ウィンドウ メッセージ

再生中、アプリケーションは次のように特定のウィンドウ メッセージに応答する必要があります。

  • WM_PAINT: IMFVideoDisplayControl::RepaintVideo を呼び出してビデオを再描画します。 また、ビデオの再生中に変換先四角形の上に描画することは避けてください。これはちらつきを引き起こす可能性があるためです。

  • WM_SIZE: 変換先四角形のサイズを変更するには、SetVideoPosition を呼び出す必要がある場合があります。

DirectShow のビデオ ミキシング レンダラー (VMR) フィルターとは異なり、WM_DISPLAYCHANGE メッセージを受信したときに EVR に通知する必要はありません。

強化されたビデオ レンダラー