IMFMediaSink::SetPresentationClock 方法 (mfidl.h)

設定媒體接收上的簡報時鐘。

語法

HRESULT SetPresentationClock(
  [in] IMFPresentationClock *pPresentationClock
);

參數

[in] pPresentationClock

表示時鐘或NullIMFPresentationClock介面的指標。 如果值為 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
程式庫 Mfuuid.lib

另請參閱

IMFMediaSink

媒體接收

簡報時鐘