Android Multimedia序列8(框架总结

Android Multimedia序列8(框架总结 )---Stagefright框架之AwesomePlayer及数据解析器

一、前言

(1)Stagefright的整体结构中角色
(2)Stagefright在playback中角色
(3)Stagefright初识
(4)StagefrightPlayer及AwesomePlayer初识
(5)MediaExtractor数据解析流程

二、Stagefright的整体结构中角色

三、Stagefright在playback中角色


 

四、Stagefright初识

前面一篇中,分析到mediaplayerservice会调到Stagefright中,进行编码解码操作
在libsstagefright中,预设的多媒体解码是openCore,由于其过于庞大和复杂,需要成本较高,开始引进了另一个框架,也就是stagefright框架。
以后默认情况android选择stagefright,但是并没有完全抛弃opencore,做了一个OMX层,仅仅是对 opencore的omx-component部分做了引用。

stagefright是和opencore是并列的。
Stagefright在 Android中是以shared library的形式存在(libstagefright.so) ,其中的module – AwesomePlayer可用来播放video/audio。
AwesomePlayer提供许多API,可以让上层的应用程序(Java/JNI)来调用。

先看下源头,从mediaplayerservice到Stagefright:



接着进入MediaPlayerFactory中的createPlayer方法中:



 

五、StagefrightPlayer及AwesomePlayer初识

开始进入StagefrightPlayer的构造函数



StageFrightPlayer中引用了AwesomePlayer,进而进行相关操作,
从上面代码可以看出,接着分析下StagefrightPlayer,如下代码:



StagefrightPlayer继承了MediaPlayerInterface接口,
同样以setDataSource为例,通常我们负责的模块或调用别人的模块时,在模块和模块之间,相当于一个黑盒一样。
里面什么流程我们并不清楚,call后,返回对应的状态或数据,仅此而已。
AwesomePlayer,就像是StagefrightPlayer中一个小盒子一样。
当mediaplayerservice中setDataSource传下来之后,进入如下方法:



以上代码总结为:
所以执行步骤都会调用 mPlayer->setDataSource(xxxx),
而在前面的分析,我们知道,这个mPlayer是被定义成AwesomePlayer,
因为文件的setDataSoure及uri方式的setData仅在实现有些区别,

接着向下看:



以上代码总结为:当setDataSource好后,返回上层OK状态,

再看下文件类型的setDataSource,如下:



在这里插入图片描述


以上代码总结为:匹配不同的文件类型,并用数据解析器处理,Mime表示该资源的媒体类型,当出现以右边格式出现的时候,就能被播放器识别,
如经常手机中文件,单击时,就会弹出一个用哪个软件打开一样。列举一些常用的Mime类型的资源,如下:

在这里插入图片描述

六、MediaExtractor数据解析流程

接着,我们看下上面一直在用的MediaExtractor(数据解析器)




以上代码总结:

  1. 根据对文件解析的不同格式创建一个Extractor解析器,并解析,创建好解析器后,回到AwesomePlayer::setDataSource_l()中,继续执行setDataSource_l(extractor),对新建的这个解析器做处理,其实质是显示音视频A/V的分离。

  2. setVideoSource(extractor->getTrack(i));//设置视频源mVideoTrack ;

  3. setAudioSource(extractor->getTrack(i));//设置音频源mAudioTrack;

  4. mVideoTrack和mAudioTrack的做为创建的AwesomePlay的成员函数,其类型为MPEG4Source,继承了MediaSource。


以上过程就进行了A\V的分离,对音频和视频资源进行分开处理,
其过程是mediaplayerservicer——>Stagefrightplayerr——>Awesomeplayer——>MPEG4Extractor——>MPEG4Source.这几个过程。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值