分布式音频指引

项目定位

本仓库对应 OpenHarmony foundation/distributedhardware/distributed_audio,实现跨设备音频协同使用能力(Speaker播音、Mic录音)。优先按这些目录定位问题:

  • audiohandler/:硬件信息上报、设备状态通知,由分布式硬件管理框架加载。
  • services/audiomanager/:Source/Sink双端服务管理,SA入口和设备管理器。
  • services/audioclient/:Speaker/Mic客户端,与音频框架交互完成播放/采集。
  • services/audiotransport/:数据传输组件,编码/解码引擎和控制通道。
  • services/audiohdiproxy/:HDI代理,与驱动层交互。

构建和验证

构建命令从 OpenHarmony 源码根目录执行,不在本子目录执行。

./build.sh --product-name rk3568 --build-target distributed_audio --ccache

涉及真实设备组网的测试需要两台设备在同一局域网。提交使用 git commit -s

知识索引

稳定背景知识放在 docs/knowledge/。改动前按场景读取对应文件:

场景 先读
新增/修改设备启用流程 docs/knowledge/audio-device-lifecycle.md
修改Source/Sink服务交互 docs/knowledge/audio-source-sink-architecture.md
新增事件类型或处理逻辑 docs/knowledge/audio-event-pipeline.md
Speaker/Mic差异化处理 docs/knowledge/audio-device-taxonomy.md
修改传输或编解码逻辑 docs/knowledge/audio-transport-pipeline.md

项目约束

  • 事件驱动优先:所有状态变化必须通过AudioEvent触发,禁止直接调用内部方法。避免状态不一致。
  • 双端对称设计:Source端和Sink端的事件处理必须对称,编号规则一致(Speaker事件11-17,Mic事件21-27)。
  • 控制通道先建:数据传输前必须先建立控制通道(CTRL_OPENED),否则数据通道无法正常工作。
  • 线程安全锁顺序:锁获取顺序:devMapMtx → ioDevMtx → dataQueueMtx。反向获取会导致死锁。
  • HDI回调异步:HDI回调在驱动线程执行,禁止直接操作服务状态,必须通过EventHandler转发。