1. BAP 概述
在无线音频技术领域,LE Audio(低功耗蓝牙音频)的推出标志着音频传输技术的一次重大革新。作为其核心组件之一,BAP(Basic Audio Profile)定义了音频流配置和建立的基础规范,为单播(Unicast)和广播(Broadcast)两种传输模式提供了标准化框架。
BAP 的设计初衷是解决传统蓝牙音频在功耗、多设备连接和音质等方面的局限性。通过引入全新的 ISO(等时)传输层和 LC3 编解码器,BAP 在保持低功耗特性的同时,显著提升了音频质量和连接稳定性。对于开发者而言,理解 BAP 的工作原理是构建 LE Audio 应用的基础。
1.1 BAP 的核心功能
BAP 主要实现三大核心功能:
- 音频流管理:负责音频流的创建、配置和维护
- 能力协商:通过 PACS 服务实现设备间音频能力的发现和匹配
- 传输控制:管理 CIS(单播)和 BIS(广播)等时通道的建立和释放
在实际应用中,BAP 的工作流程通常始于能力发现阶段。当两个设备建立连接后,客户端(如手机)会首先通过 PACS 服务获取服务器(如耳机)支持的音频配置参数,然后基于这些信息选择合适的编解码器和传输参数。
提示:BAP 规范要求所有 LE Audio 设备必须实现 PACS 服务,这是能力发现和协商的基础。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 核心概念解析
2.1 方向(Direction)
音频流的方向是 BAP 中最基础的概念之一,它定义了数据流的传输方向:
c复制typedef enum {
BAP_DIR_SINK = 0x01, // 接收端(如耳机)
BAP_DIR_SOURCE = 0x02, // 发送端(如手机麦克风)
} bap_direction_t;
- Sink:音频数据接收端,负责播放音频内容。典型设备包括耳机、扬声器等。
- Source:音频数据发送端,负责采集和发送音频数据。典型设备包括手机、麦克风等。
在实际配置中,一个设备可以同时具备 Sink 和 Source 角色。例如,在通话场景中,TWS 耳机的左耳单元通常配置为 Sink(接收手机发送的通话音频),而内置麦克风则配置为 Source(向手机发送采集的语音)。
2.2 目标延迟(Target Latency)
延迟参数直接影响用户体验,BAP 定义了三个级别的目标延迟:
| 值 | 延迟级别 | 典型应用场景 |
|---|---|---|
| 0x01 | Low (7.5-15ms) | 游戏、专业音频制作 |
| 0x02 | Balanced (15-30ms) | 音乐播放、视频观看 |
| 0x03 | High (30-50ms) | 普通语音通话 |
延迟选择需要权衡功耗和实时性。低延迟配置通常需要更高的功耗,因为设备需要更频繁地收发数据。开发者应根据具体应用场景选择适当的延迟级别。
2.3 物理层(PHY)
BAP 支持三种物理层配置:
c复制typedef enum {
BAP_PHY_1M = 0x01, // 1 Mbps
BAP_PHY_2M = 0x02, // 2 Mbps(推荐)
BAP_PHY_CODED = 0x04, // Coded PHY(远距离)
} bap_phy_t;
- 1M PHY:兼容性最好,但带宽和能效较低
- 2M PHY:推荐配置,提供更高的数据传输率和更低的功耗
- Coded PHY:适用于远距离传输,但吞吐量较低
在实际部署中,2M PHY 是大多数场景的最佳选择。它能在保持合理功耗的同时,提供足够的带宽支持高质量音频传输。Coded PHY 主要用于特殊场景,如大型场馆的音频广播。
3. 单播(Unicast)模式详解
3.1 单播的特点与架构
单播模式是 BAP 中最常用的传输方式,具有以下特点:
- 点对点连接:一对一的数据传输
- 双向通信:支持同时收发(全双工)
- 可靠传输:基于 CIS 的重传机制保证数据完整性
典型的单播架构如下图所示:
code复制CIS 架构:
┌─────────┐ CIG ┌─────────┐
│ Source │ ←──────────→ │ Sink │
│ (手机) │ CIS x N │ (耳机) │
└─────────┘ └─────────┘
在这个架构中:
- CIG(Connected Isochronous Group):管理一组相关的 CIS 连接
- CIS(Connected Isochronous Stream):实际的音频数据传输通道
一个典型的 TWS 耳机配置可能包含:
- CIS_0:左耳音频(Sink)
- CIS_1:右耳音频(Sink)
- CIS_2:麦克风音频(Source)
3.2 单播配置参数
单播配置通过以下数据结构定义:
c复制typedef struct {
// 基本信息
uint8_t direction; // SI
