Поделиться через


Объекты активации

Объект активации — это вспомогательный объект, который используется для создания другого объекта, который несколько похож на фабрику классов. Объекты активации предоставляют интерфейс IMFActivate.

Объект активации позволяет отложить создание целевого объекта, так как можно удерживать указатель IMFActivate без создания целевого объекта. Объекты активации также можно сериализовать и таким образом использовать для создания целевого объекта в другом процессе. Например, объекты активации используются для маршалинга компонентов конвейера из процесса приложения в процесс защищенного пути мультимедиа (PMP). Объекты активации также используются определенными функциями перечисления, возвращающими список мвфактивации указателей. Перед созданием целевого объекта приложение может получить сведения об объекте, проверив атрибуты объекта активации.

Чтобы создать целевой объект из объекта активации, вызовите метод IMFActivate::ActivateObject. Вызывающий объект должен вызвать IMFActivate::ShutdownObject, когда он будет выполнен с помощью созданного объекта. Часто приложение создает объект активации, а вызовы сеанса мультимедиа ActivateObject. В этом случае сеанс мультимедиа, а не приложение, должен вызывать ShutdownObject. В других ситуациях приложение получает указательIMFActivate из сеанса мультимедиа, а приложение вызывает ActivateObject и ShutdownObject. (Например, см. раздел Воспроизведение защищенных файлов мультимедиа.)

Объекты активации могут иметь атрибуты, а интерфейс IMFActivate наследует интерфейс IMFAttributes. Некоторые объекты активации используют атрибуты для настройки созданного объекта. Определенные атрибуты, поддерживаемые каждым объектом, описаны в справочнике для функции создания объекта активации. Задайте атрибуты, используя указатель IMFActivate, который вы получаете от функции.

Для защищенного воспроизведения объекты активации маршалируются в процесс PMP. Для поддержки маршалинга объект активации должен предоставить интерфейс IPersistStream. Кроме того, объект активации и созданный объект должны быть доверенными компонентами, если PMP выполняется в защищенном процессе. Это не обязательно, если PMP загружается в незащищенном процессе.

Чтобы использовать пользовательский объект конвейера (например, приемник мультимедиа) в процессе PMP, необходимо реализовать объект активации для объекта конвейера:

  • Объект активации должен предоставлять МВФActivate и IPersistStream.
  • Метод объекта активации IPersist::GetClassID должен возвращать CLSID объекта активации.
  • При необходимости можно реализовать методы IPersistStream::Save и IPersistStream::Load для маршалирования любых данных, необходимых для настройки объекта активации.

Когда сеанс мультимедиа загружает топологию внутри процесса PMP, он вызывает CoCreateInstance для создания нового экземпляра объекта активации. Затем он вызывает IMFActivate::ActivateObject для создания объекта конвейера.

API платформы Media Foundation

МВФActivate