[與此頁面 MFPlay 相關聯的功能是舊版功能。 它已被 MediaPlayer 和 IMFMediaEngine 取代。 這些功能已針對 Windows 10 和 Windows 11 進行優化。 Microsoft強烈建議新程式代碼盡可能使用 MediaPlayer 和 IMFMediaEngine,而不是 DirectShow。 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。
相關主題