获取流路由的设备终结点
在 Windows 7 中,使用核心音频 API(如 Media Foundation、DirectSound 和 Wave API)的高级平台 API 通过处理从现有设备到新的默认音频终结点的流切换来实现流路由功能。 使用这些 API 的媒体应用程序(例如,在 IMMDevice 对象上激活 IDirectSound 或 IBaseFilter 对象的应用程序)使用流路由行为,而无需对源进行任何修改。
高级 API 为通过 IMMDeviceEnumerator::GetDefaultAudioEndpoint 获取的设备终结点实现流路由。 如果应用程序将流传输到默认设备,则流路由功能将按规定运行。 如果通过任何其他机制检索到新设备,即使该设备与默认设备相同,也不会将流切换到新设备。
直接使用核心音频 API 的媒体应用程序(WASAPI 客户端)可为任何呈现或捕获设备提供自定义流路由实现。 WASAPI 客户端可以复制高级 API 提供的实现方式,将其限制为在被设置为默认设备的设备上打开的流。 要获取默认设备终结点的引用,客户端必须调用 IMMDeviceEnumerator::GetDefaultAudioEndpoint。 在此调用中,客户端必须通过指定 dataFlow 参数来说明它需要的是指向呈现默认设备还是捕获默认设备的指针。 客户端还必须在 ERole 属性(eConsole 或 eCommunications)中为终结点指定适当的角色。 不要使用 eMultimedia。
如果应用程序将流传输到任何其他设备,则可通过指定终结点 ID 字符串(调用 IMMDeviceEnumerator::GetDevice)来获取设备。
设备被识别后,WASAPI 客户端可通过处理为设备发送的设备和音频会话通知来实现流路由。 有关这些通知的详细信息,请参阅流路由的相关通知。
相关主题