IMFPMediaPlayerCallback::OnMediaPlayerEvent 方法 (mfplay.h)
重要 废弃。 此 API 可能会从 Windows 的未来版本中删除。 应用程序应使用 媒体会话 进行播放。
由 MFPlay 播放器对象调用,以通知应用程序播放事件。
语法
void OnMediaPlayerEvent(
[in] MFP_EVENT_HEADER *pEventHeader
);
parameters
[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 问题”,并将其取代为新的反馈系统。 有关详细信息,请参阅:提交和查看相关反馈