Obiekty aktywacji
Obiekt aktywacji jest obiektem pomocnika używanym do tworzenia innego obiektu, nieco podobnego do fabryki klas. Obiekty aktywacji uwidaczniają interfejs IMFActivate.
Obiekt aktywacji umożliwia odroczenie tworzenia obiektu docelowego, ponieważ można trzymać się wskaźnika IMFActivate bez tworzenia obiektu docelowego. Obiekty aktywacji można również serializować, a tym samym użyć do utworzenia obiektu docelowego w innym procesie. Na przykład obiekty aktywacji są używane do marshalingu składników potoku z procesu aplikacji do procesu chronionego nośnika (PMP). Obiekty aktywacji są również używane przez niektóre funkcje wyliczenia, które zwracają listę wskaźników IMFActivate. Zanim aplikacja utworzy obiekt docelowy, może uzyskać informacje o obiekcie, sprawdzając atrybuty obiektu aktywacji.
Aby utworzyć obiekt docelowy na podstawie obiektu aktywacji, wywołaj metodę IMFActivate::ActivateObject. Obiekt wywołujący musi wywołać IMFActivate::ShutdownObject po zakończeniu korzystania z utworzonego obiektu. Często aplikacja tworzy obiekt aktywacji, a sesja multimediów wywołuje ActivateObject. W takim przypadku sesja multimediów, a nie aplikacja, musi wywołać ShutdownObject. W innych sytuacjach aplikacja otrzymuje wskaźnik IMFActivate z sesji multimediów, a aplikacja wywołuje ActivateObject i ShutdownObject. (Na przykład zobacz How to Play Protected Media Files.)
Obiekty aktywacji mogą mieć atrybuty, a interfejs IMFActivatedziedziczy interfejs IMFAttributes. Niektóre obiekty aktywacji używają atrybutów do skonfigurowania utworzonego obiektu. Określone atrybuty obsługiwane przez każdy obiekt są udokumentowane w dokumentacji dla funkcji tworzenia tego obiektu aktywacji. Ustaw atrybuty przy użyciu wskaźnika IMFActivate odbieranego z funkcji.
W przypadku odtwarzania chronionego obiekty aktywacji są marshalowane do procesu PMP. Aby obsługiwać marshaling, obiekt aktywacji musi uwidocznić interfejs IPersistStream. Ponadto zarówno obiekt aktywacji, jak i utworzony obiekt muszą być zaufanymi składnikami, jeśli protokół PMP jest uruchomiony w procesie chronionym. Nie jest to wymagane, gdy PMP jest ładowany w procesie niechronionym.
Aby użyć niestandardowego obiektu potoku (takiego jak ujście multimediów) wewnątrz procesu PMP, należy zaimplementować obiekt aktywacji dla obiektu potoku:
- Obiekt aktywacji musi uwidocznić IMFActivate i IPersistStream.
- IPersist::GetClassID metody obiektu aktywacji musi zwrócić identyfikator CLSID obiektu aktywacji.
- Opcjonalnie możesz zaimplementować metody IPersistStream::Save i IPersistStream::Load metod do marshalingu wszystkich danych, które należy skonfigurować.
Gdy sesja multimediów ładuje topologię wewnątrz procesu PMP, wywołuje CoCreateInstance w celu utworzenia nowego wystąpienia obiektu aktywacji. Następnie wywołuje IMFActivate::ActivateObject, aby utworzyć obiekt potoku.
Tematy pokrewne
-
interfejsy API platformy Media Foundation