在 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 客户端可以通过处理为设备发送的设备和音频会话通知来提供流路由的实现。 有关这些通知的详细信息,请参阅 流路由的相关通知。
相关主题