le audio broadcast source的周期/BIG广播流程

le audio broadcast source的周期/BIG广播流程 在无线音频的世界里一场静默却深刻的革命正在进行。它就是LE Audio。这不仅仅是一次技术迭代而是从底层重新定义声音如何被创造、传输和体验的范式转移。其复杂性令人敬畏——它并非单一技术而是一套精密的生态系统全新的LC3编解码器以超凡效率重塑音质与功耗的平衡多重串流音频让真无线立体声达到前所未有的稳定与同步而音频广播功能则打破了“一对一”连接的百年窠臼让声音如电台般自由播撒。然而正是这种复杂性构成了我们必须深入学习它的不可辩驳的理由。未来的声音图景将由它绘制从下一代真无线耳机、无障碍助听设备到公共场所的沉浸式音频导览、多语言广播乃至元宇宙中清晰无缝的语音交互。不了解LE Audio将意味着在即将到来的音频浪潮中失去对话的基石。这不仅仅关乎技术本身更关乎我们如何连接彼此如何感知世界。让我们共同开启这段探索之旅揭开LE Audio的复杂面纱看清它为何必将成为未来数年里每一个科技从业者、音频爱好者乃至普通用户都无法忽视的关键命题。接下来的系列文章我们将逐步拆解这座精妙的技术大厦。同时我也录制了一系列的Le audio视频有兴趣的可以咨询我会带领你们入门Le audio翻过大山眼下皆是风景------------------------------------------------------------------------------------------------------------------------------------------视频链接https://item.taobao.com/item.htm?id1001969040805mi_id000032T4qZX9WZoRwX6YbxlNUaZOfOI6XoxDx0jxsfnwlEcspma21xtw.29178619.0.0Le Audio文章目录还在为蓝牙BLE Audio的学习苦恼吗安排下让你一文彻底了解Le Audio蓝牙低功耗音频的技术-CSDN博客---------------------------------------------------------------------------------------------------------------------------------一. 周期广播流程我们来拆解下流程分别介绍下以下几个command1. HCI_LE_Set_Extended_Advertising_Parameters 指令介绍该命令是蓝牙 5.0引入的 HCI 命令Opcode0x0036用于配置扩展广告Extended Advertising的参数。与传统的LE_Set_Advertising_Parameters相比它支持更多的广告类型、更灵活的 PHY1M、CODED、2M、更大的数据载荷以及多个广告集。参数长度说明Advertising_Handle1 octet广告集句柄范围0x00–0xEF。用于标识要配置的广告实例可同时运行最多 240 个广告集。Advertising_Event_Properties2 octets位掩码定义广告事件的属性。常用取值Bit 0~15•0x0001可连接扫描Connectable Scannable•0x0002可扫描Scannable•0x0004可定向Directed•0x0008高通广播High Duty Cycle•0x0010传统广告Legacy•0x0020匿名广告Anonymous•0x0040包含 TX 功率Include Tx PowerPrimary_Advertising_Interval_Min3 octets主广告间隔最小值单位0.625 ms范围0x000020到0xFFFFFF对应 20 ms ~ 10485.76 s。实际间隔为Min ≤ 实际 ≤ MaxPrimary_Advertising_Interval_Max3 octets主广告间隔最大值同上通常设置 Min Max 以获得固定隔。Primary_Advertising_Channel_Map1 octet主广告使用的信道37/38/39位掩码•0x01 37 信道•0x02 38 信道•0x04 39 信道默认通常为0x07全部三个信道。Own_Address_Type1 octet本地设备地址类型•0x00公开地址•0x01随机地址•0x02可解析私有地址RPAController 生成•0x03可解析私有地址Host 生成Peer_Address_Type1 octet对端地址类型仅定向广告有效•0x00公开地址•0x01随机地址•0x02可解析私有地址仅当使用定向广告时Peer_Address6 octets对端蓝牙设备地址定向广告的目标地址。非定向广告时可全填0。Advertising_Filter_Policy1 octet过滤策略控制响应哪些设备的扫描请求/连接请求•0x00接受任何设备的扫描/连接•0x01仅接受白名单中的设备•0x02仅接受所有设备的扫描请求但仅接受白名单设备的连接•0x03仅接受白名单设备的扫描请求但接受所有设备的连接• 更高值用于扩展广告策略参考规范。Advertising_TX_Power1 octet广告发射功率单位 dBm有符号整数范围 -127 ~ 20。常用特殊值•0x7F由 Controller 自动选择最优功率推荐• 其他值实际发射功率需 Controller 支持。Primary_Advertising_PHY1 octet主广告所采用的 PHY•0x01LE 1M PHY•0x02LE CODED PHY长距离•0x03LE 1M PHY 与 LE CODED PHY 的混合实际由Controller 选择注意扩展广告的主通道依然在 37/38/39 上但可使用 CODED PHY。Secondary_Advertising_Max_Skip1 octet辅助广告同步时最大可跳过的 AUX 包数量0~0xFF。通常设为0x00表示不跳过用于设备快速同步到辅助广告链路上。Secondary_Advertising_PHY1 octet辅助广告所使用的 PHY•0x01LE 1M PHY•0x02LE CODED PHY•0x03LE 2M PHY扩展广告的数据包将在辅助信道上以该 PHY 发送。Advertising_SID1 octet广告集 ID0~0x0F用于在扫描响应中标识广告集。同一设备的不同广告集可以设置相同的 SID便于扫描端过滤。Scan_Request_Notification_Enable1 octet是否使能扫描请求通知通过LE Scan Request Received事件上报•0x00禁用通知•0x01使能通知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和最大发送事件数。参数长度说明Enable1 octet启用或禁用广告•0x00禁用广告集根据后续指定的句柄列表停止•0x01启用广告集根据后续指定的句柄列表启动• 其他值保留。Num_Sets1 octet指定本次操作的广告集数量即后续参数中Advertising_Handle数组的长度。取值范围0x01到0x80最多 128 个集。当Enable 0x00禁用时可以设为0x00表示停止所有正在进行的广告忽略后续数组。Advertising_Handle[i]1 octet × N广告集句柄数组长度为Num_Sets。每个句柄由LE_Set_Extended_Advertising_Parameters命令分配或指定有效范围0x00–0xEF。Duration[i]2 octets × N每个广告集的运行时长单位10 ms。取值范围0x0001到0xFFFF即 10 ms ~ 655.35 s。• 当Duration 0x0000时表示无限期运行直到被禁用。• 控制器会在广告集启动后持续发送广告直到达到Duration时间超时后自动停止该广告集。• 如果同时启用多个广告集它们的计时器独立运行。Max_Extended_Advertising_Events[i]1 octet × N每个广告集在Duration时间内最多可发送的扩展广告事件数。•0x00无限制只要时间未到就一直发送。•0x01~0xFF限制发送的事件数量。控制器会在达到数量或超时两者先到者后停止广告。• 该参数适用于精细控制广告广播的频次例如只发送固定次数的定向广告后自动停止。• 若Duration 0x0000且Max_Events 0广告无限运行。4. LE Set Periodic Advertising EnableEnable使能标志0x00Disable禁用停止该广播集的周期性广播。0x01Enable启用开始周期性广播。这是指令的核心开关直接决定周期性广播是否活跃。Advertising Handle广播句柄范围0x00 到 0xEF与扩展广播集一致。标识要启用或禁用的具体广播集。必须与之前使用LE Set Extended Advertising Parameters创建的广播集句柄匹配。5.LE Set Periodic Advertising DataAdvertising Handle广播句柄这是一个8位的标识符0x00 - 0xEF。在启用扩展广播时一个控制器可以同时管理多个“广播集”。每个广播集都有一个唯一的Advertising Handle。这个指令通过指定Advertising Handle来明确操作的是哪一个广播集的数据。Operation操作指定此次指令要执行的操作。0x00保留0x01Intermediate Fragment中间片段表示本次设置的数据不是完整的广播数据而是一个片段。用于数据长度超过单个HCI指令容量时的分片传输。0x02First Fragment第一个片段表示这是分片传输的第一个数据块。0x03Last Fragment最后一个片段表示这是分片传输的最后一个数据块。0x04Complete 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_BIGHCI_LE_Create_BIG命令是蓝牙5.2核心规范为支持 LE Audio 而引入的关键命令。它负责创建一个广播等时流Broadcast Isochronous Group, BIG这也是实现蓝牙广播音频Auracast™的基础。BIG 由一个或多个广播等时流Broadcast Isochronous Stream, BIS组成可以将音频数据以一对多的方式广播给无数个接收者是公共场合如机场、健身房、餐厅音频共享的核心技术。该命令是主机端Host用来配置和控制控制器端Controller的建立广播音频所需的所有参数都在这里指定。参数大小描述BIG_Handle1 octetBIG的唯一标识符由主机Host自行分配和管理-2用于后续控制该BIG。取值范围:0x00到0xEF。Advertising_Handle1 octet关键关联到一个已配置好的周期性广播Periodic Advertising的句柄。广播数据将搭载在这个周期性广播的通道里发送出去。Num_BIS1 octet该BIG中包含的BIS音频流总数。一个BIG最多可包含31个BIS。SDU_Interval3 octets服务数据单元SDU的间隔单位为微秒μs。它决定了发送一个SDU通常是编码后的音频帧的时间频率。Max_SDU2 octets单个SDU的最大大小单位为字节Octets。例如LC3音频编码在48kHz下可能设置为 ~155字节。Max_Transport_Latency2 octets最大传输延迟单位为毫秒ms。这定义了从数据准备好发送到接收端成功接收到的最长时间。RTN (Retransmission Number)1 octet每条PDU的重传次数。这是一个建议值控制器Controller可能根据信号质量调整。PHY1 octetBIS使用的物理层PHY模式是位掩码支持设定多种模式0x01 LE 1M0x02 LE 2M0x04 LE Coded。Packing1 octetBIS子事件的排列方式当BIG中包含多个BIS时生效0x00顺序0x01交错。这是一个建议值。Framing1 octetBIS数据PDU的格式和模式0x00未分帧0x01分帧。这是一个建议值。Encryption1 octet加密开关0x00不加密0x01加密。启用加密后BIG的数据会被保护。Broadcast_Code16 octets广播密码。与Encryption配合使用当Encryption启用时接收端必须提供完全一致的密码才能解密和收听。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– 数据从主机 → 控制器通常用于发送 / TX0x01输出方向Output– 数据从控制器 → 主机通常用于接收 / RX约束同一个连接句柄的同一个方向只能建立一条数据路径。重复执行会失败。Data_Path_ID(1 字节)含义指定数据在主机与控制器之间传输所使用的物理接口。取值0x00标准 HCI 传输层最常用0x01–0xFE厂商自定义路径如 PCM、I2S 等0xFF保留Codec_ID(5 字节)含义标识要使用的编解码器。结构第 1 字节编解码器类型第 2-3 字节公司 IDCompany ID小端序第 4-5 字节厂商自定义编解码器 IDController_Delay(3 字节)含义控制器端的固定处理延迟单位是微秒 (μs)。解释数据从控制器接口到达空中或反向的固定延时。类型24 位无符号整数。不确定时可填0。Codec_Configuration_Length(1 字节)含义紧跟在后面的Codec_Configuration数据的字节长度。取值范围0x00–0xFF注意如果没有额外配置填0x00。Codec_Configuration(可变长度长度由上一字段决定)含义编解码器的具体配置参数OCTETS。内容格式由Codec_ID指定的编解码器决定。例如 LC3 编码可以配置采样率、帧时长等。长度要求必须等于Codec_Configuration_Length。