Android Multimedia框架总结(八)Stagefright框架之AwesomePlayer及数据解析器
来源:互联网 发布:多益网络登录器 编辑:程序博客网 时间:2024/05/16 18:47
转载请把头部出处链接和尾部二维码一起转载,本文出自逆流的鱼:http://blog.csdn.net/hejjunlin/article/details/52503057
前言:前面一篇分析了mediaplayerservice及MediaPlayer中的CS模型,但是对于如何能把数据解析出来,渲染到最终的SurfaceView上显示,并且播放起来,我们依然还不得而知,从今天开始,就开始介绍多媒体框架中数据解析->解码->渲染输出过程,也就是后面几篇都要介绍的stagefright框架。
先看下今天的Agenda:
- Stagefright的整体结构中角色
- Stagefright在playback中角色
- Stagefright初识
- StagefrightPlayer及AwesomePlayer初识
- 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方法中:
本文出自逆流的鱼:http://blog.csdn.net/hejjunlin/article/details/52503057
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类型的资源,如下:
本文出自逆流的鱼:http://blog.csdn.net/hejjunlin/article/details/52503057
MediaExtractor数据解析流程
接着,我们看下上面一直在用的MediaExtractor(数据解析器)
以上代码总结:
- 根据对文件解析的不同格式创建一个Extractor解析器,并解析,创建好解析器后,回到AwesomePlayer::setDataSource_l()中,继续执行setDataSource_l(extractor),对新建的这个解析器做处理,其实质是显示音视频A/V的分离。
- setVideoSource(extractor->getTrack(i));//设置视频源mVideoTrack ;
- setAudioSource(extractor->getTrack(i));//设置音频源mAudioTrack;
- mVideoTrack和mAudioTrack的做为创建的AwesomePlay的成员函数,其类型为MPEG4Source,继承了MediaSource。
以上过程就进行了A\V的分离,对音频和视频资源进行分开处理,其过程是mediaplayerservice->Stagefrightplayer—>Awesomeplayer——>MPEG4Extractor——>MPEG4Source.这几个过程。StageFright的Parse,Decode过程下节分析。
第一时间获得博客更新提醒,以及更多android干货,源码分析,欢迎关注我的微信公众号,扫一扫下方二维码或者长按识别二维码,即可关注。
如果你觉得好,随手点赞,也是对笔者的肯定,也可以分享此公众号给你更多的人,原创不易
- Android Multimedia框架总结(八)Stagefright框架之AwesomePlayer及数据解析器
- Android Multimedia框架总结(八)Stagefright框架之AwesomePlayer及数据解析器
- Android Multimedia框架总结(八)Stagefright框架之AwesomePlayer及数据解析器
- Android Multimedia框架总结(八)Stagefright框架之AwesomePlayer及数据解析器
- Android Multimedia框架总结(九)Stagefright框架之数据处理及到OMXCodec过程
- Android Multimedia框架总结(九)Stagefright框架之数据处理及到OMXCodec过程
- Android Multimedia框架总结(十一)CodeC部分之AwesomePlayer到OMX服务
- Android Multimedia框架总结(十)Stagefright框架之音视频输出过程
- Android Multimedia框架总结(十六)Camera2框架之openCamera及session过程
- Android播放器框架分析之AwesomePlayer
- Android播放器框架分析之AwesomePlayer
- Android播放器框架分析之AwesomePlayer
- Android播放器框架分析之AwesomePlayer
- Android播放器框架分析之AwesomePlayer
- Android Multimedia框架总结(一)MediaPlayer介绍之状态图及生命周期
- Android Multimedia框架总结(一)MediaPlayer介绍之状态图及生命周期
- Android Multimedia框架总结(十三)CodeC部分之OpenMAX框架初识及接口与适配层实现
- Android Multimedia框架总结(十九)Camera2框架C/S模型之CameraService启动及与Client连接过程
- 如何实现:移动端点击返回 仍然在原来的位置
- 设计模式入门——工厂模式
- lib 简单实现
- ros中编译moveit_tutorials出错
- 【Python学习笔记】-json模块
- Android Multimedia框架总结(八)Stagefright框架之AwesomePlayer及数据解析器
- 利用spark的mllib构建GBDT模型
- RabbitMQ实战基础
- HTML与CSS的链接方式
- [题解]April Cook-Off 2017
- 2017百度实习生春招java笔试题 输出第三便宜价格
- ERROR 1146 (42S02): Table 'eip_fileservice.t_document_file' doesn't exist
- Android Multimedia框架总结(九)Stagefright框架之数据处理及到OMXCodec过程
- 为何与0xff进行与运算