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à.
Implementare un enumeratore di endpoint audio remoto personalizzato
- La soluzione dell'enumeratore endpoint personalizzato deve implementare quattro tipi principali di oggetti: oggetti enumeratori di dispositivi, oggetti raccolta dispositivi, oggetti dispositivo e oggetti dell'archivio delle proprietà.
Tipo di oggetto | Descrizione |
---|---|
Oggetto enumeratore di dispositivo |
Un oggetto di enumerazione dei dispositivi fornisce la funzionalità di enumerazione degli endpoint. Espone metodi che restituiscono un endpoint predefinito e raccolte di endpoint specificati. 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'interfacciaIMMDeviceEnumerator. |
Oggetto raccolta dispositivi |
Un oggetto di raccolta 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 e acquisizione audio disponibili nel dispositivo. L'oggetto dispositivo deve implementare le interfacce IMMDevice e IMMEndpoint. |
Oggetto di archiviazione delle proprietà |
Un oggetto di archivio delle proprietà espone le proprietà associate a un dispositivo audio. Alcune di queste proprietà vengono usate dal sistema, ma le applicazioni possono archiviare proprietà arbitrarie anche con l'endpoint audio. Tutti i dispositivi audio hanno le tre proprietà seguenti: L'oggetto archivio proprietà deve implementare l'interfaccia IPropertyStore. |
- L'enumeratore di 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 per l'enumeratore di 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 reali. L'enumeratore di endpoint personalizzato deve avere la possibilità di usare interfacce audio legacy usate dalle applicazioni che non supportano COM. Per questo motivo, l'enumeratore di endpoint personalizzato non deve basarsi sul meccanismo di gestione del ciclo di vita di COM. I consumatori dell'enumeratore dell'endpoint audio, come MMDevAPI.dll, caricano la DLL dell'enumeratore dell'endpoint personalizzato quando richiesto dalle applicazioni utente e non rimuovono l'enumeratore finché l'enumeratore mantiene un riferimento a un oggetto enumeratore del dispositivo, un oggetto raccolta dispositivi, un oggetto dispositivo o un oggetto archivio proprietà. Non è tuttavia possibile che questi consumatori tengano traccia dei riferimenti ad altri tipi di oggetti che sono di proprietà dell'enumeratore personalizzato degli endpoint. Di conseguenza, è consigliabile che l'enumeratore di endpoint personalizzato non crei oggetti che potrebbero sopravvivere a 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 consiste nell'usare le due istruzioni seguenti:
IMMDevice::Activate(IAudioOutputEndpointRT)
IMMDevice::Activate(IAudioInputEndpointRT)
Non prevediamo di implementare l'elenco completo delle interfacce IMMDevice::Activate nell'enumeratore di dispositivi audio personalizzato. È invece necessario implementare IAudioOutputEndpointRT e IAudioInputEndpointRT. Facoltativamente, è possibile implementare altri, ad esempio IAudioEndpointVolume. Per qualsiasi interfaccia non implementata, è necessario restituire E_NOINTERFACE (è necessario usare questo codice di errore specifico). Windows eseguirà quindi il fallback su un'implementazione predefinita 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 User-Mode Componenti audio. Si noti che tutto l'audio in modalità utente è nuovo a partire da Windows Server 2008.