IMFPMediaPlayerCallback::OnMediaPlayerEvent 方法 (mfplay.h)
重要 廢棄。 此 API 可能會從未來的 Windows 版本中移除。 應用程式應該使用 媒體會話 進行播放。
由 MFPlay 播放程式物件呼叫,以通知播放事件的應用程式。
語法
void OnMediaPlayerEvent(
[in] MFP_EVENT_HEADER *pEventHeader
);
參數
[in] pEventHeader
包含事件相關資訊 之MFP_EVENT_HEADER 結構的指標。
傳回值
無
備註
特定類型的播放事件會在MFP_EVENT_HEADER結構的eEventType成員中提供。 這個結構包含所有事件種類通用的資訊。 某些事件種類使用擴充結構。 定義一組宏,以將 pEventHeader 指標轉換成正確的結構類型。 如需詳細資訊,請參閱 MFP_EVENT_TYPE。
安全地在OnMediaPlayer方法內呼叫IMFPMediaPlayer和IMFPMediaItem方法。 MFPlay 保證不會重新輸入 OnMediaPlayer 方法。 也就是說,會序列化 對 OnMediaPlayer 的呼叫,而且不會從 OnMediaPlayer內再次叫用 方法。
範例
下列程式碼示範如何將 pEventHeader 參數轉換成正確的結構類型,並將結構指標傳遞至處理常式函式。 處理常式函式會在範例開頭宣告。 應用程式必須提供這些函式的實作。 請注意,您不需要處理每個事件。 例如,如果您的應用程式從未呼叫 IMFPMediaPlayer::SetRate,您就不需要處理 MFP_EVENT_TYPE_RATE_SET 事件。 在此情況下,只要省略switch語句中的MFP_EVENT_TYPE_RATE_SET。
// Declarations of MFPlay event handler functions.
void OnPlay(MFP_PLAY_EVENT *pEvent);
void OnPause(MFP_PAUSE_EVENT *pEvent);
void OnStop(MFP_STOP_EVENT *pEvent);
void OnPositionSet(MFP_POSITION_SET_EVENT *pEvent);
void OnRateSet(MFP_RATE_SET_EVENT *pEvent);
void OnMediaItemCreated(MFP_MEDIAITEM_CREATED_EVENT *pEvent);
void OnMediaItemSet(MFP_MEDIAITEM_SET_EVENT *pEvent);
void OnFrameStep(MFP_FRAME_STEP_EVENT *pEvent);
void OnMediaItemCleared(MFP_MEDIAITEM_CLEARED_EVENT *pEvent);
void OnMFEvent(MFP_MF_EVENT *pEvent);
void OnError(MFP_ERROR_EVENT *pEvent);
void OnPlaybackEnded(MFP_PLAYBACK_ENDED_EVENT *pEvent);
void OnAquireUserCredential(MFP_ACQUIRE_USER_CREDENTIAL_EVENT *pEvent);
// Implementation of IMFPMediaPlayerCallback::OnMediaPlayerEvent
void STDMETHODCALLTYPE PlayerCallback::OnMediaPlayerEvent(MFP_EVENT_HEADER * pEventHeader)
{
switch (pEventHeader->eEventType)
{
case MFP_EVENT_TYPE_PLAY:
OnPlay(MFP_GET_PLAY_EVENT(pEventHeader));
break;
case MFP_EVENT_TYPE_PAUSE:
OnPause(MFP_GET_PAUSE_EVENT(pEventHeader));
break;
case MFP_EVENT_TYPE_STOP:
OnStop(MFP_GET_STOP_EVENT(pEventHeader));
break;
case MFP_EVENT_TYPE_POSITION_SET:
OnPositionSet(MFP_GET_POSITION_SET_EVENT(pEventHeader));
break;
case MFP_EVENT_TYPE_RATE_SET:
OnRateSet(MFP_GET_RATE_SET_EVENT(pEventHeader));
break;
case MFP_EVENT_TYPE_MEDIAITEM_CREATED:
OnMediaItemCreated(MFP_GET_MEDIAITEM_CREATED_EVENT(pEventHeader));
break;
case MFP_EVENT_TYPE_MEDIAITEM_SET:
OnMediaItemSet(MFP_GET_MEDIAITEM_SET_EVENT(pEventHeader));
break;
case MFP_EVENT_TYPE_FRAME_STEP:
OnFrameStep(MFP_GET_FRAME_STEP_EVENT(pEventHeader));
break;
case MFP_EVENT_TYPE_MEDIAITEM_CLEARED:
OnMediaItemCleared(MFP_GET_MEDIAITEM_CLEARED_EVENT(pEventHeader));
break;
case MFP_EVENT_TYPE_MF:
OnMFEvent(MFP_GET_MF_EVENT(pEventHeader));
break;
case MFP_EVENT_TYPE_ERROR:
OnError(MFP_GET_ERROR_EVENT(pEventHeader));
break;
case MFP_EVENT_TYPE_PLAYBACK_ENDED:
OnPlaybackEnded(MFP_GET_PLAYBACK_ENDED_EVENT(pEventHeader));
break;
case MFP_EVENT_TYPE_ACQUIRE_USER_CREDENTIAL:
OnAquireUserCredential(MFP_GET_ACQUIRE_USER_CREDENTIAL_EVENT(pEventHeader));
break;
}
}
需求
最低支援的用戶端 | Windows 7 [僅限傳統型應用程式] |
最低支援的伺服器 | Windows Server 2008 R2 [僅限傳統型應用程式] |
目標平台 | Windows |
標頭 | mfplay.h |
另請參閱
意見反應
https://aka.ms/ContentUserFeedback。
即將登場:在 2024 年,我們將逐步淘汰 GitHub 問題作為內容的意見反應機制,並將它取代為新的意見反應系統。 如需詳細資訊,請參閱:提交並檢視相關的意見反應