Android操作系统已经占领了当今设备的很大一部分,包括智能手机,电视和Tab。根据Statista的数据,谷歌创建的Android移动操作系统(OS)是目前使用最广泛的智能手机操作系统,以接近71.8%的市场份额主导移动操作系统市场。
Android 在所有硬件平台上被广泛采用,因为它是一个开源软件代码和一个定义明确的框架结构。Linux内核是Android操作系统的核心,因为它提供了硬件和各种Android组件之间的抽象。音频处理需要大量复杂的操作和密集的算法来产生高保真音频输出。Android 音频架构涉及许多复杂的软件,必须处理许多方面,例如支持扬声器、听筒、耳机、HDMI、麦克风、蓝牙 SCO、A2DP 等音频硬件,以及不同的软件应用程序,如电话、媒体播放器录音机、VIOP 应用程序和 SIP 应用程序。本文重点介绍 Android 音频架构中不同组件的高级功能。
安卓音频架构概述
Android 音频架构概述了音频功能的实现方式,并提供了指向相关源代码的链接。
安卓音频架构
安卓音频APP和JAVA框架
Android 框架由一组定义明确的 Java API 组成,使开发人员能够轻松编写 Android 应用程序。Android 音频应用代码使用这组不同的多媒体 (android.media) 框架 API。在内部,这些 API 调用相应的 Java 本机接口 (JNI) 粘附软件代码来访问本机组件,这些组件进一步与较低层交互以在硬件上播放音频。
粘结 剂
进程间通信 (IPC) 是所有不同 Android 组件交换信息的重要机制。Android 进程使用名为“Binder”的特定于 Android 的 IPC 来调用另一个 Android 进程中的例程,并通过参数交换数据。上层使用 Binder API 与本机音频服务和下层硬件层进行通信。
音频管理器
音频管理器是原生的Android服务,是整个音频子系统的核心组件。从Android 7 Nougat版本开始,它不是原生媒体服务的一部分,而是在用户空间中作为单独的Android进程运行。它为不同的服务运行三个线程,即音频策略、音频投点和音频以执行其功能。
音频策略服务
策略决策主要包括打开新的输入/输出音频流,并在通过 UI 和流音量管理更改或选择后将音频重新路由到不同的音频设备。音频策略服务处理执行这些策略决策所需的所有操作。此服务还跟踪用户事件和当前系统状态,以通知音频投点服务。
音频投掷器服务
音频传票服务调用音频硬件抽象层 (HAL) API 以与音频硬件交互。它为上层提供了一个可访问的界面。音频策略服务定义的策略决策和策略由此服务执行。它还负责与音频设备通信并维护其状态。它处理多个音频流(通知和音乐)的混合、音量缩放、音频流写入,并为媒体播放器提供写入音频帧等信息。
音频服务
Audio 是 Android 8 Oreo 版本中引入的新 Android C API。它专为需要低延迟的高性能音频应用而设计。Android 音频应用调用音频 API 来读取和写入音频流中的数据。音频服务处理这些低延迟音频 API。音频 API 中有两种模式,即“独占模式”,它允许客户端应用程序代码直接写入与 ALSA 驱动程序共享的内存映射缓冲区,以及“共享模式”,它混合所有共享流并遵循音频 HAL 路径。
音频 HAL
硬件抽象层 (HAL) 是 Android 堆栈中的一个层,它为上层运行的本机音频服务提供标准访问接口。音频 HAL 将上层桥接到较低级别的音频驱动程序实现。供应商必须使用特定的音频驱动程序代码实现音频 HAL 接口。音频 HAL 作为单独的 Android 进程在用户空间中运行,以执行上层所需的功能。
下面列出了音频 HAL 提供的主要功能。
管理音频输入/输出流的打开和关闭,包括设置音频通道、采样率和音频格式等流参数。它还必须处理媒体播放器的不同状态,包括播放、暂停、恢复和待机,并为硬件上写入的音频帧和时间戳提供反馈路径数据。
加载需要特殊音频处理和解码的特定库集,从而将原始数据发送到音频硬件。
音频设备接口
Android 音频架构支持不同类型的音频设备,包括蓝牙设备、电视调谐器系统、HMDI 连接和 I2S 扬声器。音频 HAL 负责将音频数据包从上层发送到这些设备。选择特定音频设备或将其插入 Android 硬件后,音频策略管理器将执行一组定义并与音频设备关联的策略,并且所有层都配置为支持音频数据流经它。Audio HAL 特别加载与音频设备交互的接口代码并对其执行读写操作,此接口代码还为连接到其他 HAL 的音频设备执行 HAL 间 IPC,例如,需要蓝牙 HAL 交换数据的蓝牙音频设备。
内核驱动程序
音频 HAL 实现具有与音频驱动程序交互的代码。Android 内核使用高级 Linux Sound Architecture (ALSA) 子系统,或者供应商可以引入与 HAL 无关的自定义驱动程序。Tiny ALSA是一个小型库,用于与Linux内核中的ALSA接口,音频HAL使用它与不同的声卡进行交互。
Android堆栈是需要为不同的硬件平台构建的巨大软件代码。理解和修改较低的Android层非常困难,因为它需要大量的调试技能。硬件级实现因每个供应商而异,需要与为上层定义的接口准确映射。代码库中许多未记录的部分更加复杂且特定于供应商,并且它使用复杂的IPC机制,并在编程语言之间切换。
Softnautics使多媒体公司能够设计和开发连接的多媒体解决方案。我们帮助客户进行Android底层所需的不同自定义和集成,其中主要包括用户和内核空间中的本机代码。我们还协助客户添加基于音频的无线设备并将其集成到Android音频子系统中。我们在了解 Android 架构中的不同层以进行定制和围绕它的新设计方面拥有专业知识。我们在设计高性能媒体应用程序、构建完整的视频管道、音频/视频编解码器开发、应用程序移植等方面拥有实践经验。
审核编辑?:郭婷
-
智能手机
+关注
关注
66文章
18431浏览量
179857 -
Android
+关注
关注
12文章
3923浏览量
127132 -
操作系统
+关注
关注
37文章
6738浏览量
123190
发布评论请先 登录
相关推荐
评论