Le Audio ASCS Receive Stop Ready operation流程介绍
文章摘要: LEAudio正在重塑无线音频技术,其核心组件LC3编解码器、多重串流和音频广播功能构建了全新音频生态。本文重点解析ASCS中的ReceiverStopReady操作:作为SourceASE的专用指令,它在流停止流程中负责解除CIS绑定,使状态从Disabling退回QoSConfigured,与Disable操作协同完成资源释放。流程包括客户端请求、服务器校验、CIS解绑及状态通知,
在无线音频的世界里,一场静默却深刻的革命正在进行。
它,就是LE Audio。
这不仅仅是一次技术迭代,而是从底层重新定义声音如何被创造、传输和体验的范式转移。其复杂性令人敬畏——它并非单一技术,而是一套精密的生态系统:全新的LC3编解码器以超凡效率重塑音质与功耗的平衡,多重串流音频让真无线立体声达到前所未有的稳定与同步,而音频广播功能则打破了“一对一”连接的百年窠臼,让声音如电台般自由播撒。
然而,正是这种复杂性,构成了我们必须深入学习它的不可辩驳的理由。未来的声音图景将由它绘制:从下一代真无线耳机、无障碍助听设备到公共场所的沉浸式音频导览、多语言广播,乃至元宇宙中清晰无缝的语音交互。不了解LE Audio,将意味着在即将到来的音频浪潮中失去对话的基石。
这不仅仅关乎技术本身,更关乎我们如何连接彼此,如何感知世界。让我们共同开启这段探索之旅,揭开LE Audio的复杂面纱,看清它为何必将成为未来数年里,每一个科技从业者、音频爱好者乃至普通用户都无法忽视的关键命题。
接下来的系列文章,我们将逐步拆解这座精妙的技术大厦。
同时我也录制了一系列的Le audio视频,有兴趣的可以咨询,我会带领你们入门Le audio!翻过大山,眼下皆是风景!!!
------------------------------------------------------------------------------------------------------------------------------------------
Le Audio文章目录:
https://wlink.blog.csdn.net/article/details/158457264?spm=1001.2014.3001.5502
---------------------------------------------------------------------------------------------------------------------------------
本文力争给大家讲明白几个核心点:
- ASCS Receive Stop Ready的作用是什么?
- ASCS Receive Stop Ready的流程是什么?
带着这两个疑问我们就开始文本的介绍!
一. Receive Stop Ready的作用
🎯 Receiver Stop Ready 操作的核心作用
Receiver Stop Ready(接收方停止就绪)是 ASCS 中专门用于通知发送端“接收方已停止接收音频数据”的关键控制指令-。它的核心使命是:
- 解除 CIS 与 ASE 的耦合关系,完成 UE「断开CIS」的最后闭环;
- 辅助 Source ASE 从
Disabling状态正确退回到QoS Configured状态,为后续快速恢复或资源释放奠定基础; - 给发送端一个明确信号——下游已停止接收,发送端不再发送音频数据。
从本质上看,Receiver Stop Ready 可以理解为一个“解绑信号”。在某些协议的实现中,Disable 操作执行后,Source ASE(发送端)只是停止发送数据,但它与 CIS(Connected Isochronous Stream)仍然绑在一起。而 Receiver Stop Ready 负责向发送端发出明确指令:“我已经停止接收了,可以安全解绑了”,从而使 Step 2 Disable 得以切换到 Step 3 Disabling,确保传输通道逻辑完整断开。
Receiver Start Ready 是“建立”,Receiver Stop Ready 就是“解除”。Receiver Stop Ready 是 Receiver Start Ready 的对称逆操作,也是 Source ASE 端流控正常退出的必经步骤。
与 Disable 不同,Disable 侧重于停止音频流传输并保留配置,但 CIS 耦合可能仍存在;Receiver Stop Ready 则专门负责解除 CIS 与 ASE 的绑定,配合 Disable 完成完整的流释放流程。
⚠️ 关键适用约束:仅 Source ASE 可用
Receiver Stop Ready 操作有一个非常重要的约束:它只能在 Source ASE(音频源端,即发送音频的设备)上使用,对 Sink ASE 无意义。如果服务器收到针对 Sink ASE 的 Receiver Stop Ready 指令,应当直接返回错误码 0x05(Invalid ASE Direction)并拒绝执行-。
这是因为 Sink ASE 作为接收端,本身没有“停止作为接收方”这种概念——接收端要么在听,要么不在流状态中,不需要一个独立的“停止就绪”指示来切断流水线。而 Source ASE 是发送端,当发送端需要停止发送数据时,必须通知接收端“我这边不发了”,避免接收端一直等待数据。
⚙️ Receiver Stop Ready 操作对 Source ASE 的状态转移路径
Receiver Stop Ready 整个流程有非常明确的适用状态和转移结果:
|
当前状态 |
是否允许 |
操作结果 |
|
|
✅ 允许 |
服务器执行解绑,状态移至 |
|
|
✅ 允许 |
直接解绑后进入 (实际场景极少) |
|
|
✅ 允许 |
资源尚未完全建立即可提前解绑 |
|
|
❌ 拒绝 |
未启用或已解绑,重复操作无意义,返回错误码 0x04 |
|
其他无效状态 |
❌ 拒绝 |
返回错误码 0x04 |
Receiver Stop Ready 的核心使命就是从 Source ASE 的 Disabling 状态解绑,进入 QoS Configured,并不依赖 Receiver Stop Ready 回退则永远卡在 Disabling。这意味着对实现来说:如果某个 Source ASE 执行了 Disable 进入 Disabling,但没有后续的 Receiver Stop Ready,ASE 将永远无法到达 QoS Configured,从而导致音频资源无法正常回收,甚至可能影响下次 Enable 操作。
🔍 Receiver Stop Ready 操作细节:与 Disable 的对比
Receiver Stop Ready 与 Disable 在流停止流程中分工明确:
|
操作 |
触发方 |
适用方向 |
适用状态 |
目标状态 |
|
Disable |
客户端或服务器 |
Sink + Source |
Enabling、Streaming |
Sink➜QoS Configured / Source➜Disabling |
|
Receiver Stop Ready |
仅客户端 |
仅 Source ASE |
Disabling |
QoS Configured |
从定位来看:
Disable:发出“停止数据”的信号,Sink 直接退回到 QoS Configured,Source 则进入 Disabling(待命解绑);Receiver Stop Ready:发出“我已停止接收”的信号,仅 Source ASE 收到后可安全、完整解绑 CIS,状态机最终退回到 QoS Configured。
⚠️ Receiver Stop Ready 操作的前置条件
Receiver Stop Ready 仅在 ASE处于 Disabling 状态时才能够正确执行。规范中也明确规定:当 ASE 处于 Disabling 状态时,服务器应当接受客户端的 Receive Stop Ready 操作。这是因为:
- 如果 ASE 是 Source ASE,在执行
Disable后会进入Disabling状态等待解绑; - 客户端在收到
Disabling状态通知后,可发起Receiver Stop Ready以完成当前解绑。如果在Disabling状态下没有发送该指令,ASE 将永远卡住无法退回到QoS Configured。
📎 Receiver Stop Ready 操作流程图

