流路由

流路由 是媒体应用程序在设备之间切换流的能力,而播放或捕获会话中断最少。

计算机可以有多个呈现和捕获设备。 系统在 “声音 ”控制面板上列出这些设备。 在此列表中,用户可以将设备设置为每个角色的默认设备:播放、录制或控制台呈现、控制台捕获、通信呈现或通信捕获) 的四个通信 (角色。 设备列表可以动态修改,因为其中一些设备可以暂时可用,例如 USB 头戴显示设备。 当多个设备可用时,用户可以将默认值更改为其他设备。 用户还可以更改设备 (采样率、每个样本的位数等格式,) 设备属性的 “高级 ”选项卡上。

请考虑用户选择 扬声器 作为用于呈现音频流的默认设备的情况。 然后,用户连接 USB 头戴显示设备,选择耳机作为新的默认设备,并将设备的采样率从 44.1 kHz 更改为 48 kHz。 用户希望以新的采样率在耳机上播放音频流,同时对流会话造成最小中断。

在此方案中,媒体应用程序必须处理以下两种情况:

  • 流必须传输到新的默认设备,且播放中断最少。
  • 新设备必须恢复 (的新格式播放,即用户可以更改比采样率) 多。

在 Windows Vista 中,为了支持此方案,媒体应用程序必须提供流路由的实现。 应用程序负责终止现有流并在新设备上重启流。 如果用户更改了默认设备或其混合格式已更改,则所有关联的会话都已关闭,并且应用程序必须处理恢复。

在 Windows 7 中,应用程序可以将流从现有默认设备无缝传输到新的默认音频终结点。 高级音频 API 集(如 Media Foundation、DirectSound 和 WAVE API)实现流路由功能。 使用这些 API 集播放或捕获来自默认设备的流的媒体应用程序使用默认实现,并且不必修改应用程序。 但是,如果媒体应用程序直接使用 MMDeviceAPI 或 WASAPI,则应用程序需要提供流路由实现。

注意

MMDeviceAPI 和 WASAPI 是应用程序可用于在设备上呈现或捕获流的核心音频 API 组件。 MMDeviceAPI 发现新的音频终结点设备,WASAPI 管理媒体应用程序和音频终结点设备之间的音频数据流。

 

若要实现流路由功能,应用程序必须在以下情况下侦听 MMDeviceAPI 和 WASAPI 发送的通知:

  • 默认设备由用户更改。
  • 将删除现有默认设备,并添加新的默认设备。
  • 设备格式已更改。

通过处理这些通知,应用程序可以在将流传输到新的默认设备时执行必要的流管理操作。 此外,应用程序还可以在呈现会话处于活动状态时使用用户指定的新格式来呈现或捕获现有流。

本节包含下列主题:

Windows SDK 中包含的以下示例演示了应用程序如何处理流路由通知。

流管理

关于 MMDevice API

关于 WASAPI