Implémentation d’un énumérateur de point de terminaison audio personnalisé
à partir 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 ayant un ensemble spécifique de fonctionnalités.
Pour implémenter un énumérateur de point de terminaison audio distant personnalisé
- Votre solution d’énumérateur de point de terminaison personnalisée doit implémenter quatre types principaux d’objets : les objets d’énumérateur de périphérique, les objets de collection d’appareils, les objets périphériques et les 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é d’énumérateur de point de terminaison. Elle expose des méthodes qui retournent un point de terminaison par défaut et des collections spécifiées de points de terminaison. Par exemple, selon les 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 de périphériques |
Un objet collection de périphériques représente une collection de périphériques audio. Il doit implémenter l’interface IMMDeviceCollection . |
| Objet d’appareil |
Un objet appareil représente un périphérique audio particulier. Il permet d’accéder à la Banque de propriétés de l’appareil audio et expose la lecture audio et les interfaces de capture disponibles sur l’appareil. L’objet périphérique doit implémenter les interfaces IMMDevice et IMMEndpoint . |
| Objet de la Banque de propriétés |
Un objet de la Banque 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 périphériques audio ont les trois propriétés suivantes : L’objet de la Banque de propriétés doit implémenter l’interface IPropertyStore . |
- 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 QueryType sur WTS _ _ _ DLL AUDIOENUM de requête pour récupérer le nom de l’objet énumérateur.
Les objets énumérateur personnalisés utilisent des interfaces de type COM et un mécanisme de décompte de références COM, mais ce ne sont pas des objets COM véritables. 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 reposer sur le mécanisme de gestion du cycle de vie de COM. Les consommateurs de votre énumérateur de point de terminaison audio, tels que MMDevAPI.dll, chargent la DLL d’énumérateur de point de terminaison personnalisée quand ils sont requis par les applications utilisateur, et ils ne déchargent pas l’énumérateur lorsque l’énumérateur contient une référence à un objet d’énumérateur de périphérique, un objet de collection d’appareils, un objet appareil ou un objet de magasin de propriétés. Toutefois, il n’est pas possible pour ces consommateurs de suivre des références à d’autres types d’objets appartenant à l’énumérateur de point de terminaison personnalisé. En conséquence, nous recommandons que votre énumérateur de point de terminaison personnalisé ne crée pas d’objets qui pourraient en surhabiter 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 périphériques audio personnalisés sont liés est liée à l’utilisation des deux instructions suivantes :
IMMDevice::Activate(IAudioOutputEndpointRT)IMMDevice::Activate(IAudioInputEndpointRT)
Nous ne pensons pas que vous implémentiez la liste complète des interfaces IMMDevice :: Activate dans votre énumérateur de périphérique audio personnalisé. Au lieu de cela, vous devez implémenter IAudioOutputEndpointRT et IAudioInputEndpointRT. Vous pouvez éventuellement implémenter quelques autres, telles que IAudioEndpointVolume. Pour toute interface que vous n’implémentez pas, vous devez retourner E _ nointerface (vous devez utiliser ce code d’erreur spécifique). Windows revient ensuite à une implémentation stockée de l’interface (par exemple, IAudioClient2).
Pour obtenir une documentation de référence supplémentaire sur la façon d’implémenter et d’inscrire des points de terminaison audio, consultez IAudioInputEndpointRT. Pour obtenir un diagramme illustrant le fonctionnement de WASAPI, consultez composants audio en mode utilisateur. notez que toutes les données audio en mode utilisateur sont nouvelles à partir de Windows Server 2008.