iAudioClient::GetService 方法 (audioclient.h)
GetService 方法从音频客户端对象访问其他服务。
语法
HRESULT GetService(
[in] REFIID riid,
[out] void **ppv
);
参数
[in] riid
请求的服务的接口 ID。 客户端应将此参数设置为以下 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 接口。 在客户端通过成功调用 IAudioClient::Initialize 方法初始化音频流之前,对此方法的所有调用都将失败并出现错误AUDCLNT_E_NOT_INITIALIZED。
GetService 方法支持以下服务接口:
- IAudioCaptureClient
- IAudioClock
- IAudioRenderClient
- IAudioSessionControl
- IAudioStreamVolume
- IChannelAudioVolume
- IMFTrustedOutput
- ISimpleAudioVolume
有关在 OTA 中使用受信任的音频驱动程序的信息,请参阅 受保护的用户模式音频 (PUMA) 。
请注意,无论调用方是否在 PMP 中运行,都可通过此机制激活 IMFTrustedOutput。 但是,如果调用方未在受保护的进程中运行, (也就是说,调用方不在 Media Foundation 的 PMP) 则音频 OTA 可能无法在 PMP 中运行,并且保护设置不太可靠。
若要获取服务接口的接口 ID,请使用 __uuidof 运算符。 例如, IAudioCaptureClient 的接口 ID 定义如下:
const IID IID_IAudioCaptureClient __uuidof(IAudioCaptureClient)
有关 __uuidof 运算符的信息,请参阅Windows SDK文档。
若要释放 IAudioClient 对象并释放其所有关联的资源,除了在 IAudioClient 接口本身上调用 Release 外,客户端还必须释放对通过调用 GetService 创建的任何服务对象的所有引用。 客户端必须从释放 IAudioClient 对象的同一线程释放服务。
IAudioSessionControl、IAudioStreamVolume、IChannelAudioVolume 和 ISimpleAudioVolume 接口控制和监视音频会话和共享模式流的方面。 这些接口不适用于独占模式流。
有关调用 GetService 方法的代码示例,请参阅以下主题:
要求
要求 | 值 |
---|---|
最低受支持的客户端 | Windows Vista [桌面应用 | UWP 应用] |
最低受支持的服务器 | Windows Server 2008 [桌面应用 | UWP 应用] |
目标平台 | Windows |
标头 | audioclient.h |