IMFMediaSink::SetPresentationClock 方法 (mfidl.h)

设置媒体接收器上的演示时钟。

语法

HRESULT SetPresentationClock(
  [in] IMFPresentationClock *pPresentationClock
);

parameters

[in] pPresentationClock

指向表示时钟的 IMFPresentationClock 接口的指针,或 NULL。 如果值为 NULL,则媒体接收器将停止侦听先前设置的演示时钟(如果有)。

返回值

该方法返回 HRESULT。 可能的值包括(但并不限于)下表中的项。

返回代码 说明
S_OK
方法成功。
MF_E_CLOCK_NO_TIME_SOURCE
演示时钟没有时间源。 在演示文稿时钟上调用 SetTimeSource
MF_E_SHUTDOWN
已调用媒体接收器的 Shutdown 方法。

注解

在流式处理期间,媒体接收器会尝试将速率与演示时钟匹配。 理想情况下,媒体接收器根据演示时钟在正确的时间显示样本,并且不会落后。 无速率媒体接收器是此规则的例外,因为它们会尽快使用样本并忽略时钟。 如果接收器是无速率的, 则 IMFMediaSink::GetCharacteristics 方法将返回MEDIASINK_RATELESS标志。

演示时钟必须具有时间源。 在调用此方法之前,请在演示时钟上调用 IMFPresentationClock::SetTimeSource 以设置表示时间源。 某些媒体接收器提供时间源;因此,媒体接收器可能是其自己的呈现时钟的时间源。 但是,无论哪个对象提供时间源,媒体接收器都必须尝试将速率与 pPresentationClock 中指定的时钟匹配。 如果媒体接收器无法将速率与外部时间源匹配,则媒体接收器的 IMFMediaSink::GetCharacteristics 方法将检索MEDIASINK_CANNOT_MATCH_CLOCK标志。 在这种情况下, SetPresentationClock 仍将成功,但结果不会最佳。 接收器可能无法以足够快的速度呈现样本,无法将速率与演示时钟匹配。

如果 pPresentationClock 为非 NULL,媒体接收器必须通过在演示文稿时钟上调用 IMFPresentationClock::AddClockStateSink 来注册时钟状态通知。 如果使用新的呈现时钟再次调用方法,或者 pPresentationClockNULL,则媒体接收器必须调用 IMFPresentationClock::RemoveClockStateSink 以从上一个时钟取消注册自身。

所有媒体接收器都必须支持此方法。

要求

   
最低受支持的客户端 Windows Vista [桌面应用 | UWP 应用]
最低受支持的服务器 Windows Server 2008 [桌面应用 | UWP 应用]
目标平台 Windows
标头 mfidl.h
Library Mfuuid.lib

另请参阅

IMFMediaSink

媒体接收器

演示文稿时钟