[このページに関連付けられている機能である MFPlay はレガシ機能です。 これは MediaPlayer および IMFMediaEngine に置き換えられました。 これらの機能は、Windows 10 および Windows 11 用に最適化されています。 Microsoftでは、新しいコードで可能な限り DirectShow ではなく MediaPlayer と IMFMediaEngine を使用することを強くお勧めします。 Microsoft は、レガシ API を使用する既存コードを、新しい API を使用するように可能であれば書き直すことを提案しています。]
このトピックでは、MFPlay を使用してビデオ カメラからのビデオをプレビューする方法について説明します。
MFPlay は、Microsoft Media Foundation でキャプチャ デバイスからビデオをプレビューする最も簡単な方法を提供します。 以下の条件がすべて当てはまる場合は、MFPlay を使用する必要があります。
- ビデオをファイルにキャプチャする必要はありません。
- ビデオのレンダリング方法をきめ細かく制御する必要はありません。 (たとえば、Direct3D デバイスの作成を制御する必要はありません。)
- レンダリング前にカメラからのビデオ データを処理する必要はありません。
それ以外の場合は、ソース リーダー を使用することをお勧めします。
MFPlay をビデオ キャプチャ デバイスで使用するには、次の手順を実行します。
- キャプチャ デバイスのメディア ソースを作成します。 「ビデオ キャプチャ デバイスの列挙」を参照してください。
- MFPCreateMediaPlayer を呼び出して、プレーヤー オブジェクトのインスタンスを作成します。
- IMFPMediaPlayer::CreateMediaItemFromObject メソッドを呼び出します。 メディア ソースの IMFMediaSource インターフェイスへのポインターを渡します。 メソッドは、IMFPMediaItem インターフェイスへのポインターを受け取ります。
- IMFPMediaPlayer::SetMediaItem を呼び出します。
- IMFPMediaPlayer::P lay を呼び出してプレビューを開始します。
これらの手順を示すコードは次のようになります。
IMFPMediaItem *pItem = NULL;
if (SUCCEEDED(hr))
{
hr = MFPCreateMediaPlayer(
NULL, // URL.
FALSE, // Do not start playback yet.
0, // Option flags.
NULL, // Callback interface.
hwnd,
&g_pPlayer
);
}
if (SUCCEEDED(hr))
{
hr = g_pPlayer->CreateMediaItemFromObject(
g_pSource,
TRUE, // Blocking call.
0, // User data.
&pItem
);
}
if (SUCCEEDED(hr))
{
hr = g_pPlayer->SetMediaItem(pItem);
}
if (SUCCEEDED(hr))
{
hr = g_pPlayer->Play();
}
SafeRelease(&pItem);
一般的なアプリケーションでは、MFPCreateMediaPlayer 関数のコールバック インターフェイスへのポインターを指定し、コールバック インターフェイスを使用してプレーヤーからイベントを取得します。 わかりやすくするために、次に示すコードでは、これらの手順をスキップします。 詳細については、「MFPlay の概要」を参照してください。
シャットダウン中
アプリケーションが終了する前に、次のようにメディア ソースとプレーヤー オブジェクトをシャットダウンします。
- メディア ソース IMFMediaSource::Shutdown を呼び出します。
- プレーヤー オブジェクト IMFPMediaPlayer::Shutdown を呼び出します。
if (g_pSource)
{
g_pSource->Shutdown();
g_pSource->Release();
g_pSource = NULL;
}
if (g_pPlayer)
{
g_pPlayer->Shutdown();
g_pPlayer->Release();
g_pPlayer = NULL;
}
要件
MFPlay には Windows 7 が必要です。
関連トピック