Implementando um enumerador de ponto de extremidade de áudio personalizado
A partir do Windows Server 2008 R2, você pode implementar um enumerador de ponto de extremidade de áudio remoto personalizado como parte de um provedor de protocolo de Área de Trabalho Remota. Um provedor de protocolo de Área de Trabalho Remota pode usar um enumerador de ponto de extremidade de áudio personalizado para recuperar uma coleção de pontos de extremidade de áudio que têm um conjunto específico de recursos.
Para implementar um enumerador de ponto de extremidade de áudio remoto personalizado
- Sua solução de enumerador de ponto de extremidade personalizado deve implementar quatro tipos main de objetos: objetos enumeradores de dispositivo, objetos de coleção de dispositivos, objetos de dispositivo e objetos de repositório de propriedades.
Tipo de Objeto | Descrição |
---|---|
Objeto enumerador de dispositivo |
Um objeto enumerador de dispositivo fornece a funcionalidade do enumerador de ponto de extremidade. Ele expõe métodos que retornam um ponto de extremidade padrão e coleções especificadas de pontos de extremidade. Por exemplo, dependendo dos critérios especificados, o enumerador pode retornar pontos de extremidade de comunicação, pontos de extremidade de reprodução ou pontos de extremidade de captura. O objeto enumerador de dispositivo deve implementar a interface IMMDeviceEnumerator . |
Objeto de coleção de dispositivos |
Um objeto de coleção de dispositivos representa uma coleção de dispositivos de áudio. Ele deve implementar a interface IMMDeviceCollection . |
Objeto de dispositivo |
Um objeto de dispositivo representa um dispositivo de áudio específico. Ele fornece acesso ao repositório de propriedades do dispositivo de áudio e expõe as interfaces de reprodução e captura de áudio disponíveis no dispositivo. O objeto de dispositivo deve implementar as interfaces IMMDevice e IMMEndpoint . |
Objeto do repositório de propriedades |
Um objeto de repositório de propriedades expõe as propriedades associadas a um dispositivo de áudio. Algumas dessas propriedades são usadas pelo sistema, mas os aplicativos também podem armazenar propriedades arbitrárias com o ponto de extremidade de áudio. Todos os dispositivos de áudio têm as três propriedades a seguir: O objeto de repositório de propriedades deve implementar a interface IPropertyStore . |
- O enumerador de ponto de extremidade personalizado deve ser implementado em uma DLL que pode ser carregada no sistema de áudio e em outros aplicativos. A DLL deve ser assinada para que os processos seguros possam carregá-la. A DLL deve implementar e exportar a função GetTSAudioEndpointEnumeratorForSession , que atua como um ponto de entrada para o enumerador de ponto de extremidade personalizado.
O serviço Serviços de Área de Trabalho Remota chama o método QueryProperty e define o parâmetro QueryType como WTS_QUERY_AUDIOENUM_DLL para recuperar o nome do objeto enumerador.
Objetos enumeradores personalizados usam interfaces semelhantes a COM e um mecanismo de contagem de referência semelhante a COM, mas não são objetos COM verdadeiros. O enumerador de ponto de extremidade personalizado deve ter a capacidade de trabalhar com interfaces de áudio herdadas usadas por aplicativos que não dão suporte a COM. Por esse motivo, o enumerador de ponto de extremidade personalizado não deve depender do mecanismo de gerenciamento do ciclo de vida do COM. Os consumidores do enumerador de ponto de extremidade de áudio, como MMDevAPI.dll, carregam a DLL do enumerador de ponto de extremidade personalizado quando exigido por aplicativos de usuário e não descarregam o enumerador enquanto o enumerador mantém uma referência a um objeto enumerador de dispositivo, objeto de coleção de dispositivos, objeto de dispositivo ou objeto de repositório de propriedades. No entanto, não é possível que esses consumidores acompanhem referências a outros tipos de objetos pertencentes ao enumerador de ponto de extremidade personalizado. Assim, recomendamos que o enumerador de ponto de extremidade personalizado não crie objetos que possam sobreviver a esses quatro tipos de objetos.
Para implementar um ponto de extremidade de áudio personalizado
Para implementar um enumerador de dispositivo de áudio personalizado, você deve implementar um ponto de extremidade de áudio personalizado. A maneira como seus dispositivos de áudio personalizados são vinculados é usando as duas instruções a seguir:
IMMDevice::Activate(IAudioOutputEndpointRT)
IMMDevice::Activate(IAudioInputEndpointRT)
Não esperamos que você implemente a lista completa de interfaces IMMDevice::Activate no enumerador de dispositivo de áudio personalizado. Em vez disso, você deve implementar IAudioOutputEndpointRT e IAudioInputEndpointRT. Opcionalmente, você pode implementar mais alguns, como IAudioEndpointVolume. Para qualquer interface que você não implementar, você deve retornar E_NOINTERFACE (você deve usar esse código de falha específico). Em seguida, o Windows retornará a uma implementação de estoque da interface (por exemplo, IAudioClient2).
Para obter documentação de referência adicional sobre como implementar e registrar pontos de extremidade de áudio, consulte IAudioInputEndpointRT. Para obter um diagrama que mostra como o WASAPI funciona, consulte Componentes de áudio no modo de usuário. Observe que todo o áudio do modo de usuário é novo a partir do Windows Server 2008.