diff --git a/README_zh.md b/README_zh.md index 2287f419494437a8cd13c7efb787e5c0fc926889..3e88fef2cfb78ba7b02a8a5f4aecb1f166f337c4 100644 --- a/README_zh.md +++ b/README_zh.md @@ -2,21 +2,43 @@ ## **简介** -分布式音频是多个设备的音频同时协同使用的能力。分布式音频部件是为分布式硬件子系统提供这一能力的部件。本部件不直接对接应用,只向分布式硬件框架子系统提供C++接口。应用可以通过音频框架的接口使用分布式音频部件操作其他设备的音频设备,使用方式与本地音频一致。 +分布式音频是指多个设备的音频同时协同使用的能力,如将设备A的音频通过设备B的Spk进行投播,或者设备A使用设备B的Mic进行录音。分布式音频部件正是为分布式硬件子系统提供这一能力的部件。本部件不直接向应用提供接口,应用可以通过音频框架的接口使用分布式音频部件从而操作其他设备的音频设备,使用方式与本地音频一致。 其系统架构图如下图所示: ![](figures/distributedaudio_arch.png) +### **概念说明** +主控端(source):控制端,通过调用分布式音频能力,使用被控端的音频播放,录音等功能; +被控端(sink):被控制端,通过分布式音频接收主控端的命令,使用本地音频为主控端提供音频数据。 + +### **接口说明** +分布式音频部件实现分布式硬件管理框架提供的接口,分布式硬件管理框架统一调用接口实现虚拟硬件驱动注册等功能。 + +### **场景说明** +被控端设备上线之后,主控端可以使能该设备音频并像使用本地音频一样使用被控端音频,直到被控端设备下线。 + +### **流程说明** +#### **1. 设备开机启动** +系统拉起分布式音频的SA服务,Source侧被初始化,相关模块被初始化。 + +#### **2. 设备组网上线** +设备上线后,分布式硬件管理框架同步到上线设备的音频硬件信息并使能,使能成功后在系统中会新增分布式音频驱动并通知到音频框架,音频框架统一管理本地音频和分布式音频驱动;上层应用通过音频框架接口可以查询到分布式音频设备,并按照和本地音频相同的接口使用分布式音频设备。 + +#### **3. 设备下线** +设备下线后,分布式硬件管理框架去使能下线设备的音频硬件,本地移除分布式音频驱动并通知到音频框架,此时下线设备的分布式音频不可用。 + +### **架构实现** + **分布式音频框架实现(DistributedAudioFwkImpl)**:为分布式硬件管理框架提供分布式音频初始化、释放、使能、去使能能力,以及音频设备配置参数能力。 **分布式音频主控端管理模块(DAudioSourceManager)**:管理和创建主控端Fwk层分布式音频设备实体。 **分布式音频被控端管理模块(DAudioSinkManager)**:管理和创建被控端Fwk层分布式音频设备实体,以及本地设备信息。 -**主控端分布式音频设备的抽象实体(DAudioSourceDevice)**:被控端音频设备在主控端的抽象,拥有被控端音频的参数属性,实现被控端音频设备音量、焦点、媒体键事件的控制。执行录音功能时,接收从被控端传来的音频编码数据,完成解码操作后,送给主控端音频框架pcm流。当知执行放音功能时,接收主控端音频框架采集音频pcm流,进行编码处理后,将音频编码数据传送给被控端。 +**主控端分布式音频设备的抽象实体(DAudioSourceDevice)**:被控端音频设备在主控端的抽象,拥有被控端音频的参数属性,实现被控端音频设备音量、焦点、媒体键事件的控制。执行录音功能时,接收从被控端传来的音频编码数据,完成解码操作后,送给主控端音频框架pcm流。当执行放音功能时,接收主控端音频框架采集音频pcm流,进行编码处理后,将音频编码数据传送给被控端。 -**被控端分布式音频源设备的抽象实体(DAudioSinkDevice)**:作为主控端音频设备在被控端的代理,实现对被控端音频设备音量、焦点、媒体键事件的直接响应和控制。当执行录音功能时,接收被控端音频框架采集音频pcm流,进行编码处理后,将音频编码数据传送给主控端。当知执行放音功能时,接收从主控端传来的音频编码数据,完成解码操作,送给被控端音频框架pcm流播放。 +**被控端分布式音频源设备的抽象实体(DAudioSinkDevice)**:作为主控端音频设备在被控端的代理,实现对被控端音频设备音量、焦点、媒体键事件的直接响应和控制。当执行录音功能时,接收被控端音频框架采集音频pcm流,进行编码处理后,将音频编码数据传送给主控端。当执行放音功能时,接收从主控端传来的音频编码数据,完成解码操作,送给被控端音频框架进行pcm流播放。 **分布式音频主控端控制管理模块(DAudioSourceCtrlMgr)**:负责响应被控端媒体键事件、主控端与被控端之间音量同步、主控端远程控制被控端设备音量、响应被控端音频焦点状态等任务的处理。 @@ -57,28 +79,10 @@ ## **约束** **语言限制**:C++语言。 **组网环境**:必须确保设备在同一个局域网中。 -**操作系统限制**:OpenHarmony操作系统。 - -## **说明** -### **概念说明** -主控端(source):控制端,通过调用分布式音频能力,使用被控端的音频播放,录音等功能。 -被控端(sink):被控制端,通过分布式音频接收主控端的命令,使用本地音频为主控端提供音频数据。 - -### **接口说明** -分布式音频部件实现分布式硬件管理框架提供的接口,分布式硬件管理框架统一调用接口实现虚拟硬件驱动注册等功能。 - -### **场景说明** -被控端设备上线之后,主控端可以使能该设备音频并像使用本地音频一样使用被控端音频,直到被控端设备下线。 - -### **流程说明** -#### **1. 设备开机启动** -系统拉起分布式音频的SA服务,Source侧被初始化,相关模块被初始化。 +**操作系统限制**:OpenHarmony-标准操作系统。 -#### **2. 设备组网上线** -设备上线后,分布式硬件管理框架同步到上线设备的音频硬件信息并使能,使能成功后在系统中会新增分布式音频驱动并通知到音频框架,音频框架统一管理本地音频和分布式音频驱动;上层应用通过音频框架接口可以查询到分布式音频,并按照和本地音频相同的接口使用分布式音频。 - -#### **3. 设备下线** -设备下线后,分布式硬件管理框架去使能下线设备的音频硬件,本地移除分布式音频驱动并通知到音频框架,此时下线设备的分布式音频不可用。 +## **编译调试** +可以根据需要对代码进行修改编译,编译时可以通过添加编译选项 "--build-target=distributed_audio"来只对分布式音频及其相关依赖模块进行编译。 ## **相关仓** ****