ESP-BT-AUDIO 组件
概述
ESP_BT_AUDIO 是乐鑫推出的蓝牙音频高级组件,用于统一管理经典蓝牙(Classic Bluetooth)与 LE Audio 的音频能力。该组件整合了底层蓝牙协议、音频数据流与事件通知流程,为应用层提供统一的初始化、数据访问和状态管理接口,从而降低蓝牙音频应用的开发复杂度。
ESP_BT_AUDIO 会根据用户配置的角色(role)自动完成对应协议的初始化与管理,并通过统一事件机制向应用层上报连接状态、设备发现、音频流状态、播放控制、音量变化、通话状态、通讯录和通话记录等信息。
该组件适用于如下典型场景:
蓝牙音箱
蓝牙耳机
智能音频设备
带通话能力的语音终端
需要接入 ESP-GMF pipeline 的蓝牙音频应用
主要特性
统一的蓝牙音频接口 对上提供统一 API 和事件回调,应用无需分别处理不同 Bluetooth profile 的底层差异。
支持经典蓝牙音频协议 支持 A2DP Sink、A2DP Source、HFP Hands-Free、AVRCP Controller/Target 和 PBAP Client Equipment 等功能。
统一事件回调模型 通过
esp_bt_audio_event_cb_t上报连接、发现、stream 生命周期、播放控制、元数据、音量、通话状态、电话状态、通讯录和通话记录等事件。Stream 抽象 使用
esp_bt_audio_stream_handle_t表示蓝牙音频流,支持查询 codec 信息、数据方向、业务上下文,并通过 packet API 读写编码帧。灵活的数据接入方式 支持 Packet I/O 直接读写蓝牙音频数据包,也支持通过
esp_gmf_io_bt接入 ESP-GMF pipeline。降低应用开发复杂度 将协议初始化、profile 管理、状态变化和数据流处理收敛到统一组件中,提高代码复用性和可扩展性。
功能特性
ESP_BT_AUDIO 支持如下功能:
功能 |
说明 |
典型应用 |
|---|---|---|
A2DP Sink |
从手机、PC 等远端音源接收音频并在本地播放 |
蓝牙音箱、耳机 |
A2DP Source |
将本地音频发送到远端蓝牙音箱或耳机 |
播放器、语音设备 |
HFP Hands-Free |
支持通话类语音场景 |
车载、耳机、语音终端 |
AVRCP Controller/Target |
支持播放控制、元数据和播放状态通知 |
播控面板、音频播放器 |
PBAP Client Equipment |
拉取手机通讯录和通话记录 |
带电话簿能力的终端设备 |
GMF I/O |
将蓝牙音频 stream 接入 ESP-GMF pipeline |
复杂音频处理链路 |
架构概览
ESP_BT_AUDIO 位于应用层与蓝牙协议栈之间,作为适配层向上提供统一接口,向下对接 BT host、蓝牙 controller 以及各类 Classic Bluetooth profile。底层 profile 和 host 的回调会被组件统一转换为事件,再通知应用层处理。
典型处理流程如下:
应用初始化 NVS 和 BT controller。
应用配置 host、role 和事件回调。
调用
esp_bt_audio_init()初始化组件。组件根据 role 初始化对应蓝牙协议。
连接、发现、stream 状态和控制事件通过统一回调上报。
应用根据 stream 方向选择读取、写入或绑定 GMF pipeline。
Stream 生命周期
ESP_BT_AUDIO 的 stream 生命周期由组件内部维护,并通过 ESP_BT_AUDIO_EVENT_STREAM_STATE_CHG 事件上报。应用可根据状态完成编解码器初始化、pipeline 绑定、数据处理启停和资源释放。
常见状态如下:
ALLOCATED:stream 已创建,应用可查询 codec、方向和上下文,并分配相关资源。
STARTED:音频流已启动,应用开始读取或写入编码帧。
STOPPED:音频流已停止,应用停止对应处理流程。
RELEASED:stream 已释放,应用清理相关资源。
典型数据流
A2DP Sink 场景中,手机或 PC 作为音源发送 SBC 等编码帧,ESP 设备通过 ESP_BT_AUDIO 获取编码数据,再经过解码、采样率转换、声道转换等处理后输出到 I2S、DAC 或 codec device。
A2DP Source 场景中,ESP 设备从文件、麦克风或 pipeline 获取本地音频数据,经过必要的转换和编码后,通过 ESP_BT_AUDIO 发送给远端蓝牙音箱或耳机。
示例工程
可以通过以下命令创建 bt_audio 示例工程:
idf.py create-project-from-example "espressif/esp_bt_audio=0.8.1:bt_audio"
更多示例代码请参考组件中的 examples 目录。
组件链接
组件注册表: esp_bt_audio component
README: esp_bt_audio README