音频播放框架及napi接口
音频播放流程 场景:音频播放 音频架构,分为4层,应用层,audio_framework,interface,HDF的作用。 应用层:为用户提供了丰富的音频功能和直观的操作界面,支持多任务处理和后台运行,提供数据存储和管理功能,并与其他层级进行交互
音频播放流程
场景:音频播放
音频架构,分为4层,应用层,audio_framework,interface,HDF的作用。
应用层:为用户提供了丰富的音频功能和直观的操作界面,支持多任务处理和后台运行,提供数据存储和管理功能,并与其他层级进行交互,同时支持设备适配和定制化。
包含设置,开机动画,音乐播放器,录音机,录屏,视频播放,联系人应用,电话应用,游戏,闹钟
audio_framework:为开发者提供了丰富的音频处理功能和统一的API接口,同时支持对音频设备的有效管理和音频数据的精确控制
1. 提供音频处理功能
音频播放与录制:音频管理接口提供音频播放和录制的功能,使得开发者可以在鸿蒙系统上实现音乐播放、语音录制等应用。
音频编解码:支持音频数据的编解码处理,确保音频数据在不同格式和设备之间的有效传输和播放。
2. 统一的API接口
通过提供一套统一的API接口,使得开发者可以在不同的鸿蒙设备上使用相同的代码来处理音频。
统一的API接口也提高了音频应用的兼容性和可移植性,使得应用能够更容易地在不同设备之间迁移和部署。
3. 音频设备管理
音量管理:提供对音频音量的管理功能,包括音量的调节、获取音量范围等。
音频设备选择:支持在多个音频设备之间进行选择和切换,以满足不同场景下的音频输出需求。
4. 音频数据处理
音频数据采集与渲染:通过AudioCapturer和AudioRenderer等接口,实现对音频数据的采集和渲染处理。AudioCapturer用于录制PCM音频数据,而AudioRenderer则用于播放PCM音频数据。
音频流控制:支持对音频流的精确控制,包括播放、暂停、停止等操作,以及音频数据的实时处理和传输。
5. 底层硬件交互
硬件驱动适配:音频管理接口需要与底层的音频硬件驱动进行交互,以确保音频数据的正确传输和处理。这通常涉及到对音频硬件设备的初始化、配置和控制等操作。
audio_framework为开发者提供了丰富的音频处理功能和统一的API接口,同时支持对音频设备的有效管理和音频数据的精确控制。
interface层:
1. 定义统一接口:鸿蒙系统通过定义统一的接口规范,为系统内的不同组件和服务提供了清晰的交互边界。这些接口定义了组件间通信的方式、参数类型和返回类型等,确保了组件间的兼容性和可扩展性。
2. 促进解耦:接口层促进了系统组件之间的解耦。通过接口进行通信的组件不需要了解对方的具体实现细节,只需要遵循接口定义的契约即可。这种解耦方式使得系统更加灵活,易于维护和扩展。
3. 系统架构支撑:在鸿蒙系统的整体架构中,接口层作为连接不同组件和服务的桥梁,支撑了整个系统的运行。通过接口层,系统能够实现模块间的无缝协作和高效通信。
HDF:在openHarmony操作系统中,HDF(Harmony Driver Framework)适配层是一个重要组件,它提供了与底层硬件交互的统一接口。在这个层面上,HDF层的作用包括:
1. 设备驱动管理:负责加载和管理设备驱动,通过与设备驱动的接口,实现驱动的加载、卸载以及查询已加载的驱动信息。
2. 设备管理:负责设备的开启和关闭,以及设备的数据读取和写入,为上层应用程序提供与硬件设备交互的能力。
3. 设备模型定义:定义设备的模型,包括设备的类型、属性和操作等,方便对设备进行管理和操作。
对应用层提供的napi外部接口与能力。
SetRenderRate:异步设置音频渲染器的渲染率
GetRenderRate:异步获取音频渲染器的当前渲染率
GetRenderRateSync:直接获取音频渲染器的渲染率
SetRendererSamplingRate:设置音频渲染器的采样率
GetRendererSamplingRate:异步获取音频渲染器的采样率
Start:启动音频渲染器
Write:音频数据写入
GetAudioTime:从音频渲染器异步获取当前的音频时间
GetAudioTimeSync:同步从音频渲染器获取当前的音频时间
Drain:清空音频流
Flush:清空或刷新音频渲染器的缓冲区
Pause:暂停音频渲染器
Stop:停止
Release:释放
GetBufferSize:异步获取音频渲染器的缓冲区大小
GetBufferSizeSync:同步获取音频渲染器的缓冲区大小
GetAudioStreamId:异步获取音频流ID
GetAudioStreamIdSync:同步获取音频流ID
SetVolume:设置音量 可选范围0.0-1.0
GetRendererInfo:异步获取音频渲染器的信息
GetRendererInfoSync:同步获取音频渲染器的信息
GetStreamInfo:获取音频流信息
GetStreamInfoSync:同步获取音频流信息
SetInterruptMode:异步设置焦点模式
SetInterruptModeSync:同步设置焦点模式
GetMinStreamVolume:获取最小流音量
GetMinStreamVolumeSync:同步获取最小流音量
GetMaxStreamVolume:获取最大流音量
GetMaxStreamVolumeSync:同步获取最小流音量
GetCurrentOutputDevices:获取当前的输出设备信息
GetCurrentOutputDevicesSync:同步获取当前的输出设备信息
GetUnderflowCount:获取音频渲染器的下溢计数
GetUnderflowCountSync:同步获取音频渲染器的下溢计数
GetAudioEffectMode:获取音频效果模式
SetAudioEffectMode:设置音频效果模式
SetChannelBlendMode:设置音频通道混合模式
SetVolumeWithRamp:设置音频渐变音量
SetSpeed:设置音频播放速度
GetSpeed:获取音频播放速度
GetState:获取音频播放当前状态
on:监听焦点变化
audio_framework 提供的能力,线程之间的关系,音频流的流向。
/foundation/multimedia/audio_standard # 音频组件业务代码
├── frameworks # 框架代码
│ ├── native # 内部接口实现
│ └── js # 外部接口实现
│ └── napi # napi 外部接口实现
├── interfaces # 接口代码
│ ├── inner_api # 内部接口
│ └── kits # 外部接口
├── sa_profile # 服务配置文件
├── services # 服务代码
├── LICENSE # 证书文件
└── bundle.json # 编译文件
audio_framework支持的能力
1.音频播放:支持多种音频格式的播放,包括常见的MP3、WAV等。提供音频渲染器(如AudioRenderer)接口,用于播放PCM(Pulse Code Modulation)等格式的音频数据。
支持音频播放的精细控制,如音量调节、播放进度控制等。
2.音频录制:提供音频采集器(如AudioCapturer)接口,用于录制PCM等格式的音频数据。支持多种音频录制场景,如语音通话、录音笔记等。
允许开发者根据需要配置录制参数,如采样率、声道数等。
3.音频编解码:内置音频编解码器,支持对音频数据进行编码和解码处理。
编码功能可以将原始音频数据转换为适合存储或传输的格式;解码功能则可以将编码后的音频数据还原为原始音频数据。
4.音频设备管理:管理系统中的音频设备,包括扬声器、麦克风等。
5.音频数据处理:提供音频数据处理功能,如音频混响、音效处理等。
audio_framework中具体线程以及之间的关系
OS_WriteHdi:线程专门用于处理与HDI相关的渲染写入任务。它在一个循环中从异步消息队列中接收消息,并根据消息类型执行相应的操作。
OS_WriteBus:总线线程,用于处理总线写入。
OS_WritePrimary:主线程,该线程用于渲染器定时器,是负责主要的音频数据处理和写入。
OS_WriteOffload:offload模式下渲染线程,并根据设备类型和配置决定是否启用多通道处理和卸载(offload)功能。
OS_WriteHdiMch:如果sink的名称是"Speaker",则会额外创建一个名为"OS_WriteHdiMch"的线程来处理多通道音频数据的写入。
OS_write-pa-mch:线程来处理多通道音频数据的渲染。
audio_framework中音频流的流向
audio_stream-》audio_service中的OS_AudioWriteCb线程拿到处理-》audio_server进程中OS_WritePrimary线程进行主要的渲染工作
audio_host的作用,音频数据流的流向。
audio_host进程主要负责音频服务的管理和调度。
音频服务的统一管理和控制:audio_host作为音频服务的宿主进程,它接收来自上层应用或服务的音频请求,如播放、录制、音量调节等,并将这些请求分发到相应的音频处理模块。
音频设备的管理:它能够识别系统中连接的音频设备(如扬声器、耳机、麦克风等),并根据需求进行设备的路由和切换。这意味着它可以根据音频数据的输出或输入需求,选择最合适的音频设备进行交互。
音频策略的执行:包括音频焦点管理、音频流优先级调度等。音频焦点管理是确保在同一时间内只有一个音频流能够正常播放的机制,audio_host负责维护这个机制的正常运行。
音频数据的处理和传输:负责将音频数据从源端(如麦克风)传输到目标端(如扬声器或耳机),并在这个过程中进行必要的处理,如格式转换、降噪、增强等。
与底层驱动和硬件的交互:通过系统提供的接口与音频驱动进行通信,将上层应用或服务的音频请求转化为底层驱动能够理解的指令,从而实现音频数据的处理和传输。
audio_host中音频数据流的流向
在audio_host(或类似音频服务)中,音频数据流的流向大致为:应用层 → audio_framework → HDF → 音频驱动层 → 硬件输出。这个过程涉及多个组件和层级的协同工作,共同实现了音频数据的采集、处理、传输和播放。
HDF的接口设计原理,音频播放调用的接口有哪些。
HDF(Hardware Driver Foundation)驱动框架,为驱动开发者提供驱动框架能力,包括驱动加载、驱动服务管理、驱动消息机制和配置管理。并以组件化驱动模型作为核心设计思路,让驱动开发和部署更加规范。
1.驱动加载:HDF驱动框架提供把和配置的设备列表匹配成功的驱动程序加载起来的功能。
2.驱动服务管理HDF框架可以集中管理驱动服务,开发者可直接通过HDF框架对外提供的能力接口获取驱动相关的服务。
3.驱动消息机制HDF框架提供统一的驱动消息机制,支持用户态应用向内核态驱动发送消息,也支持内核态驱动向用户态应用发送消息。配置管理实现了配置代码与驱动代码解耦,便于开发者进行配置管理。
4.驱动hostHDF框架将一类设备驱动放在同一个Host(设备容器)里面,用于管理一组设备的启动加载等过程。在划分Host时,驱动程序是部署在一个Host还是部署在不同的Host,主要考虑驱动程序之间是否存在耦合性,如果两个驱动程序之间存在依赖,可以考虑将这部分驱动程序部署在一个Host里面,否则部署到独立的Host中是更好的选择。Device对应一个真实的物理设备。DeviceNode是设备的一个部件,Device至少有一个DeviceNode。每个DeviceNode可以发布一个设备服务。驱动即驱动程序,每个DevicdNode唯一对应一个驱动,实现和硬件的功能交互。
HDF提供给音频播放的接口以及能力
AudioRenderStart:启动音频播放
AudioRenderStop:停止音频播放
AudioRenderPause:暂停
AudioRenderResume:恢复
AudioRenderFlush:刷新
AudioRenderGetFrameSize:计算并返回音频渲染的单帧大小
AudioRenderGetFrameCount:获取音频播放的总帧数
AudioRenderSetSampleAttributes:设置音频渲染的样本属性
AudioRenderGetSampleAttributes:获取音频渲染的样本属性
AudioRenderGetCurrentChannelId:获取当前音频播放的通道数
AudioRenderCheckSceneCapability:根据音频渲染参数和场景描述来确定支持的路径
AudioRenderSelectScene:选择场景
AudioRenderSetMute:设置静音
AudioRenderGetMute:获取静音状态
AudioRenderSetVolume:设置音量
AudioRenderGetVolume:获取音量
AudioRenderGetGainThreshold:获取增益阈值的最小值和最大值
AudioRenderGetGain:获取增益值
AudioRenderSetGain:设置增益值
AudioRenderGetLatency:计算音频播放的延迟时间
AudioRenderRenderFrame:将一帧音频数据写入渲染器的缓冲区
AudioRenderGetRenderPosition:
AudioRenderSetRenderSpeed:设置播放速度
AudioRenderGetRenderSpeed:获取播放速度
AudioRenderSetChannelMode:设置通道模式
AudioRenderGetChannelMode:获取通道模式
AudioRenderSetExtraParams:设置额外的参数
AudioRenderGetExtraParams:获取额外的参数
AudioRenderReqMmapBuffer:请求缓冲区
AudioRenderGetMmapPosition:获取当前的播放帧数和时间戳
AudioRenderTurnStandbyMode:设置待机模式
AudioRenderAudioDevDump:日志转储
AudioRenderRegCallback:申请回调
AudioRenderDrainBuffer:清空播放缓存
更多推荐
所有评论(0)