Condividi tramite


Implementazione di un enumeratore di endpoint audio personalizzato

A partire da Windows Server 2008 R2, è possibile implementare un enumeratore di endpoint audio remoto personalizzato come parte di un provider di protocolli Desktop remoto. Un provider di protocolli Desktop remoto può usare un enumeratore di endpoint audio personalizzato per recuperare una raccolta di endpoint audio con un set specifico di funzionalità.

Per implementare un enumeratore dell'endpoint audio remoto personalizzato

  1. La soluzione dell'enumeratore dell'endpoint personalizzato deve implementare quattro tipi principali di oggetti: oggetti enumeratori del dispositivo, oggetti raccolta dispositivi, oggetti dispositivo e oggetti archivio delle proprietà.
Tipo di oggetto Descrizione
Oggetto enumeratore dispositivo
Un oggetto enumeratore dispositivo fornisce la funzionalità dell'enumeratore endpoint. Espone metodi che restituiscono un endpoint predefinito e raccolte specificate di endpoint. Ad esempio, a seconda dei criteri specificati, l'enumeratore può restituire endpoint di comunicazione, endpoint di riproduzione o endpoint di acquisizione. L'oggetto enumeratore del dispositivo deve implementare l'interfaccia IMMDeviceEnumerator .
Oggetto Raccolta dispositivi
Un oggetto raccolta di dispositivi rappresenta una raccolta di dispositivi audio. Deve implementare l'interfaccia IMMDeviceCollection .
Oggetto dispositivo
Un oggetto dispositivo rappresenta un particolare dispositivo audio. Fornisce l'accesso all'archivio delle proprietà del dispositivo audio ed espone le interfacce di riproduzione audio e acquisizione disponibili nel dispositivo. L'oggetto dispositivo deve implementare le interfacce IMMDevice e IMMEndpoint .
Oggetto Store delle proprietà
Un oggetto archivio proprietà espone le proprietà associate a un dispositivo audio. Alcune di queste proprietà vengono usate dal sistema, ma le applicazioni possono archiviare anche proprietà arbitrarie con l'endpoint audio.
Tutti i dispositivi audio hanno le tre proprietà seguenti:
L'oggetto archivio proprietà deve implementare l'interfaccia IPropertyStore .
  1. L'enumeratore dell'endpoint personalizzato deve essere implementato in una DLL che può essere caricata nel sistema audio e in altre applicazioni. La DLL deve essere firmata in modo che i processi sicuri possano caricarlo. La DLL deve implementare ed esportare la funzione GetTSAudioEndpointEnumeratorForSession , che funge da punto di ingresso all'enumeratore dell'endpoint personalizzato.

Il servizio Servizi Desktop remoto chiama il metodo QueryProperty e imposta il parametro QueryType su WTS_QUERY_AUDIOENUM_DLL per recuperare il nome dell'oggetto enumeratore.

Gli oggetti enumeratori personalizzati usano interfacce simili a COM e un meccanismo di conteggio dei riferimenti simile a COM, ma non sono oggetti COM veri. L'enumeratore dell'endpoint personalizzato deve avere la possibilità di usare interfacce audio legacy usate dalle applicazioni che non supportano COM. Per questo motivo, l'enumeratore dell'endpoint personalizzato non deve basarsi sul meccanismo di gestione del ciclo di vita COM. I consumer dell'enumeratore dell'endpoint audio, ad esempio MMDevAPI.dll, caricano la DLL dell'enumeratore dell'endpoint personalizzato quando richiesto dalle applicazioni utente e non scaricano l'enumeratore mentre l'enumeratore contiene un riferimento a un oggetto enumeratore dispositivo, oggetto raccolta dispositivi, oggetto dispositivo o oggetto archivio proprietà. Non è tuttavia possibile tenere traccia dei riferimenti ad altri tipi di oggetti di proprietà dell'enumeratore dell'endpoint personalizzato. Di conseguenza, è consigliabile che l'enumeratore dell'endpoint personalizzato non crei oggetti che possano generare questi quattro tipi di oggetti.

Per implementare un endpoint audio personalizzato

Per implementare un enumeratore di dispositivi audio personalizzato, è necessario implementare un endpoint audio personalizzato. Il modo in cui i dispositivi audio personalizzati sono collegati è usando le due istruzioni seguenti:

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

Non ci si aspetta di implementare l'elenco completo delle interfacce IMMDevice::Attiva nell'enumeratore del dispositivo audio personalizzato. È invece necessario implementare IAudioOutputEndpointRT e IAudioInputEndpointRT. Facoltativamente, è possibile implementare alcuni altri elementi, ad esempio IAudioEndpointVolume. Per qualsiasi interfaccia non implementata, è necessario restituire E_NOINTERFACE (è necessario usare questo codice di errore specifico). Windows restituirà quindi un'implementazione stock dell'interfaccia ,ad esempio IAudioClient2.

Per altre informazioni di riferimento su come implementare e registrare endpoint audio, vedere IAudioInputEndpointRT. Per un diagramma che illustra il funzionamento di WASAPI, vedere Componenti audio in modalità utente. Si noti che tutto l'audio in modalità utente è nuovo a partire da Windows Server 2008.

Creazione di un provider di protocollo Desktop remoto

GetTSAudioEndpointEnumeratorForSession

IMMDevice

IMMDeviceCollection

IMMDeviceEnumerator

IMMEndpoint

Ipropertystore