在android原生的媒体播放器中是由mediaplayerservice来控制媒体播放器的,在mediaplayerservice中创建了mediaplayer,在mediaplayer.java的native方法通过jni调用android_media_mediaplayer.cpp中的方法,接着往下调用mediaplayer.cpp中的方法,mediaplayer通过ipc机制调用mediaplayerService中的方法,mediaplayerService通过对文件格式的判断来选择不同的播放器来播放音乐,当是midi格式时会选择sonivox来播放,当系统的配置文件中允许ogg格式由vorbris来播放时则用vorbris,否则用stagefright来播放。其余的格式由配置文件选择是否由stagefright来播放,是则由stagefright播放,不是则由opencore的pvplayer来播放。
stagefright由awesongplayer来控制,他会调用setDatasource()方法来加载音频文件,根据音频文件的头字段不同来选择不同的解析器,这个解析器会进行av分离分离出audioTrack和videoTrack,接着会根据audioTrack的mineType类型来选择不同的编码器来进行编码,这个是由audioSource来进行解码,audioSource是对omxCodec的封装,而audioPlayer则是用来控制audioSource和audioTrack的。audioplayer调用fillBuffer()方法将解完码的数据写进data中最终将解完码的数据流最后会传给AudioTrack,由audioTrack来交给audioFlinger,audioTrack通过调用creataudioTrack()来得到audioFlinger返回的iaudioTrack,将数据流写进iaudioTrack的共享buffer中,然后audioFlinger读出缓存中的数据交给playbackTread进行混音或者直接输出给缓存并最终将数据给audioOutputStream。


DataSource:从本地媒体文件或者流媒体读取数据,给分离器分析;
  分离器:获取文件格式和分离多路track;
  解码器:将压缩格式的音轨解码为PCM数据,视频经过解码为YUV数据;
  渲染器:将解码出来的视频数据经过color转换为RGB输出到屏幕;
  AudioPlayer:包含了audiotrack,将音频PCM数据输出到音频设备;




更多相关文章

  1. Android(安卓)dialog 去除虚拟按键的解决方法
  2. Android(安卓)OpenCV中的几种基本数据结构
  3. Android中的WebView控件用法
  4. Android:Eclipse如何设置格式化Java代码
  5. android系统关机源码(9.0)流程分析
  6. Fix bug in the notepad tutorial of Android
  7. android标题栏进度圈使用方法
  8. Android(安卓)- Earthquake项目(地震显示器) 的 修正
  9. Android重写onOreate,onPause,onStop等方法时需要注意的问题!

随机推荐

  1. 如何更改Android(安卓)程序的icon快捷方
  2. Android系统文件夹结构
  3. Android(安卓)—— TextView中的MaxLines
  4. 歌词效果制作
  5. Android开发之获取网络类型(WIFI、2G、3G
  6. 继续分享12个亲测源码
  7. EditText属性和相关用法
  8. Android下载repo文件报错
  9. 全球十个最佳Android应用
  10. [置顶] android 实现发送彩信方法 (MMS),