關於媒體會話
媒體會話會公開 IMFMediaSession 介面。 根據您的應用程式是否支援受保護的內容,有兩種方式可以建立媒體會話:
- 如果您的應用程式不支援受保護的內容,您可以呼叫 MFCreateMediaSession來建立媒體會話。 此函式會在應用程式程式內建立媒體會話。
- 若要支援受保護的內容,請呼叫 MFCreatePMPMediaSession來建立媒體會話。 此函式會在受保護的媒體路徑 (PMP) 程式中建立媒體會話。 應用程式會接收 Proxy 物件的指標,該物件會跨進程界限封送處理方法呼叫。 請注意,PMP 媒體會話可用來播放清楚的內容,以及受保護的內容。
任何使用媒體會話的應用程式都會遵循下列一般步驟:
- 建立拓撲。
- 呼叫IMFMediaSession::SetTopology ,將媒體會話上的拓撲排入佇列。
- 呼叫 IMFMediaSession::Start 、IMFMediaSession::P ause或 IMFMediaSession::Stop來控制數據流。
- 在應用程式結束之前,請呼叫 IMFMediaSession::Close 關閉媒體會話。
- 呼叫 IMFMediaSource::Shutdown關閉應用程式所建立的任何媒體來源。
- 呼叫 IMFMediaSession::Shutdown關閉媒體會話。
使用媒體會話時,應用程式不應該直接啟動、暫停或停止媒體來源。 所有狀態變更都必須藉由呼叫IMFMediaSession 方法來起始。 媒體來源的狀態變更由媒體會話負責處理。
許多其他詳細數據將取決於應用程式的特定功能。
受保護的內容
若要播放受保護的內容,您必須呼叫 MFCreatePMPMediaSession,在受保護的媒體路徑中建立媒體會話。 此函式會在 PMP 內建立媒體會話的實例,並傳回 Proxy 物件的指標,以跨進程界限封送處理介面。
在大部分方面,在 PMP 內使用媒體會話對應用程式而言是透明的。 不過,應用程式可能需要叫用特定動作,讓用戶能夠播放內容。 例如,使用者可能需要取得DRM授權。 媒體基礎架構使用 IMFContentEnabler 介面來定義這些動作的泛型機制。
如需詳細資訊,請參閱下列主題:
簡報時鐘
媒體會話會管理簡報時鐘的所有層面:
建立簡報時鐘。
選取時間來源。
通知媒體接收器關於時間信息的相關事宜
視需要啟動、停止和暫停時鐘。
關閉時鐘。
若要取得簡報時鐘的指標,請在媒體會話上呼叫 IMFMediaSession::GetClock。 在媒體會話傳送 具有 MF_TOPOSTATUS_READY 旗標的 MESessionTopologyStatus 事件之前,顯示時鐘不會傳回有效的時間。 在此之前,GetClock 會傳回MF_E_CLOCK_NO_TIME_SOURCE。
使用媒體會話的應用程式不應該啟動、停止或暫停簡報時鐘;變更時鐘速率;或關閉時鐘。
當應用程式呼叫 IMFMediaSession::Start時,媒體會話會啟動簡報時鐘,開始時間等於 Start 方法中指定的開始位置。 如需媒體工作階段的詳細資訊,請參閱 媒體工作階段。
相關主題