Android MediaPlayer+Stagefright框架(音频)图解

news/2024/7/4 23:09:52


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


            </div>
            转自:https://blog.csdn.net/itachi85/article/details/7215409

http://www.niftyadmin.cn/n/664542.html

相关文章

shell 面试题汇集

利用 top 取某个进程的 CPU 的脚本 : st1\:*{behavior:url(#ieooui) } <!-- /* Font Definitions */ font-face {font-family:宋体; panose-1:2 1 6 0 3 1 1 1 1 1; mso-font-alt:SimSun; mso-font-charset:134; mso-generic-font-family:auto; mso-font-pitch:variable; m…

Linq分页查询

//Linq分页查询 int pageIndex Convert.ToInt32(HttpContext.Current.Request["PageIndex"]); int start pageIndex * Parameter.pageSize; int end (pageIndex 1) * Parameter.pageSize; userList userList.Take<UserInfo>(end).Skip<UserInfo>(st…

Stagefright框架解读(—)音视频Playback流程

转载请注明出处&#xff1a;http://blog.csdn.net/itachi85/article/details/7216639 从Android 2.0&#xff0c;Google引进了Stagefright&#xff0c;并在android2.3时用Stagefright在Android中是以shared library的形式存在(libstagefright.so)&#xff0c;其中AwesomePlayer…

面试-双向链表

面试遇到一个题目&#xff0c;写一个双向链表&#xff0c;包括添加&#xff0c;删除&#xff0c;查找和遍历。当时写了一塌糊涂&#xff0c;后来自己都觉得想笑&#xff0c;双向写着写着被我写成了单向不像单向&#xff0c;双向不像双向了&#xff0c;真是不伦不类。之后 我把这…

Java虚拟机(一)结构原理与运行时数据区域

前言 本来计划要写Android内存优化的&#xff0c;觉得有必要在此之前介绍一下Java虚拟机的相关知识&#xff0c;Java虚拟机也并不是三言两语能够介绍完的&#xff0c;因此开了Java虚拟机系列&#xff0c;这一篇文章我们来学习Java虚拟机的结构原理与运行时数据区域。 1.Java虚拟…

[美食]台湾夜市空降上海 33元吃到饱

正宗的台湾夜市小吃搬到上海咯&#xff01;一家来自台 湾的自助式餐厅近日在上海长宁区延安西路近虹许路开张。大肠包小肠、蚵仔煎、牛肉面、担仔面、天妇罗、生炒花枝、台湾刨冰、台湾水果……食客在该店试营业 期间只需要花33元&#xff08;下午茶/宵夜价格&#xff09;&…

【codeforces 733F】 Drivers Dissatisfaction

http://codeforces.com/problemset/problem/733/F (题目链接) 题意 给出一张n个点的无向图&#xff0c;每一条变有两个特征值&#xff1a;${w&#xff0c;c}$&#xff1b;分别表示这条边的权值为${w}$&#xff0c;每将这条边的权值减小1需要充${c}$元钱。初始时有${S}$元钱&…

Java虚拟机(二)对象的创建与OOP-Klass模型

相关文章 Java虚拟机系列 前言 在前一篇文章中我们学习了Java虚拟机的结构原理与运行时数据区域&#xff0c;那么我们大概知道了Java虚拟机的内存的概况&#xff0c;那么内存中的数据是如何创建和访问的呢&#xff1f;这篇文章会给你答案。 1.对象的创建 对象的创建通常是通过…