在无线音频的世界里,一场静默却深刻的革命正在进行。

它,就是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文章目录:

https://wlink.blog.csdn.net/article/details/158457264?spm=1001.2014.3001.5502

---------------------------------------------------------------------------------------------------------------------------------

本文力争给大家讲明白几个核心点:

  • ASCS enable的作用是什么?
  • ASCS enable的流程是什么?

带着这两个疑问我们就开始文本的介绍!

一. enable的作用

在LE Audio的ASCS里,Enable操作是一个非常关键的“启动按钮”。它触发音频流端点(ASE)与其底层传输通道正式绑定,为数据流的建立铺平道路。

📡 ASCS与ASE:音频流控制的中枢与端点

首先,要理解Enable,需要先了解ASCS及其管理的ASE是什么:

  • ASCS (Audio Stream Control Service):是LE Audio架构中用于管理单播音频流的核心控制服务。客户端(如手机)通过它来配置、启动、停止和释放音频流-。
  • ASE (Audio Stream Endpoint):代表一个设备上用于发送或接收音频的逻辑实体,就像设备上的“音频端口”。手机、耳机等设备根据其角色(Source源/Sink汇),可以拥有一个或多个ASE。

⚙️ 从配置到启动:ASE的状态机

我们可以把Enable操作,理解成指挥一个ASE启动的过程。

ASE的状态机定义了它在整个生命周期中的各种状态。在收到Enable指令前,一个ASE的典型生命路径是这样的:

  1. Idle (空闲, 0x00): ASE的初始状态,没有进行任何配置。
  2. Codec Configured (编解码器已配置, 0x01): 客户端为ASE配置了音频编解码器(如LC3编码),使之“准备好工具”。
  3. QoS Configured (服务质量已配置, 0x02): 客户端进一步配置了QoS(服务质量)参数,如数据包间隔、时延等,相当于制定了“运输规则”。

此时,音频流的编解码和传输规则都已配置就绪,就像一个运动员已穿戴好装备、站在了起点,只待发令枪响,而Enable就是这把发令枪。

🎬 Enable的详细作用

当ASE处于 QoS Configured (0x02) 状态时,客户端可以发送Enable指令。执行此操作后:

  1. 状态转换至Enabling:ASE的状态会立即从 QoS Configured (0x02) 切换至 Enabling (0x03)。这是一个临时的中间状态,表示系统正在进行最后的启动处理。
  2. 执行关键绑定工作
    • 绑定传输通道:将ASE与先前配置好的CIS(连接等时流) 传输通道进行绑定。CIS是LE Audio为低延迟发送高质量音频而建立的专属通道。
    • 加载元数据(Metadata):将本次音频流的声音上下文信息(如音频类型是“音乐”还是“语音”)加载到ASE上。
  1. 最终进入Streaming (流传输中) 状态
    • 对于音频接收设备(Sink ASE):耳机等设备在Enabling状态完成后,会自动执行 Receiver Start Ready 操作,将状态最终转换成 Streaming
    • 对于音频发送设备(Source ASE):在收到接收端就绪的信号后,状态最终也会变更为 Streaming

Streaming (0x04) 是音频流的正常运行状态,此时,音乐、通话等音频数据便开始在设备间稳定流动。

💁‍♀️ 一个典型的操作流程

前置条件

  • ASE 已处于 QoS Configured (0x02) 状态,即已完成编解码器配置和 QoS 参数配置。

步骤 1:客户端发起 Enable 操作

客户端(如手机)向服务器(如耳机)的 ASE Control Point 特征写入 Enable 操作码及必要的元数据(如音频上下文类型、语言等)。

步骤 2:服务器本地校验

服务器收到请求后,进行以下检查:

  • 目标 ASE 是否确实处于 QoS Configured 状态;
  • 提供的元数据是否在支持范围内。

如果校验不通过,服务器会返回对应的错误码(如 Operation Not PermittedMetadata Rejected 等)。

步骤 3:返回操作成功通知(ASE Control Point)

校验通过后,服务器立即通过 ASE Control Point 特征返回一个 Success 响应(Response Code 0x00)。

这个通知表明:Enable 指令已被服务器正确接收并接受,此时 ASE 的状态尚未改变。

步骤 4:状态转换为 Enabling 并同步

服务器内部将 ASE 状态从 QoS Configured 切换为 Enabling (0x03),然后通过 ASE 特征值 发送状态通知,告知客户端当前 ASE 已进入启用过渡状态。

二. 流程介绍

1. 状态机管理

我们在这个之前已经介绍过了ASCS的状态机,对应的Source/Sink流转如下:

从这个表格中可以看到在什么时机可以发送enable,并且只有client可以发送,一目了然,下面我们就来介绍下enable的流程

2. 流程介绍

我们在前面已经介绍过流程了,跟下面的基本没有区别,下面的是BAP协议的sample流程示意图:

有了这个流程图,我们就结合btsnoop来说明下每个命令或者通知的格式,整个流程btsnoop如下:

a. 发起 enable 操作

字段

大小 (字节)

描述

Opcode

1

0x03= Enable

Number_of_ASES

1

本次 Enable 操作涉及的 ASE 总数,必须 ≥ 1

ASE_ID[i]

1

第 i 个 ASE 的标识符

Metadata_Length[i]

1

第 i 个 ASE 对应的 Metadata 参数长度(字节)

Metadata[i]

可变

LTV 格式的元数据,仅当 Metadata_Length[i] ≠ 0x00时存在

b. 通知(Notify)操作结果(成功)

格式如下:

字段 (Field)

大小 (Octets)

描述 (Description)

Opcode

1

本次响应对应的客户端发起的 ASE 控制操作的操作码(例如 enable 的 Opcode 为 0x03)

Number_of_ASEs

1

服务器提供响应的 ASE 总数。
若 Response_Code 值为 0x01 或 0x02,则此字段应设为 0xFF。

ASE_ID[i]

1

该 ASE 的标识符。
若 Response_Code 值为 0x01 或 0x02,则 ASE_ID 应设为 0x00,且循环索引 i 设为 0(即仅有一个虚拟项)。

Response_Code[i]

1

若服务器成功完成客户端发起的 ASE 控制操作,则设为 0x00;否则设为表 5.1 中定义的错误码。

Reason[i]

1

若服务器成功完成操作,则设为 0x00;否则设为表 5.1 中定义的原因值。
若 Response_Code 值为 0x01 或 0x02,则循环索引 i 设为 0(即无实际 ASE 项)。

c. 更新并通知 ASE 的 enabling 状态

格式如下:

Field

大小 (字节)

描述

CIG_ID

1

该 ASE 的 CIG_ID 参数值,由客户端在 Config QoS 操作中写入(定义见第 5.2 节)

CIS_ID

1

该 ASE 的 CIS_ID 参数值,由客户端在 Config QoS 操作中写入(定义见第 5.2 节)

Metadata_Length

1

该 ASE 的 Metadata 字段长度

Metadata

可变

LTV(Length-Type-Value)格式的元数据;仅当该 ASE 的 Metadata_Length参数值不为 0x00 时才存在

Logo

openEuler 是由开放原子开源基金会孵化的全场景开源操作系统项目,面向数字基础设施四大核心场景(服务器、云计算、边缘计算、嵌入式),全面支持 ARM、x86、RISC-V、loongArch、PowerPC、SW-64 等多样性计算架构

更多推荐