Share via


Estabelecer comunicação remota do controle do Windows Media Player

[O recurso associado a esta página, Reprodutor Multimídia do Windows SDK, é um recurso herdado. Foi substituído pelo MediaPlayer. O MediaPlayer foi otimizado para Windows 10 e Windows 11. A Microsoft recomenda fortemente que o novo código use o MediaPlayer em vez de Reprodutor Multimídia do Windows SDK, quando possível. A Microsoft sugere que o código existente que usa as APIs herdadas seja reescrito para usar as novas APIs, se possível.]

Ao inserir o controle Reprodutor Multimídia do Windows em um programa C++, você pode usá-lo como uma extensão remota do modo completo do Player. Isso é chamado de "comunicação remota" do controle Reprodutor Multimídia do Windows e permite que você forneça todos os recursos do Player de modo completo sem implementá-los por conta própria.

Quando você controla remotamente, ele compartilha o mesmo mecanismo de reprodução que o modo completo do Player e seus usuários podem alternar entre o modo inserido (o estado "encaixado" e o modo completo (o estado "desencaixado" enquanto a reprodução de mídia digital continua ininterrupta.

Habilitando a inserção remota

Para habilitar a inserção remota do controle Reprodutor Multimídia do Windows, seu programa deve implementar as interfaces IServiceProvider e IWMPRemoteMediaServices. IServiceProvider é uma interface COM (Component Object Model) padrão com um único método chamado QueryService. Reprodutor Multimídia do Windows chama esse método para recuperar um ponteiro para uma interface IWMPRemoteMediaServices.

IWMPRemoteMediaServices tem vários métodos , mas apenas dois deles são diretamente relevantes para comunicação remota. Em GetApplicationName, você retorna o nome do programa, que Reprodutor Multimídia do Windows adiciona à lista Alternar para Outros Programas no menu Exibir. Em GetServiceType, você indica o modo de inserção do controle retornando um valor de "Remoto" ou "Local". Se uma conexão remota for estabelecida com êxito, o método get_isRemote da interface IWMPPlayer4 retornará true.

Especificando uma loja online exclusiva

Com Reprodutor Multimídia do Windows 11, um aplicativo que insere o controle Player remotamente pode especificar um repositório online exclusivo. Nesse caso, o seletor de serviço no Reprodutor Multimídia do Windows está desabilitado e apenas o repositório online especificado está disponível para o usuário. Para obter informações detalhadas sobre como especificar um repositório online exclusivo, consulte Lojas Online Exclusivas.

Encaixe e desencaixação

A interface IWMPPlayer4 também fornece acesso à interface IWMPPlayerApplication por meio do método get_playerApplication . Use IWMPPlayerApplication para alternar entre os estados encaixados e desencaixados e determinar o estado encaixado atual e o local da exibição de vídeo ou visualização.

O método IWMPPlayerApplication::switchToPlayerApplication desencaixa o controle abrindo o modo completo de Reprodutor Multimídia do Windows e transferindo a exibição de vídeo ou visualização para o painel Agora Jogando. O método IWMPPlayerApplication::switchToControl encaixa o controle transferindo a exibição de vídeo ou visualização para o programa e fechando o modo completo do Player, se ele estiver aberto. O controle também pode ser encaixado selecionando um programa na lista Alternar para Outro Programa ou fechando o modo completo do Player. Em ambos os casos, qualquer mídia digital que esteja sendo reproduzida continua ininterrupta.

Transferindo a exibição de vídeo ou visualização

Quando vários programas com controles de Reprodutor Multimídia do Windows inseridos e remotos são executados simultaneamente, todos os controles compartilham o mesmo mecanismo de reprodução. Eles também compartilham a mesma instância do modo completo do Player no estado desencaixado. No estado encaixado, no entanto, apenas um controle pode exibir o vídeo ou a visualização. No estado desencaixado, somente o modo completo do Player exibe o vídeo ou a visualização. O método switchToControl funciona nos estados encaixado e desencaixado e transferirá o vídeo ou a exibição de visualização para qualquer programa que o chame.

A única diferença entre os estados encaixados e desencaixados é a presença do modo completo de Reprodutor Multimídia do Windows e sua propriedade da exibição de vídeo ou visualização. No estado desencaixado, todos os controles inseridos e remotos em execução no momento ainda estão visíveis e suas interfaces de usuário ainda estão totalmente funcionais. No entanto, se uma janela de visualização ou vídeo estiver presente, ela estará vazia. No estado encaixado, apenas um dos controles remotos inseridos possui a exibição, mas todas as interfaces do usuário continuam funcionando.

Ocultando ou alterando o controle no estado desencaixado

Você deve fornecer sua própria implementação se quiser ocultar ou alterar a interface do usuário de um controle inserido no estado desencaixado ou quando o programa não possui a exibição. Você pode fazer essas alterações ao encaixar e desencaixar o controle ou torná-las em resposta a eventos Reprodutor Multimídia do Windows. Como o Player pode ser encaixado por meio da opção de menu Alternar para Outro Programa , no entanto, geralmente é melhor fornecer essa funcionalidade em resposta a eventos.

Você pode implementar manipuladores de eventos para os eventos SwitchedToPlayerApplication e SwitchedToControl ou implementar um único manipulador de eventos para o evento PlayerDockedStateChange . No último caso, você pode determinar o estado encaixado chamando IWMPPlayerApplication::get_playerDocked. Em ambos os casos, use IWMPPlayerApplication::get_hasDisplay para determinar se seu programa possui o vídeo ou a exibição de visualização.

Restabelecer uma conexão remota

Em determinadas circunstâncias, a conexão entre um controle remoto e inserido e o Player autônomo falhará, invalidando seus ponteiros para as interfaces Reprodutor Multimídia do Windows. Reprodutor Multimídia do Windows tentará se reconectar automaticamente e disparará o evento PlayerReconnect para sinalizar essa tentativa. Embora a reconexão seja automática, você deverá fornecer um manipulador de eventos para esse evento se quiser liberar seus ponteiros inválidos e recuperar novos para que você possa acessar o Player autônomo por meio da nova conexão.

Controlando o jogador desencaixado

Todas as instâncias remotas do controle Reprodutor Multimídia do Windows podem manipular o modo completo do Player, independentemente do estado encaixado. Os recursos que não têm relevância para o modo completo do Player, no entanto, são ignorados até que o controle Reprodutor Multimídia do Windows seja encaixado. Isso inclui propriedades do IWMPPlayer e interfaces derivadas, como enabled, enableContextMenu, uiMode e windowlessVideo.

Caixas de diálogo de erro

De uma instância de controle de Reprodutor Multimídia do Windows remota, as Configurações.A propriedade enableErrorDialogs se comporta de maneira específica. As seguintes regras se aplicam:

  • Quando Reprodutor Multimídia do Windows é desencaixada (a interface do usuário do Reprodutor Multimídia do Windows está visível), a propriedade enableErrorDialogs é ignorada e as caixas de diálogo de erro são manipuladas pelo Player.
  • Quando Reprodutor Multimídia do Windows é encaixado, o valor especificado por cada instância remota do controle para enableErrorDialogs se aplica somente à instância de controle individual. Ou seja, se uma instância de controle específica especificar um valor "true" para enableErrorDialogs, somente essa instância exibirá uma caixa de diálogo quando ocorrer um erro se todas as outras instâncias do controle tiverem especificado um valor de "false".

Comunicação remota em segundo plano

Você deve evitar manter uma instância remota do Player em execução em segundo plano durante os horários em que o controle não está em uso. Como a instância de controle player remota compartilha seu mecanismo de reprodução com o Player de modo completo, manter uma instância em segundo plano em execução pode causar um comportamento inesperado. Por exemplo, o usuário pode fechar o modo completo Player enquanto um arquivo está sendo reproduzido. O usuário esperaria que a reprodução do arquivo parasse completamente quando o Player fechasse, mas o áudio pode continuar a ser reproduzido porque o mecanismo de reprodução ainda está ativo.

Exemplos

O pacote de instalação do SDK Reprodutor Multimídia do Windows instala exemplos que demonstram comunicação remota. Confira os exemplos de RemoteSkin e WMPML para obter mais informações.

Exemplos

Usando o controle Reprodutor Multimídia do Windows em um programa C++