AndroidO audio系统之框架简介(一)

1、概述

       Audio系统在Android中负责音频方面的数据流传输和控制功能,也负责音频设备的管理,它是Android中最复杂的子系统之一。本文将粗略分析一下audio的整体框架及播放、录制流程。不足之处,敬请指正,谢谢!

2、音频框架图

AndroidO audio系统之框架简介(一)_第1张图片

2.1 Application层

       音频相关的应用软件有: 音乐播放器,电话,声音设置,视频播放器等等。

2.2 Application Framework层

该层代码位置frameworks/base/media/java/android/media。其中关键类的作用如下:

  1. MediaPlayer和MediaRecorder,AudioTrack和AudioRecorder,提供声音播放和录制接口,但是MediaPlayer/MediaRecorder功能更强大,也更易于使用。
  2. AudioManager、AudioService及AudioSystem等类提供声音控制、通道选择、音效设置等功能。

2.3 Jni

       Audio的JNI代码在framewoks/base/core/jni目录下面,会和其他一些系统文件生成libandroid_runtime.so供上层调用。

2.4 Native Framework层

客户端:
       AudioTrack、AudioRecorder、MediaPlayer、MediaRecorder、AudioSystem对应Java层的相关类,代码放置在frameworks/av/media/libmedia中, C++语言编写,编译后成为libmedia库。

服务端:
       AudioFlinger和AudioPolicyService是核心代码,它们的代码在frameworks/av/services/audioflinger,编译后成为libaudioflinger库,运行在AudioServer系统进程。

2.5 HAL层

       HAL是AudioFlinger向下访问的对象,厂商会在这一层实现自己的接口层,桥接硬件驱动和上层框架,形成的文件会编译成audio.primary.,audio.a2dp.等so库文件供音频模块加载。

2.6 驱动

       一般情况下用的ALSA音频架构

3、音频各层代码结构图

AndroidO audio系统之框架简介(一)_第2张图片
Audio Application Framework:音频应用框架

AudioTrack:负责回放数据的输出,属 Android 应用框架 API 类

AudioRecord:负责录音数据的采集,属 Android 应用框架 API 类

AudioSystem: 负责音频事务的综合管理,属 Android 应用框架 API 类

Audio Native Framework:音频本地框架

AudioTrack:负责回放数据的输出,属 Android 本地框架 API 类

AudioRecord:负责录音数据的采集,属 Android 本地框架 API 类

AudioSystem: 负责音频事务的综合管理,属 Android 本地框架 API 类

Audio Services:音频服务

AudioPolicyService:音频策略的制定者,负责音频设备切换的策略抉择、音量调节策略等

AudioFlinger:音频策略的执行者,负责输入输出流设备的管理及音频流数据的处理传输

Audio HAL:音频硬件抽象层,负责与音频硬件设备的交互,由 AudioFlinger 直接调用

4、小结

       通过上述的框架图,很容易就可以对audio系统层次架构有个大概的了解。下一篇开始,将深入各层如何初始化、关联工作做个深入的分析。未完待续。。。

你可能感兴趣的:(Android)