Share via


Implementación de un enumerador de puntos de conexión de audio personalizados

A partir de Windows Server 2008 R2, puede implementar un enumerador de puntos de conexión de audio remoto personalizado como parte de un proveedor de protocolo de Escritorio remoto. Un proveedor de protocolos de Escritorio remoto puede usar un enumerador de puntos de conexión de audio personalizado para recuperar una colección de puntos de conexión de audio que tienen un conjunto específico de funcionalidades.

Para implementar un enumerador de puntos de conexión de audio remoto personalizado

  1. La solución del enumerador de puntos de conexión personalizado debe implementar cuatro tipos principales de objetos: objetos de enumerador de dispositivos, objetos de recopilación de dispositivos, objetos de dispositivo y objetos de almacén de propiedades.
Tipo de objeto Descripción
Objeto de enumerador de dispositivos
Un objeto de enumerador de dispositivos proporciona la funcionalidad del enumerador de puntos de conexión. Expone métodos que devuelven un punto de conexión predeterminado y colecciones especificadas de puntos de conexión. Por ejemplo, según los criterios especificados, el enumerador puede devolver puntos de conexión de comunicación, extremos de reproducción o puntos de conexión de captura. El objeto del enumerador de dispositivos debe implementar la interfaz IMMDeviceEnumerator .
Objeto de colección de dispositivos
Un objeto de colección de dispositivos representa una colección de dispositivos de audio. Debe implementar la interfaz IMMDeviceCollection .
Objeto de dispositivo
Un objeto de dispositivo representa un dispositivo de audio determinado. Proporciona acceso al almacén de propiedades del dispositivo de audio y expone las interfaces de reproducción y captura de audio disponibles en el dispositivo. El objeto de dispositivo debe implementar las interfaces IMMDevice e IMMEndpoint .
Objeto de almacén de propiedades
Un objeto de almacén de propiedades expone las propiedades asociadas a un dispositivo de audio. El sistema usa algunas de estas propiedades, pero las aplicaciones también pueden almacenar propiedades arbitrarias con el punto de conexión de audio.
Todos los dispositivos de audio tienen las tres propiedades siguientes:
El objeto de almacén de propiedades debe implementar la interfaz IPropertyStore .
  1. El enumerador de puntos de conexión personalizado debe implementarse en un archivo DLL que se pueda cargar en el sistema de audio y en otras aplicaciones. El archivo DLL debe estar firmado para que los procesos seguros puedan cargarlo. El archivo DLL debe implementar y exportar la función GetTSAudioEndpointEnumeratorForSession , que actúa como punto de entrada al enumerador de punto de conexión personalizado.

El servicio Servicios de Escritorio remoto llama al método QueryProperty y establece el parámetro QueryType en WTS_QUERY_AUDIOENUM_DLL para recuperar el nombre del objeto enumerador.

Los objetos de enumerador personalizados usan interfaces similares a COM y un mecanismo de recuento de referencias similar a COM, pero no son objetos COM verdaderos. El enumerador de puntos de conexión personalizado debe tener la capacidad de trabajar con interfaces de audio heredadas que usan las aplicaciones que no admiten COM. Por este motivo, el enumerador de puntos de conexión personalizado no debe basarse en el mecanismo de administración del ciclo de vida de COM. Los consumidores del enumerador de puntos de conexión de audio, como MMDevAPI.dll, cargan el archivo DLL del enumerador de puntos de conexión personalizado cuando lo requieren las aplicaciones de usuario y no descargarán el enumerador mientras el enumerador contiene una referencia a un objeto enumerador de dispositivos, un objeto de colección de dispositivos, un objeto de dispositivo o un objeto de almacén de propiedades. Sin embargo, no es posible que estos consumidores realicen un seguimiento de las referencias a otros tipos de objetos propiedad del enumerador de puntos de conexión personalizados. En consecuencia, se recomienda que el enumerador de puntos de conexión personalizado no cree ningún objeto que pueda sobrevivir a estos cuatro tipos de objetos.

Para implementar un punto de conexión de audio personalizado

Para implementar un enumerador de dispositivos de audio personalizado, debe implementar un punto de conexión de audio personalizado. La forma en que los dispositivos de audio personalizados están vinculados es mediante las dos instrucciones siguientes:

  • IMMDevice::Activate(IAudioOutputEndpointRT)
  • IMMDevice::Activate(IAudioInputEndpointRT)

No esperamos que implemente la lista completa de interfaces IMMDevice::Activate en el enumerador de dispositivos de audio personalizado. En su lugar, debe implementar IAudioOutputEndpointRT e IAudioInputEndpointRT. Opcionalmente, puede implementar algunos más, como IAudioEndpointVolume. Para cualquier interfaz que no implemente, debe devolver E_NOINTERFACE (debe usar este código de error específico). Después, Windows volverá a una implementación de existencias de la interfaz (por ejemplo, IAudioClient2).

Para obtener documentación de referencia adicional sobre cómo implementar y registrar puntos de conexión de audio, consulte IAudioInputEndpointRT. Para ver un diagrama que muestra cómo funciona WASAPI, consulte Componentes de audio en modo de usuario. Tenga en cuenta que todo el audio en modo de usuario es nuevo a partir de Windows Server 2008.

Creación de un proveedor de protocolos de Escritorio remoto

GetTSAudioEndpointEnumeratorForSession

IMMDevice

IMMDeviceCollection

IMMDeviceEnumerator

IMMEndpoint

IPropertyStore