1 库层(Native层)
1.1 MediaPlayer和MediaPlayerService
图表18MediaPlayer和MediaPlayerService
所以,MediaPlayerService和MediaPlayer之间是互为Bp,Bn的关系。MediaPlayer调用一个函数如getDuration实际上调的是MediaPlayerService create出来的一个player的getDuration,而这个player是一个MediaPlayerService的Client,它是一个BnMediaPlayer,然后加到mClients里。 所以MediaPlayer调用函数,会调用到MediaPlayerService的Client的同名函数。最终调用到Client里的变量mPlayer的同名函数。
从APP到AudioTrack
图表19创建stagefrightplayer的流程
图表20StagefrightPlayer上下文
playerType怎么拿的呢?从MediaPlayerFactory::getPlayerType(this, url)中拿来的,就是在sFactoryMap中拿得分最高的那个类型,sFactoryMap只在registerFactory_l被赋值,而MediaPlayerService构造函数中调用了registerBuiltinFactories,注册了几个Factory。
创建player(即Client里mPlayer)用到了简单工厂模式。有很多factory,这些factory创建了MediaPlayerBase,比如StagefrightPlayerFactory,

本文深入探讨了Android音频系统的库层,包括MediaPlayerService、MediaExtractor和编解码器的工作原理。通过MediaPlayer与MediaPlayerService的交互,阐述了音频数据如何从APP层传递到AudioTrack。同时,详细介绍了MediaExtractor如何确定多媒体格式,以及AudioPlayer在软解码和硬解码模式下的缓冲数据交换过程。此外,还讲解了OMXCodec及其在软硬件解码中的作用,以及OMX的工作流程。
最低0.47元/天 解锁文章
1519

被折叠的 条评论
为什么被折叠?



