共用方式為


Activation Objects

啟用物件 是用來建立另一個對象的協助程序物件,與類別處理站有些類似。 啟用物件會公開 IMFActivate 介面。

啟用物件可讓您延遲建立目標對象,因為您可以保留 IMFActivate 指標,而不需要建立目標物件。 啟用物件也可以串行化,因此用來在另一個進程中建立目標物件。 例如,啟用物件可用來將管線元件從應用程式進程封送處理至受保護的媒體路徑 (PMP) 進程。 某些列舉函式也會使用啟用對象,這些函式會傳回 IMFActivate 指標的清單。 在應用程式建立目標物件之前,它可以藉由檢查啟用物件上的屬性來取得對象的相關信息。

若要從啟用物件建立目標物件,請呼叫 IMFActivate::ActivateObject 方法。 呼叫端必須在使用已建立的物件完成時,呼叫 IMFActivate::ShutdownObject。 應用程式通常會建立啟用物件,而媒體會話會呼叫 ActivateObject。 在此情況下,媒體會話,而不是應用程式,必須呼叫 ShutdownObject。 在其他情況下,應用程式會從媒體會話接收 IMFActivate 指標,而應用程式會呼叫 ActivateObjectShutdownObject。 (例如,請參閱 如何播放受保護的媒體檔案

啟用物件可以有屬性,而且 IMFActivate 介面會繼承 IMFAttributes 介面。 某些啟用物件會使用屬性來設定已建立的物件。 每個物件所支援的特定屬性記載於該啟用物件的建立函式參考中。 使用您從函式收到的 IMFActivate 指標來設定屬性。

針對受保護的播放,啟用物件會封送處理至 PMP 程式。 若要支援封送處理,啟用對象必須公開 IPersistStream 介面。 此外,如果 PMP 是在受保護的進程中執行,則啟用物件和建立的物件都必須是信任的元件。 當 PMP 在未受保護的進程中載入時,這不是必要條件。

若要在 PMP 程式中使用自訂管線物件(例如媒體接收),您必須為管線物件實作啟用物件:

  • 開啟物件必須公開 IMFActivate IPersistStream
  • 啟用物件的 IPersist::GetClassID 方法必須傳回啟用物件的 CLSID。
  • 您可以選擇性地實作 IPersistStream::SaveIPersistStream::Load 方法來封送處理設定啟用物件所需的任何數據。

當媒體會話在 PMP 程式內載入拓撲時,它會呼叫 CoCreateInstance 來建立啟用物件的新實例。 然後它會呼叫 IMFActivate::ActivateObject 來建立管線物件。

Media Foundation Platform API

IMFActivate