Метод IAudioClient::GetService (audioclient.h)
Метод GetService обращается к дополнительным службам из объекта аудиоконферентного клиента.
Синтаксис
HRESULT GetService(
[in] REFIID riid,
[out] void **ppv
);
Параметры
[in] riid
Идентификатор интерфейса для запрошенной службы. Клиент должен задать этому параметру одно из следующих значений REFIID:
IID_IAudioCaptureClient
IID_IAudioClientDuckingControl
IID_IAudioClock
IID_IAudioRenderClient
IID_IAudioSessionControl
IID_IAudioStreamVolume
IID_IChannelAudioVolume
IID_IMFTrustedOutput
IID_ISimpleAudioVolume
Дополнительные сведения см. в подразделе "Примечания".
[out] ppv
Указатель на переменную указателя, в которую метод записывает адрес экземпляра запрошенного интерфейса. С помощью этого метода вызывающий объект получает подсчитываемую ссылку на интерфейс. Вызывающий объект отвечает за освобождение интерфейса, когда он больше не нужен, путем вызова метода Release интерфейса. Если вызов GetService завершается сбоем, *ppv имеет значение NULL.
Возвращаемое значение
Если метод завершается успешно, возвращает значение S_OK. В случае сбоя возможные коды возврата включают, но не ограничиваются ими, значения, показанные в следующей таблице.
Код возврата | Описание |
---|---|
|
Параметр ppv имеет значение NULL. |
|
Запрошенный интерфейс недоступен. |
|
Аудиопоток не инициализирован. |
|
Вызывающий объект пытался получить доступ к интерфейсу IAudioCaptureClient в конечной точке отрисовки или интерфейсу IAudioRenderClient в конечной точке захвата. |
|
Устройство конечной точки звука было отключено, или звуковое оборудование или связанные аппаратные ресурсы были перенастроены, отключены, удалены или иным образом стали недоступными для использования. |
|
Аудиослужба Windows не запущена. |
Комментарии
Этот метод требует предварительной инициализации интерфейса IAudioClient . Все вызовы этого метода завершаются ошибкой AUDCLNT_E_NOT_INITIALIZED до тех пор, пока клиент не инициализирует аудиопоток, вызвав метод IAudioClient::Initialize .
Метод GetService поддерживает следующие интерфейсы служб:
- IAudioCaptureClient
- IAudioClock
- IAudioRenderClient
- IAudioSessionControl
- IAudioStreamVolume
- IChannelAudioVolume
- IMFTrustedOutput
- ISimpleAudioVolume
Сведения об использовании доверенных аудиодрайверов в OTA см. в статье Защищенный звук в пользовательском режиме (PUMA).
Обратите внимание, что активация IMFTrustedOutput с помощью этого механизма работает независимо от того, работает ли вызывающий объект в PMP. Однако если вызывающий объект не выполняется в защищенном процессе (то есть вызывающий объект не находится в пределах PMP Media Foundation), звуковая OTA может не работать в PMP, а параметры защиты менее надежны.
Чтобы получить идентификатор интерфейса службы, используйте оператор __uuidof . Например, идентификатор интерфейса IAudioCaptureClient определяется следующим образом:
const IID IID_IAudioCaptureClient __uuidof(IAudioCaptureClient)
Сведения об операторе __uuidof см. в документации по Windows SDK.
Чтобы освободить объект IAudioClient и все связанные с ним ресурсы, клиент должен освободить все ссылки на все объекты службы, созданные путем вызова GetService, а также вызвать Release в интерфейсе IAudioClient . Клиент должен освободить службу из того же потока, который освобождает объект IAudioClient .
Интерфейсы IAudioSessionControl, IAudioStreamVolume, IChannelAudioVolume и ISimpleAudioVolume контролируют и отслеживают аспекты аудиосеансов и потоков в общем режиме. Эти интерфейсы не работают с потоками в монопольном режиме.
Примеры кода, вызывающие метод GetService , см. в следующих разделах:
Требования
Требование | Значение |
---|---|
Минимальная версия клиента | Windows Vista [классические приложения | Приложения UWP] |
Минимальная версия сервера | Windows Server 2008 [классические приложения | Приложения UWP] |
Целевая платформа | Windows |
Header | audioclient.h |