ZZ:http://blog.csdn.net/itachi85/article/details/7215409


=============================================



在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】解决Viewpager设置高度为wrap_content无效的方法
  2. Android(安卓)JNI入门第三篇——jni头文件分析
  3. 经纬度转度分秒 Java/Android
  4. Android(安卓)CollapsingToolbarLayout:将ActionBar载入Toolbar(2)
  5. Android(安卓)viewpager 拿到当前显示的 fragment 的实例
  6. android listview 的使用方法
  7. 判断android手机屏幕方向的方法
  8. android 时间的处理 将毫秒转化成 几分几秒 (02:23 类似格式)
  9. zxin android客户端二维码框问题

随机推荐

  1. [系统集成] Android 自动构建系统
  2. Android C/C++ 开发
  3. android:gravity和android:layout_gravit
  4. android之buttonBar的设计--style的引用
  5. 如何自学 Android 编程?(励志)
  6. Android(安卓)- 文件读写操作 总结
  7. android发现之旅之ViewRootImpl,Activity
  8. 谷歌推出新操作系统Andromeda,那Android真
  9. Android(安卓)Location服务之Geocoder
  10. Android USB状态监控(解决scheme="file")