[置顶] Android MediaPlayer+Stagefright框架(音频)图解_第1张图片

在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 SDK 2.2 下载安装方法
  2. Android Logcat 直接输出JSON格式的数据
  3. android 4.0 内核(3.0)编译方法
  4. 关于android中的各种路径对应的方法
  5. Android 获取IP地址的实现方法
  6. Android pm命令使用方法
  7. unity在android显示界面(UnityPlayerActivity)不重复加载且app退出
  8. 三种方法使android 手机执行 二进制程序

随机推荐

  1. Android(安卓)应用版本控制
  2. Activity的四种启动模式
  3. Android简单判断某个APK是否已经安装的方
  4. Android使用Presentation进行双屏开发
  5. Android的线程使用来更新UI----Thread、H
  6. Android开机执行指定shell脚本
  7. 使用Android Studio下载Android Support
  8. Android开发 System.out.println(); 控制
  9. 如何实现对Android设备进行文本的模拟输
  10. 【Android(安卓)电量优化】电量优化 ( 充