Objetos de ativação
Um objeto de ativação é um objeto auxiliar que é usado para criar outro objeto, um pouco semelhante a uma fábrica de classes. Os objetos de ativação expõem a interfaceIMFActivate.
Um objeto de ativação permite adiar a criação do objeto de destino, porque você pode segurar um ponteiro deIMFActivatesem criar o objeto de destino. Os objetos de ativação também podem ser serializados e, portanto, usados para criar o objeto de destino em outro processo. Por exemplo, os objetos de ativação são usados para empacotar componentes de pipeline do processo de aplicativo para o processo de caminho de mídia protegido (PMP). Os objetos de ativação também são usados por determinadas funções de enumeração que retornam uma lista de ponteiros IMFActivate. Antes de criar o objeto de destino, o aplicativo pode obter informações sobre o objeto examinando atributos no objeto de ativação.
Para criar o objeto de destino a partir de um objeto de ativação, chame o IMFActivate::ActivateObject método. O chamador deve chamar IMFActivate::ShutdownObject quando isso for feito usando o objeto criado. Muitas vezes, o aplicativo cria o objeto de ativação e a Sessão de Mídia chama ActivateObject. Nesse caso, a sessão de mídia, não o aplicativo, deve chamar ShutdownObject. Em outras situações, o aplicativo recebe um ponteiro deIMFActivateda Sessão de Mídia e o aplicativo chama ActivateObject e ShutdownObject. (Por exemplo, consulte Como reproduzir arquivos de mídia protegidos.)
Os objetos de ativação podem ter atributos, e a interface IMFActivate herda a interfaceIMFAttributes. Alguns objetos de ativação usam atributos para configurar o objeto criado. Os atributos específicos suportados por cada objeto são documentados na referência para a função de criação desse objeto de ativação. Defina os atributos usando o IMFActivate ponteiro que você recebe da função.
Para reprodução protegida, os objetos de ativação são empacotados para o processo PMP. Para oferecer suporte ao marshaling, um objeto de ativação deve expor o interface IPersistStream. Além disso, o objeto de ativação e o objeto criado devem ser componentes confiáveis se o PMP estiver sendo executado em um processo protegido. Isso não é um requisito quando o PMP é carregado em um processo desprotegido.
Para usar um objeto de pipeline personalizado (como um coletor de mídia) dentro do processo PMP, você deve implementar um objeto de ativação para seu objeto de pipeline:
- O objeto de ativação deve expor IMFActivate e IPersistStream.
- O método IPersist::GetClassID do objeto de ativação deve retornar o CLSID do objeto de ativação.
- Opcionalmente, você pode implementar os métodos IPersistStream::Save e IPersistStream::Load para empacotar todos os dados necessários para configurar seu objeto de ativação.
Quando a Sessão de Mídia carrega a topologia dentro do processo PMP, ela chama CoCreateInstance para criar uma nova instância do seu objeto de ativação. Em seguida, ele chama IMFActivate::ActivateObject para criar o objeto de pipeline.
Tópicos relacionados
-
APIs do Media Foundation Platform