流路由

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

计算机可以有多个呈现和捕获设备。 系统在“声音”控制面板上列出这些设备。 在此列表中,用户可以将设备设置为每个角色的默认设备:播放、录制或四个通信角色(控制台呈现、控制台捕获、通信呈现或通信捕获)。 可以动态修改设备列表,因为其中一些设备暂时可用,例如 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