Android Audio System 架构初探:库层(一)

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

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,new了一个player就是StagefrightPlayer(继承

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值