android 音频子系统框架(一)
Android 音频框架:
1,与应用程序开发有直接关联的是MediaPlayer,MediaRecorder。
音频系统的核心由AudioFlinger、AudioPolicyService、AudioTrack/AudioRecorder三部分构成,其中AudioFlinger、AudioPolicyService属于system service,驻留在audioserver进程,负责不断地处理AudioTrack/AudioRecorder的请求。
依据Android音频框架图的几个层次结构:应用层,framework层,库层,hal层,kernel层来细分音频系统。
1),app,比如音乐播放器
2),framework层,开发音频产品使用最多的两个类MediaPlayer,MediaRecorder;还有两个专门用于音频管理的类:AudioTrack,AudioRecorder,系统服务MediaPlayerService内部的音频实现就是通过这两个类完成的。此外,还有AudioManager,AudioService,AudioSystem类。
3),Libraries,framework层的java类只是app跟库文件的中介,这些中介并不会完全去实现相关的功能,真正的功能实现是在底层库中。跟音频相关的库很多,如:
\frameworks\av\media\libmedia,包括的类有:AudioRecorder.cpp,AudioTrack.cpp,MediaRecorder.cpp,MediaPlayer.cpp等;
音频系统的核心服务类:AudioFlinger.cpp,libaudioflinger在\frameworks\av\services\audioflinger路径下;
AudioPolicyService.cpp,libaudiopolicyservice在路径:frameworks\av\services\audiopolicy下。
还有一个重要的系统服务MediaPlayerService,libmediaplayerservic在目录:\frameworks\av\media\libmediaplayerservice下。
其中,AudioTrack,AudioRecorder,mediaPlayer,MediaRecorder是应用进程的一部分,通过Binder服务来与系统进程通信。
4),HAL,音频硬件抽象层主要分为两个核心:AudioFlinger和AudioPolicyService。AudioFlinger是硬件抽象层的服务对象,一方面AudioFlinger可以不用直接调用底层的音频驱动,另一方面AudioFlinger的上层(包括同层的MediaPlayerService)模块,只需要与他进行通信就可以实现音频相关的功能了。AudioPolicyService实际并不是一个真实的设备,只是采用虚拟设备的方式让厂商可以方便的定制自己的“音频策略”。
抽象层的任务是将AudioFlinger/AudioPolicyService真正的与硬件设备关联起来,但是又要保证底层的变化不对上层造成影响。所以Hal层提供了统一的接口来定义跟audioFlinger,AudioPolicyService之间的通信方式,这就是audio_hw_device,audio_stream_in, audio_stream_out等结构体,这些struct数据类型内部只是提供了函数指针的定义,真正的实现要在AudioFlinger、AudioPolicyService初始化时根据加载的库来填充。
android 音频子系统框架(一)相关推荐
- Android音频子系统(十二)------抖音直播功耗问题解析
你好!这里是风筝的博客, 欢迎和我一起交流. [前提条件] 移动卡纯5G,120HZ,最小亮度,最小音量,开启定位 [操作步骤] 1.从软件商店下载最新版本APK 2.进入抖音并登录账号,点击右上方的 ...
- Android音频子系统(五)------AudioFlinger处理流程
你好!这里是风筝的博客, 欢迎和我一起交流. AndioFlinger 作为 Android 的音频系统引擎,重任之一是负责输入输出流设备的管理及音频流数据的处理传输,这是由回放线程(Playback ...
- Android音频子系统(十四)------耳机杂音问题解析
你好!这里是风筝的博客, 欢迎和我一起交流. 背景介绍: [前提条件]OPPO的模拟有线耳机 [操作步骤]打开全民K歌进行任意一首音乐K歌的时候 [实际结果]耳机里面有滋滋的杂音 [期望结果]耳机里面 ...
- Android音频子系统(九)------数字耳机功耗问题解析
你好!这里是风筝的博客, 欢迎和我一起交流. 其实我们知道,在手机里面,除了相机和整机性能,还有一个用户最关键的地方:功耗. 功耗一直是用户在意的地方,如果用户用手机发现耗电耗得飞起,那估计在网上能把 ...
- Android音频子系统(十)------MTK Audio录音流程代码解析
你好!这里是风筝的博客, 欢迎和我一起交流. Android framework中的代码每个平台基本都是大同小异,只有Hal上代码才是厂商特制,每个平台都不相同,这里以MTK平台为例,记录下MTK平台 ...
- Android音频子系统(十三)------audio音频测试工具
你好!这里是风筝的博客, 欢迎和我一起交流. 测试音频延时的话,一般使用WALT来测试是最为准确的,他是借助了外部硬件来捕获音频信号,某宝上有卖: 就是有丢丢小贵,本打工人还是想想白嫖的法子- 谷歌有 ...
- Android音频子系统(十一)------耳机返听(耳返)原理实现
你好!这里是风筝的博客, 欢迎和我一起交流. 耳返,也就是耳机返听,一般用在演唱会直播.手机K歌.KTV等场景. 例如在嘈杂的演唱环境里,通过佩戴耳返,歌手能清楚地听到伴奏和自己的声音,来鉴定自己有没 ...
- Android音频子系统(一)------openOutput打开流程
你好!这里是风筝的博客, 欢迎和我一起交流. Audio在Android也算是比较复杂的系统,我也是一边学习一边做笔记,如果有不对的地方可以在评论区指出. 这里以Android N为例 为了防止代码看 ...
- Android音频子系统(十五)------Audio调试经验
你好!这里是风筝的博客, 欢迎和我一起交流. 两年前,我初来手机厂,还不会怎么分析log,当时刚从珠海芯片厂出来,遇到问题都是接上串口线,然后自己手动复现问题,然后对着串口查看下打出来的log分析异常 ...
- 韦东山 android 淘宝,韦东山-android音频子系统中audio_policy.conf的usb声卡理解 - 百问网嵌入式问答社区...
第四期视频->音频系统->5-(4/4)_项目实战1_耳麦拔插_切换声音通道流程 1.韦老师讲的声卡是指的音频编解码芯片(比如tiny4412上面指的是WM8960编解码芯片)? usb声 ...
最新文章
- 006_html元素
- application.xml定时
- oracle在线sql数据库设计,一款在线ER模型设计工具,支持MySQL、SQLServer、Oracle、Postgresql...
- 理解UI线程——SWT, Android, 和Swing的UI机理
- [ZJOI2010] 排列计数(dp + 组合数)
- 【转】C#中[STAThread]的作用
- Android ADB调试之无线连接设备
- ffempge 效率 生成_ffmpeg 编译静态库,搞了好久,终于搞成功了.根据网上教程做的 · iodefog...
- eclipse.ini 修改默认编码为 UTF-8
- libvirt 用c语言编译,基于C语言libvirt API简单小程序
- matlab 绘制三维空间直线
- 华为手机解锁码计算工具_华为高通全系列手机解锁工具
- 遗传算法matlab_当结构设计遇到遗传算法应用ANSYS和MATLAB联合优化设计探索(二)...
- 数学建模-插值与拟合模型
- 【蓝桥杯备考】Acwing周赛 第41场 Java题解
- Springboot中Bean的具体含义
- Spring MVC过滤器-超类
- 模型量化(1):模型量化简介
- Java面向对象编程-模拟购物车模块
- 阿里云云盘开通后格式化和挂载数据盘