windows蓝牙驱动开发-BLE音频(一)

蓝牙BLE 音频允许通过等时传输将单播或广播音频流式传输至蓝牙BLE 设备。 从蓝牙核心规范版本 5.3 开始,主机平台没有任何标准定义的主机控制器接口 (HCI) 可向蓝牙控制器发送以及从其接收等时数据。 本文档定义了 Windows 蓝牙供应商特定的音频路径 (VSAP),以允许平台使用特定于供应商的解决方案来启用蓝牙BLE 音频流式处理。 VSAP 软件接口使用本文档中定义的 Windows 音频类扩展 (ACX) 和更多接口属性。

术语和先决条件

除此表中定义的术语外,本文档还引用了由 Windows 音频类扩展定义的术语。

本文档假定熟悉之前定义的术语和蓝牙核心 5.3 规范中定义的以下 HCI 命令:

  • HCI_Read_Local_Supported_Codecs (v2)
  • HCI_Read_Local_Supported_Codec_Capabilities
  • HCI_LE_Set_CIG_Parameters
  • HCI_LE_Create_CIS
  • HCI_Configure_Data_Path
  • HCI_LE_Setup_ISO_Data_Path
  • HCI_LE_Remove_ISO_Data_Path
  • HCI_LE_Remove_CIG

蓝牙 LE 音频 VSAP 要求音频驱动程序使用 ACX 框架。 针对蓝牙 LE 音频采用 ACX 提供了多种优势,例如:

  • 支持适用于今后的 Windows 版本的首选音频驱动程序模型。
  • 使用 ACX 对多堆栈音频解决方案的本机支持,而无需在驱动程序之间使用专用的 DDI。
  • 不需要 IHV 音频驱动程序将来自音频系统的请求中继到蓝牙堆栈。 相反,ACX 可以通过配置文件线路将请求直接发送到蓝牙堆栈。

体系结构

定义

不同的 VSAP 体系结构变体中涉及以下组件。

Windows ACX 框架

此组件支持多栈音频终结点。 对于蓝牙 LE 音频,构成音频终结点的软件组件是供应商特定的音频驱动程序堆栈和 Windows 蓝牙 LE 音频配置文件。

供应商特定的音频驱动程序堆栈

此供应商特定组件负责通过供应商定义的音频接口向蓝牙控制器发送蓝牙 LE 音频数据,以及从其接收蓝牙 LE 音频数据。 它至少由 ACX 流式处理驱动程序组成,用于管理传入和传出音频数据。 如果有更多 ACX 驱动程序是多线路 ACX 音频终结点的必要部分,则可能会包含这些驱动程序。 在本文档中,此组件也称为 IHV ACX 流式处理驱动程序。

Windows 蓝牙 LE 音频配置文件

此组件包含基本音频配置文件 (BAP)、音量控制配置文件和麦克风控制配置文件的实现。 它负责为每个蓝牙 LE 音频设备或与 Windows 配对的一组设备创建头 ACXCIRCUIT,报告远程设备和蓝牙控制器所报告的音频格式,并管理等时通道和组的状态。

Windows 蓝牙核心堆栈

此组件提供一个接口,允许 Windows 蓝牙 LE 音频配置文件从本地蓝牙控制器查询支持的编解码器功能,以及管理等时通道和组的状态。

LC3 编解码器

此子组件负责在压缩的 LC3 音频和 PCM 音频之间进行转换。 它应同时支持编码和解码功能,并且可以在软件中作为供应商特定的音频驱动程序 (VSAP) 堆栈的一部分来实现,或在硬件中作为音频 DSP 或蓝牙控制器的一部分来实现。 该图按名称提及 LC3,因为它是蓝牙 SIG 支持的标准编解码器。 但是,Windows 日后支持的编解码器和供应商特定的编解码器也可能以类似的方式合并到体系结构中。

体系结构变体

蓝牙 LE 音频 VSAP 体系结构支持不同的流式处理变体。

  1. 无音频卸载的边带蓝牙 LE 音频流式处理
  2. 有无音频卸载的边带蓝牙 LE 音频流式处理
  3. 供应商特定的带内蓝牙 LE 音频流式处理

在以下各图中,带阴影的组件由 IHV 提供,不带阴影的组件由 OS 提供。

无音频卸载的边带蓝牙 LE 音频体系结构

边带体系结构使用供应商特定的音频接口,以允许音频驱动程序堆栈向蓝牙控制器发送音频数据以及从其接收音频数据。 此数据路径不同于用于其他蓝牙数据的 HCI 数据路径,例如在单播客户端和远程单播服务器之间发出消息信号。 下图模拟了一个边带体系结构,其中 LC3 编解码器托管在蓝牙控制器中。 将 LC3 编解码器托管在供应商特定的音频驱动程序堆栈中进行软件编码和解码也是有效的。 在这种情况下,发送到蓝牙控制器的音频将格式化为 LC3 音频帧,而非 PCM 音频。

下图显示了蓝牙控制器中具有 LC3 编解码器的边带蓝牙 LE 音频体系结构。

下图显示了音频驱动程序堆栈中具有 LC3 编解码器的边带蓝牙 LE 音频体系结构。

有音频卸载的边带蓝牙 LE 音频体系结构

带音频卸载的边带体系结构包含音频 DSP 硬件组件,用于提供具有省电优势的蓝牙 LE 音频流式处理解决方案。 下图演示了在蓝牙控制器中具有 LC3 编解码器以及在音频 DSP 中具有该编解码器的可能体系结构。

下图显示了蓝牙控制器中具有 LC3 编解码器的边带蓝牙 LE 音频(带音频卸载)体系结构。

下图显示了音频 DSP 中具有 LC3 编解码器的边带蓝牙 LE 音频(带音频卸载)体系结构。

供应商特定的带内蓝牙 LE 音频体系结构

VSAP 带内体系结构使自定义管道能够向蓝牙控制器的 HCI 发送来自供应商特定音频驱动程序堆栈的蓝牙 LE 音频数据,以及从蓝牙控制器的 HCI 接收这些数据。 此体系结构包含一个新组件"IHV ISO 合并组件"。此组件负责管理 ISO 数据的流控制。 如果需要发送任何 HCI 命令,它还应与 Windows 蓝牙核心堆栈共享 HCI 命令流控制。

下图显示了供应商特定的带内蓝牙 LE 音频体系结构。

相关推荐
LIZHUOLONG13 小时前
linux 双向链表
linux·windows·链表
_extraordinary_4 小时前
list的模拟实现详解
数据结构·windows·list
步、步、为营9 小时前
C#局部函数 VS Lambda表达式
开发语言·windows·c#
Kevinyu_9 小时前
Java ArrayList
java·开发语言·windows
0xCC说逆向9 小时前
Windows图形界面(GUI)-QT-C/C++ - Qt List Widget详解与应用
c语言·开发语言·c++·windows·qt·win32·1024程序员节
朝阳3912 小时前
windows 极速安装 Linux (Ubuntu)-- 无需虚拟机
linux·windows·ubuntu
0xCC说逆向18 小时前
Windows图形界面(GUI)-QT-C/C++ - QT 对话窗口
java·c语言·开发语言·c++·windows·qt·microsoft
0xCC说逆向18 小时前
Windows图形界面(GUI)-QT-C/C++ - Qt按钮控件详解
c语言·开发语言·c++·windows·qt·win32
黄公子学安全18 小时前
网安快速入门之Windows命令
windows