📖 文字说明(分步解读)
前置条件
Receiver Stop Ready 仅在 Source ASE处于 Disabling (0x05) 状态时执行。Disabling 状态通常在客户端发送 Disable 指令并成功执行后由服务器切换进入。
第 1 步:客户端发起 Receiver Stop Ready 操作
客户端(如手机)向服务器的 ASE Control Point 特征写入 Receiver Stop Ready 操作码(0x06),并附带需要停止的 Source ASE_ID。可一次传入多个 ASE_ID 批量处理。
第 2 步:服务器校验与响应
服务器收到请求后,检查:
- 操作码是否有效(
0x06); - 目标 ASE 是否为 Source ASE(如果仅为 Sink ASE,直接返回错误码
0x05Invalid ASE Direction); - 目标 ASE 是否处于
Disabling状态(如果不是,返回错误码0x04Invalid ASE State Machine Transition)。
校验通过后,服务器立即通过 ASE Control Point 特征返回 Success 响应(Response Code 0x00),确认指令被接受。
第 3 步:执行 CIS 通道解绑
服务器执行底层操作,解除 CIS(Connected Isochronous Stream)与 ASE 的耦合关系。这意味着音频数据的传输完全停止,Receiver Start Ready 阶段建立的逻辑连接被安全断开。这是流数据彻底停止的“最后收尾”环节。
第 4 步:停止音频数据接收/发送
服务器确保音频数据的接收/发送完全停止,相关资源释放。
第 5 步:状态转换与通知
ASE 状态从 Disabling (0x05) 转换为 QoS Configured (0x02)。服务器通过 ASE 特征值 发送状态通知,告知客户端 ASE 已回到配置就绪状态。
结束状态
ASE 处于 QoS Configured (0x02),编解码器配置和 QoS 参数保留。如需彻底释放资源,客户端可继续发送 Release 操作将 ASE 重置为 Idle;如需恢复音频传输,可直接发送 Enable 从 QoS Configured 转到 Streaming。
🔁 Receiver Stop Ready vs Disable vs Release 对比
|
操作 |
核心目的 |
适用 ASE 方向 |
适用状态 |
目标状态 |
参数是否保留 |
典型场景 |
|
Disable |
临时停止音频流,配置保留 |
Sink + Source |
Enabling、Streaming |
Sink➜QoS Configured / Source➜Disabling |
编解码器 + QoS 保留 |
暂停音乐、通话保持 |
|
Receiver Stop Ready |
解除 CIS 绑定,完成流停止闭环 |
仅 Source ASE |
Disabling |
QoS Configured |
编解码器 + QoS 保留 |
发送端主动停止上行音频(如耳机麦克风停用) |
|
Release |
彻底释放所有配置 |
Sink + Source |
多种状态(除 Idle) |
Releasing → Idle |
全部释放 |
断开连接、切换音频设备 |
这三者的协作关系可以这样理解:一个 Source ASE 的正常流停止流程是 Disable → Disabling → Receiver Stop Ready → QoS Configured(或转 Release),缺少任何一步,ASE 的状态机就可能乱或资源无法回收。Disable 负责停止数据传输并进入 Disabling,Receiver Stop Ready 负责通知接收端解绑 CIS,最终回到 QoS Configured;Release 则是最后的彻底回收。
📌 实践要点
Receiver Stop Ready仅适用于 Source ASE:如果服务器收到针对 Sink ASE 的该指令,应返回0x05Invalid ASE Direction,不要执行任何后续操作-。Disable+Receiver Stop Ready形成完整停止流程:对 Source ASE 来说,单纯的Disable只会停止数据发送但不会解绑 CIS;必须配合Receiver Stop Ready才能将 ASE 彻底退回QoS Configured。缺少该指令时可能导致 CIS仍粘附 ASE 资源。- 批量处理支持:
Receiver Stop Ready支持一次传入多个 ASE_ID,服务器需“逐个校验、逐个执行、批量返回”(类似于Enable和Disable),且当某个 ASE 校验失败时不应影响其他 ASE 的正常执行。 - 安全约束:所有 ASE Control Point 操作均要求加密连接(Encryption required),防止指令被窃取或篡改。实现时需确保传输链路已加密。
- 链路丢失的自主处理:若 ACL 链路丢失,服务器应自主将 ASE 直接转为
Releasing状态,而非等待客户端的Receiver Stop Ready,因为此时客户端已无法发送任何指令。 - 内存与资源回收:不发送
Receiver Stop Ready则 Source ASE 停留在Disabling,CIS 无法解绑,内存和 CID 资源无法回收,可能中断后续Enable请求。这对于需要长时间稳定工作的设备尤其关键
二. 流程介绍
1. 状态机管理
我们在前面也已经介绍了,只有Source ASE才适用


