在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。


更多相关文章

  1. Android中打电话的数据流程
  2. Android(安卓)SDK 2.2 下载安装方法
  3. Android的service相关讲解
  4. 剪切图片-扩展android 选择图片(从手机照相机或手机图片)
  5. Android(安卓)VideoView简单播放视频
  6. Android学习笔记(28):三种选择器DatePicker_TimePicker_NumberPi
  7. 理解onMeasure
  8. android客户端程序访问服务器端webservice,几篇不错的文章!
  9. 监控android binder size

随机推荐

  1. 像写Flutter一样开发Android原生应用
  2. Android 中文API (67) —— BluetoothClass
  3. 使用ImageView 加上 Edittext做出自定义
  4. android和PC(Python)通过USB(adb模式)基于Soc
  5. Android 中文API (68) —— BluetoothClass
  6. Android(安卓)驱动之旅 第五章: 在Android
  7. [Android]-图片JNI(C++\Java)高斯模糊的实
  8. Android(安卓)滑动绘制流程探究 系统是如
  9. Android(安卓)微信支付总结
  10. Android 技术要点