Поделиться через


Метод 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

Указатель на переменную указателя, в которую метод записывает адрес экземпляра запрошенного интерфейса. С помощью этого метода вызывающий объект получает подсчитываемую ссылку на интерфейс. Вызывающий объект отвечает за освобождение интерфейса, если он больше не нужен, вызывая метод выпуска интерфейса. Если вызов GetService завершается ошибкой, *ppv имеет значение NULL.

Возвращаемое значение

Если метод выполнен успешно, он возвращает S_OK. В случае сбоя возможные коды возврата включаются, но не ограничиваются значениями, приведенными в следующей таблице.

Код возврата Description
E_POINTER
Параметр ppv имеет значение NULL.
E_NOINTERFACE
Запрошенный интерфейс недоступен.
AUDCLNT_E_NOT_INITIALIZED
Аудиопоток не инициализирован.
AUDCLNT_E_WRONG_ENDPOINT_TYPE
Вызывающий объект пытался получить доступ к интерфейсу IAudioCaptureClient в конечной точке отрисовки или интерфейсу IAudioRenderClient в конечной точке записи.
AUDCLNT_E_DEVICE_INVALIDATED
Устройство конечной точки звука было отключено, или звуковое оборудование или связанные аппаратные ресурсы были перенастроены, отключены, удалены или недоступны для использования.
AUDCLNT_E_RESOURCES_INVALIDATED
Ресурсы потока были недействительны. Эта ошибка может возникать по следующим причинам:
— поток приостановлен.
— Поток эксклюзивной или разгрузки отключен.
— Упаковаемое приложение с монопольным режимом или потоком разгрузки.
— Поток "защищенных выходных данных" закрыт.
AUDCLNT_E_SERVICE_NOT_RUNNING
Звуковая служба Windows не запущена.

Замечания

Для этого метода требуется предварительная инициализация интерфейса IAudioClient . Все вызовы этого метода завершаются ошибкой AUDCLNT_E_NOT_INITIALIZED до тех пор, пока клиент не инициализирует аудиопоток, успешно вызвав метод IAudioClient::Initialize .

Метод GetService поддерживает следующие интерфейсы служб:

В Windows 7 добавлен новый идентификатор службы IID_IMFTrustedOutput, который упрощает использование объектов центра управления безопасностью вывода (OTA). Эти объекты могут работать внутри или за пределами защищенного пути мультимедиа (PMP) Media Foundation и отправлять содержимое за пределы конвейера Media Foundation. Если вызывающий объект находится за пределами PMP, то OTA может не работать в PMP, а параметры защиты менее надежны. OTA должны реализовать интерфейс МВФTrustedOutput . Передав IID_IMFTrustedOutput в GetService, приложение может получить указатель на интерфейс IMFTrustedOutput объекта. Дополнительные сведения о защищенных объектах и МВФTrustedOutput см. в разделе "Защищенный путь к мультимедиа" в документации по пакету SDK для Media Foundation.

Сведения об использовании доверенных звуковых драйверов в OTAs см. в разделе "Защищенный режим пользователя" (PUMA).

Обратите внимание, что активация МВФTrustedOutput через этот механизм работает независимо от того, работает ли вызывающий объект в PMP. Однако если вызывающий объект не работает в защищенном процессе (т. е. вызывающий объект не находится в pmP Media Foundation), звуковая OTA может не работать в PMP, а параметры защиты являются менее надежными.

Чтобы получить идентификатор интерфейса для интерфейса службы, используйте оператор __uuidof . Например, идентификатор интерфейса IAudioCaptureClient определяется следующим образом:


const IID IID_IAudioCaptureClient  __uuidof(IAudioCaptureClient)

Сведения о операторе __uuidof см. в документации по пакету SDK для Windows.

Чтобы освободить объект IAudioClient и освободить все связанные с ним ресурсы, клиент должен освободить все ссылки на все объекты службы, созданные путем вызова GetService, помимо вызова release в самом интерфейсе IAudioClient . Клиент должен освободить службу из того же потока, который освобождает объект IAudioClient .

Интерфейсы IAudioSessionControl, IAudioStreamVolume, IChannelAudioVolume и ISimpleAudioVolume контролируют и отслеживают аспекты аудиосессий и потоков общего режима. Эти интерфейсы не работают с потоками в монопольном режиме.

Примеры кода, вызывающие метод GetService , см. в следующих разделах:

Требования

Требование Ценность
Минимальный поддерживаемый клиент Windows Vista [классические приложения | Приложения UWP]
минимальный поддерживаемый сервер Windows Server 2008 [классические приложения | Приложения UWP]
целевая платформа Windows
Header audioclient.h

См. также

Интерфейс IAudioCaptureClient

Интерфейс IAudioClient

IAudioClient::Initialize

Интерфейс IAudioClock

Интерфейс IAudioRenderClient

Интерфейс IAudioSessionControl

Интерфейс IAudioStreamVolume

Интерфейс IChannelAudioVolume

Интерфейс ISimpleAudioVolume