Android Audio 数据流详解
来源:互联网 发布:nginx log 路径 编辑:程序博客网 时间:2024/05/29 11:26
Android Audio Architecture 图如下所示
详细调用路径如下
1. 音频播放
示例代码
MediaPlayer mp = new MediaPlayer();
mp.setDataSource(PATH_TO_FILE);
mp.prepare();
mp.start();
1.1 MediaPlayer mp = new MediaPlayer()
实现流程如下表:
函数名文件名MediaPlayer:: MediaPlayerMediaPlayer.JavaMediaPlayer::native_setupMediaPlayer.Javaandroid_media_MediaPlayer_native_setupandroid_media_MediaPlayer.cppMediaPlayer::MediaPlayerMediaPlayer.cpp
1.2 mp.setDataSource(PATH_TO_FILE);
实现流程如下:
函数名文件名MediaPlayer::setDataSourceMediaPlayer.Javaandroid_media_MediaPlayer_setDataSourceandroid_media_MediaPlayer.cppMediaPlayer::setDataSource
MediaPlayer.cpp
-MediaPlayer::getMediaPlayerServiceMediaPlayer.cpp -IMediaPlayerServiceIMediaPlayerService.h -IMediaPlayerService::createMediaPlayer.cpp --MediaPlayerService::createMediaPlayerService.cpp -IMediaPlayer::setDataSourceMediaPlayer.cpp --BpMediaPlayer::setDataSourceIMediaPlayer.cpp --MediaPlayerService::Client::setDataSource(真正执行操作)MediaPlayerService.cpp --android::createPlayerMediaPlayerService.cpp -- new StagefrightPlayerMediaPlayerService.cpp --new AudioOutputMediaPlayerService.cpp --StagefrightPlayer::setDataSourceStagefrightPlayer.cpp --AwesomePlayer::setDataSourceAwesomePlayer.cpp --AwesomePlayer::setDataSource_lAwesomePlayer.cpp
1.3 mp.prepare()
函数名文件名MediaPlayer:: prepareMediaPlayer.Java android_media_MediaPlayer_prepareandroid_media_MediaPlayer.cppMediaPlayer:: prepareMediaPlayer.cpp MidiFile:: prepareMidiFile.cpp VorbisPlayer:: prepare VorbisPlayer.cpp VorbisPlayer::createOutputTrackVorbisPlayer.cpp AudioOutput::openMediaPlayerService.cpp AudioTrack::AudioTrackAudioTrack.cpp AudioSystem::get_audio_flingerAudioSystem.cpp AudioFlinger::createTrackAudioFlinger.cpp
1.4 mp.start()
函数名文件名MediaPlayer:: startMediaPlayer.Javaandroid_media_MediaPlayer_startandroid_media_MediaPlayer.cppMediaPlayer::startMediaPlayer.cpp PVPlayer:: startPVPlayer.h MidiFile:: startMidiFile.cpp VorbisPlayer:: startVorbisPlayer.cpp AudioTrack::startAudioTrack.cpp
MediaPlayerService:: MediaPlayerService(MediaPlayerService.cpp)由systemserver进程创建,在文件system_init.cpp里的函数system_init()调用MediaPlayerService::instantiate创建
getPlayerType(MediaPlayerService.cpp)返回3种player:
1) PV_PLAYER:播放mp3
2) SONIVOX_PLAYER:播放midi
3) VORBIS_PLAYER:播放ogg,
简单说来,播放流程如下:
Java端发起调用,MediaPlayer会转至MediaPlayerService,然后会调用相应的解码工具解码后创建AudioTrack,所有待输出的AudioTrack在AudioFlinger::AudioMixer里合成,然后通过AudioHAL(AudioHardwareInterface的实际实现者)传至实际的硬件来实现播放
- Android Audio 数据流详解
- Android Audio 数据流详解
- Android Audio 数据流详解
- Android Audio 系统框架数据流分析
- Android数据流详解
- Android数据流详解
- Android audio dai_link详解
- android Audio 详解( 一 )
- android Audio 详解( 二 )
- Android的Audio系统详解
- Android 7.0 Audio的Resample过程详解
- Android 7.0 Audio的Resample过程详解
- Audio---HTML5音频audio详解
- Android Audio
- android audio
- android audio
- android Audio
- android audio
- JAVA面试题之线程
- asp.netmvc3 取消页面缓存
- 跨平台的 iOS,Android 在线游戏或应用如何实现?
- margin,border,padding,content
- 页面滑动切换(类Launcher滑动屏幕实现)
- Android Audio 数据流详解
- ExtJS4新发现12_CheckboxSelectionModel单选和复选的限定
- DEFINE_GUID
- JQuery Multi Select With Two ListBox
- 夏宇闻教授谈FPGA工程师的入门学习
- JavaSE第四十一讲:LinkedList源代码深入剖析
- 对2-3-4树的简单想法
- 服务器端 js 利用JavaScript开发事件驱动的Web应用 – node.js简介
- set history size