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

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 Escritorio remoto. Un proveedor de protocolo 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 colección de dispositivos, objetos de dispositivo y objetos de almacén de propiedades.
Tipo de objeto Description
Objeto enumerador de dispositivos
Un objeto del 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, en función de los criterios especificados, el enumerador puede devolver extremos de comunicación, de reproducción o de captura. El objeto del enumerador de dispositivos debe implementar la interfaz IMMDeviceEnumerator .
Objeto de la 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 almacenamiento de propiedades
Un objeto de almacenamiento 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 Escritorio remoto Services 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 clientes de su enumerador de extremos de audio, como MMDevAPI.dll, cargan la DLL del enumerador de extremos personalizado cuando las aplicaciones de usuario lo requieren, y no descargarán dicho enumerador mientras este mantenga 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 algunas más, como IAudioEndpointVolume. Para cualquier interfaz que no implemente, debe devolver E_NOINTERFACE (debe usar este código de error específico). Windows revertirá a una implementación de stock 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 User-Mode Componentes de audio. 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 protocolo Escritorio remoto

GetTSAudioEndpointEnumeratorForSession

IMMDevice

IMMDeviceCollection

IMMDeviceEnumerator

IMMEndpoint

IPropertyStore