在无线音频的世界里,一场静默却深刻的革命正在进行。
它,就是LE Audio。
这不仅仅是一次技术迭代,而是从底层重新定义声音如何被创造、传输和体验的范式转移。其复杂性令人敬畏——它并非单一技术,而是一套精密的生态系统:全新的LC3编解码器以超凡效率重塑音质与功耗的平衡,多重串流音频让真无线立体声达到前所未有的稳定与同步,而音频广播功能则打破了“一对一”连接的百年窠臼,让声音如电台般自由播撒。
然而,正是这种复杂性,构成了我们必须深入学习它的不可辩驳的理由。未来的声音图景将由它绘制:从下一代真无线耳机、无障碍助听设备到公共场所的沉浸式音频导览、多语言广播,乃至元宇宙中清晰无缝的语音交互。不了解LE Audio,将意味着在即将到来的音频浪潮中失去对话的基石。
这不仅仅关乎技术本身,更关乎我们如何连接彼此,如何感知世界。让我们共同开启这段探索之旅,揭开LE Audio的复杂面纱,看清它为何必将成为未来数年里,每一个科技从业者、音频爱好者乃至普通用户都无法忽视的关键命题。
接下来的系列文章,我们将逐步拆解这座精妙的技术大厦。
同时我也录制了一系列的Le audio视频,有兴趣的可以咨询,我会带领你们入门Le audio!翻过大山,眼下皆是风景!!!
------------------------------------------------------------------------------------------------------------------------------------------
视频链接:https://item.taobao.com/item.htm?id=1001969040805&mi_id=000032T4qZX9WZoRwX6YbxlNUaZOfOI6XoxDx0jxsfnwlEc&spm=a21xtw.29178619.0.0
Le Audio文章目录:
还在为蓝牙BLE Audio的学习苦恼吗?安排下,让你一文彻底了解Le Audio蓝牙低功耗音频的技术-CSDN博客
---------------------------------------------------------------------------------------------------------------------------------
一. 周期广播流程
我们来拆解下流程,分别介绍下以下几个command
1. HCI_LE_Set_Extended_Advertising_Parameters 指令介绍
该命令是蓝牙 5.0引入的 HCI 命令(Opcode0x0036),用于配置扩展广告(Extended Advertising)的参数。与传统的LE_Set_Advertising_Parameters相比,它支持更多的广告类型、更灵活的 PHY(1M、CODED、2M)、更大的数据载荷以及多个广告集。
参数 | 长度 | 说明 |
Advertising_Handle | 1 octet | 广告集句柄,范围 |
Advertising_Event_Properties | 2 octets | 位掩码,定义广告事件的属性。常用取值(Bit 0~15): |
Primary_Advertising_Interval_Min | 3 octets | 主广告间隔最小值,单位 |
Primary_Advertising_Interval_Max | 3 octets | 主广告间隔最大值(同上,通常设置 Min = Max 以获得固定隔)。 |
Primary_Advertising_Channel_Map | 1 octet | 主广告使用的信道(37/38/39),位掩码: |
Own_Address_Type | 1 octet | 本地设备地址类型: |
Peer_Address_Type | 1 octet | 对端地址类型(仅定向广告有效): |
Peer_Address | 6 octets | 对端蓝牙设备地址(定向广告的目标地址)。非定向广告时可全填 |
Advertising_Filter_Policy | 1 octet | 过滤策略,控制响应哪些设备的扫描请求/连接请求: |
Advertising_TX_Power | 1 octet | 广告发射功率(单位 dBm,有符号整数,范围 -127 ~ +20)。常用特殊值: |
Primary_Advertising_PHY | 1 octet | 主广告所采用的 PHY: |
Secondary_Advertising_Max_Skip | 1 octet | 辅助广告同步时最大可跳过的 AUX 包数量(0~0xFF)。通常设为 |
Secondary_Advertising_PHY | 1 octet | 辅助广告所使用的 PHY: |
Advertising_SID | 1 octet | 广告集 ID(0~0x0F),用于在扫描响应中标识广告集。同一设备的不同广告集可以设置相同的 SID,便于扫描端过滤。 |
Scan_Request_Notification_Enable | 1 octet | 是否使能扫描请求通知(通过 事件上报): • |
2. LE Set Periodic Advertising Parameters
对于Le audio我们先来介绍V1了哈,就不介绍V2了
Advertising_Handle(广播句柄):
- 含义:一个0x00至0xEF之间的标识符。这是关联扩展广播集与周期性广播集的唯一纽带。
- 关键点:你必须先使用
LE Set Extended Advertising Parameters命令创建一个具有相同Advertising_Handle的扩展广播集。周期性广播集是其附属。
Periodic_Advertising_Interval_Min/Max(最小/最大广播间隔):
- 含义:定义广播事件之间的时间间隔范围,单位为0.625毫秒。
- 关键约束:
Min必须 ≤Max。控制器会在此范围内选择一个最优值。对于音频等实时流,此值通常非常小(如 7.5 ms ~ 10 ms)。
Periodic_Advertising_Properties(广播属性):
- 含义:Include TxPower in the advertising PDU:如果第6位被设置(即值为1),则表示广播数据包中应包含传输功率值。传输功率值通常用于指示设备发送广播数据时的功率级别,这有助于接收方估计信号强度和可能的连接质量。
3. HCI_LE_Set_Extended_Advertising_Enable 指令介绍
该命令(Opcode0x0039)是蓝牙 5.0 引入的 HCI 命令,用于启用或禁用一个或多个扩展广告集(Extended Advertising Sets)。通过该命令,可以同时控制多个广告实例的启动/停止,并且可以为每个广告实例指定运行时长(Duration)和最大发送事件数。
参数 | 长度 | 说明 |
Enable | 1 octet | 启用或禁用广告: |
Num_Sets | 1 octet | 指定本次操作的广告集数量,即后续参数中 数组的长度。取值范围 (最多 128 个集)。当 表示停止所有正在进行的广告(忽略后续数组)。 |
Advertising_Handle[i] | 1 octet × N | 广告集句柄数组(长度为 |
Duration[i] | 2 octets × N | 每个广告集的运行时长,单位10 ms。取值范围: 到 |
Max_Extended_Advertising_Events[i] | 1 octet × N | 每个广告集在 |
4. LE Set Periodic Advertising Enable
- Enable(使能标志)
- 0x00:Disable(禁用):停止该广播集的周期性广播。
- 0x01:Enable(启用):开始周期性广播。
- 这是指令的核心开关,直接决定周期性广播是否活跃。
- Advertising Handle(广播句柄)
- 范围:0x00 到 0xEF(与扩展广播集一致)。
- 标识要启用或禁用的具体广播集。
- 必须与之前使用
LE Set Extended Advertising Parameters创建的广播集句柄匹配。
5.LE Set Periodic Advertising Data
- Advertising Handle(广播句柄):
- 这是一个8位的标识符(0x00 - 0xEF)。
- 在启用扩展广播时,一个控制器可以同时管理多个“广播集”。每个广播集都有一个唯一的
Advertising Handle。 - 这个指令通过指定
Advertising Handle来明确操作的是哪一个广播集的数据。
- Operation(操作):
- 指定此次指令要执行的操作。
- 0x00:保留
- 0x01:Intermediate Fragment(中间片段):表示本次设置的数据不是完整的广播数据,而是一个片段。用于数据长度超过单个HCI指令容量时的分片传输。
- 0x02:First Fragment(第一个片段):表示这是分片传输的第一个数据块。
- 0x03:Last Fragment(最后一个片段):表示这是分片传输的最后一个数据块。
- 0x04:Complete Data(完整数据):表示本次传输的数据就是完整的广播数据,无需分片。这是最常用的操作。
- Advertising Data(广播数据):
- 这就是你想要通过周期性广播发送出去的实际数据内容。
- 数据的格式遵循AD Structure的规则。每个AD Structure由一个长度字节、一个AD Type(数据类型)字节和实际数据组成。
- 例如,可以包含:
- 本地名称(
AD Type: 0x09或0x08) - 广播标志(
AD Type: 0x01) - 16位服务UUID列表(
AD Type: 0x03) - 制造商自定义数据(
AD Type: 0xFF) —— Beacon常用 - 发射功率(
AD Type: 0x0A)
- 本地名称(
- 数据总长度不能超过控制器支持的最大值(对于扩展广播,最多251字节)。
二. BIG/BIS流程
1. HCI_LE_Create_BIG
HCI_LE_Create_BIG命令是蓝牙5.2核心规范为支持 LE Audio 而引入的关键命令。它负责创建一个广播等时流(Broadcast Isochronous Group, BIG),这也是实现蓝牙广播音频(Auracast™)的基础。
BIG 由一个或多个广播等时流(Broadcast Isochronous Stream, BIS)组成,可以将音频数据以一对多的方式广播给无数个接收者,是公共场合(如机场、健身房、餐厅)音频共享的核心技术。
该命令是主机端(Host)用来配置和控制控制器端(Controller)的,建立广播音频所需的所有参数都在这里指定。
参数 | 大小 | 描述 |
BIG_Handle | 1 octet | BIG的唯一标识符,由主机(Host)自行分配和管理-2 ,用于后续控制该BIG。取值范围: |
Advertising_Handle | 1 octet | 关键:关联到一个已配置好的周期性广播(Periodic Advertising)的句柄。广播数据将搭载在这个周期性广播的通道里发送出去。 |
Num_BIS | 1 octet | 该BIG中包含的BIS(音频流)总数。一个BIG最多可包含31个BIS。 |
SDU_Interval | 3 octets | 服务数据单元(SDU)的间隔,单位为微秒(μs)。它决定了发送一个SDU(通常是编码后的音频帧)的时间频率。 |
Max_SDU | 2 octets | 单个SDU的最大大小,单位为字节(Octets)。例如,LC3音频编码在48kHz下可能设置为 ~155字节。 |
Max_Transport_Latency | 2 octets | 最大传输延迟,单位为毫秒(ms)。这定义了从数据准备好发送到接收端成功接收到的最长时间。 |
RTN (Retransmission Number) | 1 octet | 每条PDU的重传次数。这是一个建议值,控制器(Controller)可能根据信号质量调整。 |
PHY | 1 octet | BIS使用的物理层(PHY)模式,是位掩码,支持设定多种模式: |
Packing | 1 octet | BIS子事件的排列方式,当BIG中包含多个BIS时生效 : |
Framing | 1 octet | BIS数据PDU的格式和模式: |
Encryption | 1 octet | 加密开关: |
Broadcast_Code | 16 octets | 广播密码。与 启用时,接收端必须提供完全一致的密码才能解密和收听。 |
2.HCI_LE_Setup_ISO_Data_Path
是蓝牙核心规范(Bluetooth Core Specification)中用于 LE Audio(低功耗音频) 场景的关键 HCI 命令。
它的作用是:在已经建立好的等时信道(ISO Channel,即 CIS 或 BIS)上,为主机(Host)和控制器(Controller)之间建立一条等时数据路径,同时可以指定路径所用的编解码器(Codec)及详细配置。
可以理解为:先建好“管道”(等时连接),再用这个命令为管道铺设“数据线”并决定“怎么编码”。
Connection_Handle(2 字节)
- 含义:指定目标等时信道(CIS 或 BIS)的连接句柄。
- 取值范围:
0x0000–0x0EFF(有效句柄范围) - 要求:该连接必须已经建立完成,否则命令会失败。
Data_Path_Direction(1 字节)
- 含义:数据路径的方向(从控制器的角度定义)。
- 取值:
0x00:输入方向(Input)– 数据从主机 → 控制器(通常用于发送 / TX)0x01:输出方向(Output)– 数据从控制器 → 主机(通常用于接收 / RX)
- 约束:同一个连接句柄的同一个方向,只能建立一条数据路径。重复执行会失败。
Data_Path_ID(1 字节)
- 含义:指定数据在主机与控制器之间传输所使用的物理接口。
- 取值:
0x00:标准 HCI 传输层(最常用)0x01–0xFE:厂商自定义路径(如 PCM、I2S 等)0xFF:保留
Codec_ID(5 字节)
- 含义:标识要使用的编解码器。
- 结构:
- 第 1 字节:编解码器类型
- 第 2-3 字节:公司 ID(Company ID,小端序)
- 第 4-5 字节:厂商自定义编解码器 ID
Controller_Delay(3 字节)
- 含义:控制器端的固定处理延迟,单位是微秒 (μs)。
- 解释:数据从控制器接口到达空中(或反向)的固定延时。
- 类型:24 位无符号整数。不确定时可填
0。
Codec_Configuration_Length(1 字节)
- 含义:紧跟在后面的
Codec_Configuration数据的字节长度。 - 取值范围:
0x00–0xFF - 注意:如果没有额外配置,填
0x00。
Codec_Configuration(可变长度,长度由上一字段决定)
- 含义:编解码器的具体配置参数(OCTETS)。
- 内容格式:由
Codec_ID指定的编解码器决定。例如 LC3 编码可以配置采样率、帧时长等。 - 长度要求:必须等于
Codec_Configuration_Length。