android audio系统介绍

更新时间:2023-07-23 04:13:02 阅读: 评论:0

Android 音频系统整理
在framework中c/c++层的音频系统服务主要有三个。在ba/media/mediarver/Main_mediarver.cpp的代码中可以找到。一个是AudioFlinger, MediaPlayerService, 和AudioPolicyService。AudioFlinger和AudioPolicyService是android audio系统的服务,负责音频方面的数据流传输和控制功能,也负责音频设备的管理。这个部分作为Android的Audio系统的输入/输出层次,一般负责播放PCM声音输出和从外部获取PCM声音,以及管理声音设备和设置。Mediaplayerrvice 是Android中很重要也最为复杂的媒体播放器(MediaPlayer)部分的服务。MediaPlayer在底层是基于OpenCore(PacketVideo)和stagefright的库实现的。音频服务端和客户端之间的交互包含了进程间通讯等内容,这种进程间通讯的基础是Android基本库中的Binder机制。
代码框架:
1:Java部分代码(frameworks/ba/media/java/android/media)
regulationno touch
AmrInputStream.java
继承InputStream,native调用
AsyncPlayeer.java
异步音乐播放对象将要播放的媒体文件封装成内部类Command
AudioFormat.java
用于访问一些音频格式和通道配置常量,这些常量应用在AndioTrack和AudioRrcord中。
攒动
AudioManager.java
用于设置音乐模式和音量大小调整
AudioRecord.java
读取麦克风的音频流,生产PCM文件,native调用
shake的过去式AudioService.java
音频设置服务,在systemrvice中启动,为所有的音频相关的设置提供服务,在audiorvice中定义了一个audiosystemthread类,用来监控音频控制相关的信号,当有请求时会通过调用audiosystem的接口实现音频的控制,消息处理是异步的。
AudioSystem.java
提供音频系统的基本类型定义,以及基本操作的接口,native调用
AudioTrack.java
播放音频流PCM文件,native调用
CamcorderProfile.java
检索预定义的摄录像机的配置文件,native调用
CameraProfile.java
检索照片质量级别low,medinum,high 。native调用,动态加载
DecoderCapabilities.java
检索音视频解码类型,native调用
EncoderCapabilities.java
itt检索音视频编码能力参数,native调用
ExifInterface.java
读写JPEG格式图片的一些附加信息,native调用
FaceDetector.java
检测图片中的人脸
IAudioFocusDispatcher.aidl
为Audiorvice提供接口
IAudioService.aidl
为Audiorvice提供接口
IMediaScannerListener.aidl
为MediaScanner提供接口
IMediaScannerService.aidl
为MediaScanner提供接口
Jetplayer.java
控制jet engine,使用MIDI格式,native调用
MediaFile.java
MediaScanner帮助类
MediaMetadataRetriever.java
为Media检索提供接口,native调用
MediaPlayer.java
音视频文件播放类,不支持多个音频同时播放,native调用
MediaRecord.java
录制音视频类,native调用
MediaScanner.java
Mediascannerrver的帮助类,native调用
MediaScannerClient.java
接口
MediaScannerConnection.java
连接Mediascannerrver类
Ringtone.java
RingtoneManager.java
提供了音频系统的基本类型定义,以及基本操作的接口。
铃声等
SoundPool.java
提供为引用播放音频声音的接口,在加载文件等方面做了优化,native调用,可同时播放多个音,低延迟
ToneGenerator.java
提供了播放DTMF tones的支持,如电话的拨号音,对应于直接为PCM数据提供支持,native调用
Metadate.java
媒体文件元数据类
MiniThumbFile.java
媒体缓存文件
ResampleInputStream.java
重新取样输入流,native调用
ThumbnailUtils.java
缩略图工具类
2:Audio的JNI层
walk off    JNI的cpp分布在两个部分,ba/core/jni中有AudioRecord,AudioSystem,AudioTrack,JetPlayer,ToneGenarator,其他的在ba/media/jni中。
3:Audio的c/c++层
1)Audio框架见下图:
Audio本地框架是media库的一部分,本部分内容被编译成库libmedia.so,主要实现AudioSystem、AudioTrack和AudioRecorder三个类,对上面提供接口,由下层的本地代码去实现。AudioFlinger内容被编译成库libaudioflinger.so,它是Audio系统的本地服务部分,它是audio系统中真正做事的类,它通过硬件抽象层提供到硬件的接口。
media库中的Audio框架部分
AndroidAudio系统的核心框提供了IAudioFlinger类接口,在这个类中,可以获得IAudioTrackokayIAudioRecorder两个接口,分别用于声音的播放和录制。AudioTrackAudioRecorder分别通过调用IAudioTrackIAudioRecorder来实现。
Audio系统的头文件在frameworks/ba/include/media/目录中,主要的头文件如下:
AudioSystem.hctocmedia库的Audio部分对上层的总管接口;
IAudioFlinger.h:需要下层实现的总管接口;
AudioTrack.h:放音部分对上接口;
IAudioTrack.h:放音部分需要下层实现的接口;
AudioRecorder.h:录音部分对上接口;
IAudioRecorder.h:录音部分需要下层实现的接口。
IAudioFlinger.hIAudioTrack.hIAudioRecorder.h这三个接口通过下层的继承来实现(即 AudioFlinger)。AudioFlinger.hAudioTrack.hAudioRecorder.h是对上层提供的接口,它们既供本地程序调用(例如声音的播放器、录制器等),也可以通过JNIJava层提供接口。类图如下:
2MediaPlayer框架见下图:
MediaPlayer的各个库之间的结构,在各个库中,libmedia.so位于核心的位置,它对上层的提供的接口主要是MediaPlayer类,类libmedia_jni.so通过调用 MediaPlayer类提供对JAVA的接口,并且实现了dia.MediaPlayerjoan什么意思类。libmediaplayerrvice.soMedia的服务器,它通过继承libmedia.so的类实现服务器的功能,而 libmedia.so中的另外
一部分内容则通过进程间通讯和libmediaplayerrvice.so幼师培训学校进行通讯。 libmediaplayerrvice.so的真正功能通过调用OpenCore Player来完成。
整个mediaPlayer库的调用关系如下图所示:
整个MediaPlayer在运行的时候,可以分成ClientServer两个部分,它们分别在两个进程中运行,它们之间使用Binder机制实现IPC通讯。从框架结构上来看,IMediaPlayerService.hIMediaPlayerClient.hMediaPlayer.h三个类定义了MeidaPlayer的接口和架构,MediaPlayerService.cppmediaplayer.cpp两个文件用于MeidaPlayer架构的实现,MeidaPlayer的具体功能在PVPlayer(库libopencoreplayer.so)中的实现。

本文发布于:2023-07-23 04:13:02,感谢您对本站的认可!

本文链接:https://www.wtabcd.cn/fanwen/fan/90/185906.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:调用   接口   提供   音频   播放   实现   部分   声音
相关文章
留言与评论(共有 0 条评论)
   
验证码:
Copyright ©2019-2022 Comsenz Inc.Powered by © 专利检索| 网站地图