Share via


Implémentation d’un énumérateur de point de terminaison audio personnalisé

À compter de Windows Server 2008 R2, vous pouvez implémenter un énumérateur de point de terminaison audio distant personnalisé dans le cadre d’un fournisseur de protocole Bureau à distance. Un fournisseur de protocole Bureau à distance peut utiliser un énumérateur de point de terminaison audio personnalisé pour récupérer une collection de points de terminaison audio qui ont un ensemble spécifique de fonctionnalités.

Pour implémenter un énumérateur de point de terminaison audio distant personnalisé

  1. Votre solution d’énumérateur de point de terminaison personnalisé doit implémenter quatre types main d’objets : objets d’énumérateur d’appareils, objets de collection d’appareils, objets d’appareil et objets de magasin de propriétés.
Type d’objet Description
Objet énumérateur d’appareil
Un objet énumérateur d’appareil fournit la fonctionnalité énumérateur de point de terminaison. Il expose les méthodes qui retournent un point de terminaison par défaut et les collections de points de terminaison spécifiées. Par exemple, en fonction des critères spécifiés, l’énumérateur peut retourner des points de terminaison de communication, des points de terminaison de lecture ou des points de terminaison de capture. L’objet énumérateur d’appareil doit implémenter l’interface IMMDeviceEnumerator .
Objet de collection d’appareils
Un objet de collection d’appareils représente une collection d’appareils audio. Il doit implémenter l’interface IMMDeviceCollection .
Objet d’appareil
Un objet d’appareil représente un appareil audio particulier. Il permet d’accéder au magasin de propriétés de l’appareil audio et expose les interfaces de lecture et de capture audio disponibles sur l’appareil. L’objet d’appareil doit implémenter les interfaces IMMDevice et IMMEndpoint .
Objet de magasin de propriétés
Un objet de magasin de propriétés expose les propriétés associées à un périphérique audio. Certaines de ces propriétés sont utilisées par le système, mais les applications peuvent également stocker des propriétés arbitraires avec le point de terminaison audio.
Tous les appareils audio ont les trois propriétés suivantes :
L’objet de magasin de propriétés doit implémenter l’interface IPropertyStore .
  1. L’énumérateur de point de terminaison personnalisé doit être implémenté dans une DLL qui peut être chargée dans le système audio et d’autres applications. La DLL doit être signée afin que les processus sécurisés puissent la charger. La DLL doit implémenter et exporter la fonction GetTSAudioEndpointEnumeratorForSession , qui sert de point d’entrée à l’énumérateur de point de terminaison personnalisé.

Le service Services Bureau à distance appelle la méthode QueryProperty et définit le paramètre QueryTypesur WTS_QUERY_AUDIOENUM_DLL pour récupérer le nom de l’objet énumérateur.

Les objets énumérateurs personnalisés utilisent des interfaces de type COM et un mécanisme de comptage de références de type COM, mais ils ne sont pas de vrais objets COM. L’énumérateur de point de terminaison personnalisé doit avoir la possibilité d’utiliser des interfaces audio héritées utilisées par les applications qui ne prennent pas en charge COM. Pour cette raison, l’énumérateur de point de terminaison personnalisé ne doit pas s’appuyer sur le mécanisme de gestion du cycle de vie de COM. Les consommateurs de votre énumérateur de point de terminaison audio, comme MMDevAPI.dll, chargent la DLL d’énumérateur de point de terminaison personnalisé lorsque les applications utilisateur l’souhaitent, et ils ne déchargent pas l’énumérateur tant que l’énumérateur contient une référence à un objet d’énumérateur d’appareil, à un objet de collection d’appareils, à un objet d’appareil ou à un objet de magasin de propriétés. Toutefois, il n’est pas possible pour ces consommateurs de suivre les références à d’autres types d’objets appartenant à l’énumérateur de point de terminaison personnalisé. Par conséquent, nous recommandons à votre énumérateur de point de terminaison personnalisé de ne pas créer d’objets qui pourraient survivre à ces quatre types d’objets.

Pour implémenter un point de terminaison audio personnalisé

Pour implémenter un énumérateur de périphérique audio personnalisé, vous devez implémenter un point de terminaison audio personnalisé. La façon dont vos appareils audio personnalisés sont liés est en utilisant les deux instructions suivantes :

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

Nous ne nous attendons pas à ce que vous implémentiez la liste complète des interfaces IMMDevice::Activate dans votre énumérateur d’appareil audio personnalisé. Au lieu de cela, vous devez implémenter IAudioOutputEndpointRT et IAudioInputEndpointRT. Vous pouvez éventuellement en implémenter d’autres, comme IAudioEndpointVolume. Pour toute interface que vous n’implémentez pas, vous devez retourner E_NOINTERFACE (vous devez utiliser ce code d’échec spécifique). Windows revient ensuite à une implémentation stock de l’interface (par exemple, IAudioClient2).

Pour obtenir une documentation de référence supplémentaire sur l’implémentation et l’inscription de points de terminaison audio, consultez IAudioInputEndpointRT. Pour obtenir un diagramme montrant le fonctionnement de WASAPI, consultez Composants audio en mode utilisateur. Notez que tout l’audio en mode utilisateur est nouveau à partir de Windows Server 2008.

Création d’un fournisseur de protocole Bureau à distance

GetTSAudioEndpointEnumeratorForSession

IMMDevice

IMMDeviceCollection

IMMDeviceEnumerator

IMMEndpoint

Ipropertystore