2. 流程介绍
官方的BAP协议把上面两种情况都放到一张流程图中了,所以有点难理解,但是你看我上面的流程图应该比较好理解!

上面的流程图是包含了Source跟Sink的流程,其中i是unicast Server作为Sink,j是unicast Server作为Source
a. 发起 receive stop ready操作过程
|
字段 |
大小(字节) |
描述 |
|
Opcode |
1 |
|
|
Number_of_ASEs |
1 |
本次 Disable 操作涉及的 ASE 总数,必须 ≥ 1 |
|
ASE_ID[i] |
1 |
第 i 个 ASE 的标识符 |
b. 通知(Notify)操作结果(成功)
格式如下:
|
字段 (Field) |
大小 (Octets) |
描述 (Description) |
|
Opcode |
1 |
本次响应对应的客户端发起的 ASE 控制操作的操作码(例如 receive stop ready 的 Opcode 为 0x06) |
|
Number_of_ASEs |
1 |
服务器提供响应的 ASE 总数。 |
|
ASE_ID[i] |
1 |
该 ASE 的标识符。 |
|
Response_Code[i] |
1 |
若服务器成功完成客户端发起的 ASE 控制操作,则设为 0x00;否则设为表 5.1 中定义的错误码。 |
|
Reason[i] |
1 |
若服务器成功完成操作,则设为 0x00;否则设为表 5.1 中定义的原因值。 |
c. 更新并通知 ASE 的 Qos Configured 状态
ⅰ. Source通知
格式如下:
|
字段 (Field) |
大小 |
描述 (Description) |
|
CIG_ID |
1 |
客户端在 Config QoS 操作中为该 ASE 写入的 CIG_ID 参数值 |
|
CIS_ID |
1 |
客户端在 Config QoS 操作中为该 ASE 写入的 CIS_ID 参数值 |
|
SDU_Interval |
3 |
客户端在 Config QoS 操作中为该 ASE 写入的 SDU_Interval 参数值 |
|
Framing |
1 |
客户端在 Config QoS 操作中为该 ASE 写入的 Framing 参数值 |
|
PHY |
1 |
客户端在 Config QoS 操作中为该 ASE 写入的 PHY 参数值(位域) |
|
Max_SDU |
2 |
客户端在 Config QoS 操作中为该 ASE 写入的 Max_SDU 参数值 |
|
Retransmission_Number |
1 |
客户端在 Config QoS 操作中为该 ASE 写入的重传次数参数值范围: |
|
Max_Transport_Latency |
2 |
客户端在 Config QoS 操作中为该 ASE 写入的 Max_Transport_Latency 参数值 |
|
Presentation_Delay |
3 |
客户端在 Config QoS 操作中为该 ASE 写入的 Presentation_Delay 参数值,单位:µs |

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


所有评论(0)