
Android MultiMedia框架完全解析
文章平均质量分 92
Android MultiMedia框架完全解析
基于i.MX6Q Android N7.1
yanbixing123
曾师从于:世界芯片设计前10某公司,传说中的世界500强某米,被美丽国实体清单拉黑的某AI巨头,嵌入式黄埔军校某台企;毕业于某非985,211的双一流学校;
Camera算法,HAL,Android MultiMedia Framework,StageFright,OpenMAX;
嵌入式uboot,linux驱动,Andorid底层,i.MX6 IPU专栏,GStreamer专栏^_^~
小富靠勤,大富靠命。技术是通向小富的一条现实可行的路径。祝大家顺利~~~
展开
-
20. Android MultiMedia框架完全解析 - OMX组件解析与状态机简介
State类中会做一些常规的操作,而不同类中处理不同的状态类型转换,这句话是什么意思呢?参照上一篇文章中讲的OMX的使用例子,首先通过OMX_Init()函数来初始化OMX的环境,在这个函数中会去注册组件,注册content pipe,之后就会通过OMX_GetHandle()函数来构建组件,并获取这个组件的Handler,在这个函数中会通过上述的ConstructComponent()函数来构建组件,并通过SetCallbacks来设置组件的回调函数,此时就完成了组件的加载,状态为Loaded。原创 2022-10-10 16:42:26 · 2995 阅读 · 1 评论 -
19. Android MultiMedia框架完全解析 - 如何使用OpenMAX组件
Android MultiMedia框架完全解析 - 如何使用OpenMAX组件原创 2022-10-10 16:30:40 · 1790 阅读 · 0 评论 -
18. Android MultiMedia框架完全解析 - OpenMAX介绍
OpenMAX IL API通过C语言致力于打造可移植媒体组件的阵列平台。这些组件可以是来源(source)、汇出(sink)、编解码器(codec)、过滤器(filter)、分离器(splitter)、混频器(mixers),或任何其他操作。OpenMAX IL API允许用户加载,控制,连接和卸载各个组件。Android主要的多媒体引擎StageFright是通过IBinder使用Open...原创 2022-10-10 16:23:25 · 3100 阅读 · 4 评论 -
17. Android MultiMedia框架完全解析 - MediaClock分析与音视频同步
这里的代码分析流程就是《15. Android MultiMedia框架完全解析 - Render流程分析》中的代码流程,上次主要关注的是buffer的交互流程,这次主要分析的是音视频同步,即AVsync。(一)音视频同步概念与方法音视频同步是一个播放器要处理的基本问题,音视频同步的好坏直接影响到播放效果。解码后的音频片段和视频片段,都分别带有 pts 时间戳信息。回放时需要做的...原创 2019-04-01 21:28:45 · 5473 阅读 · 1 评论 -
16. Android MultiMedia框架完全解析 - ACodec详细解析
之前的文章中,已经多次分析过ACodec,但是我仍然认为有必要单独拿出来一节分析其中的一些机制与流程,下面先来看看ACodec在整个NuPlayer架构中的位置:1、ACodec消息机制:ACodec有一个BaseState和派生出来的其他State,如 UninitializedState,LoadedToIdleState, ExecutingState等。当有消息过来时,如果派生...原创 2019-04-01 21:18:40 · 6454 阅读 · 2 评论 -
15. Android MultiMedia框架完全解析 - Render流程分析
先来看Render在NuPlayer框架中所处的位置:Renderer的作用就是根据传过来数据帧的时间来判断这一帧是否需要渲染,并进行音视频的同步。但是真正硬件渲染的代码在MediaCodec和ACodec中。Renderer的位置是在NuPlayerDecoder后面,他俩之间的交互是从NuPlayer::Decoder::handleAnOutputBuffer()函数开始的...原创 2019-04-01 21:11:58 · 3936 阅读 · 0 评论 -
14. Android MultiMedia框架完全解析 - NuPlayerDecoder与MediaCodec的交互
上一篇文章中详细分析了MediaCodec,以及由它向下的内容,但是在MediaCodec外面包裹的是一层NuPlayerDecoder,这里就看看它们两者之间是如何沟通的。从理论上来讲,既然NuPlayerDecoder包裹在MediaCodec外层,所以它相对于MediaCodec也可以理解为App,它调用MediaCodec的API来完成一些任务。下面就详细看看这个流程:1. ...原创 2019-04-01 21:10:11 · 3504 阅读 · 0 评论 -
13. Android MultiMedia框架完全解析 - MediaCodec解析
MeidaCodec API: https://developer.android.com/reference/android/media/MediaCodecMediaCodec是一个Codec,通过硬件加速解码和编码。它为芯片厂商和应用开发者搭建了一个统一接口。MediaCodec几乎是所有安卓播放器硬解的标配,要深入分析一个播放器的源码,如NuPlayer, ijkplayer,有必要了...原创 2019-04-01 21:08:23 · 9432 阅读 · 1 评论 -
12. Android MultiMedia框架完全解析 - 从NuPlayer到MediaCodec到ACodec到OMX的整体流程与状态转换
之前的文章中,讲了那么多细节的东西,已经对概况没有一个大致的了解,所以这里缕一下整体的流程,同时也分析MediaCodec,ACodec与OMX Plugin之间的状态切换关系。(一)初始化过程(从NuPlayer开始):1. NuPlayer::start()时产生一个kWhatStart,在消息处理函数中如果是暂停后的开始就调用NuPlayer::onResume()【只需m...原创 2019-04-01 21:05:19 · 9879 阅读 · 10 评论 -
11. Android MultiMedia框架完全解析 - start流程分析
还是从mediaplayer.cpp开始分析,看start函数的实现:status_t MediaPlayer::start(){mPlayer->setLooping(mLoop); mPlayer->setVolume(mLeftVolume, mRightVolume); mPlayer->setAuxEffectSendLevel(mSendLe...原创 2019-04-01 20:59:57 · 3193 阅读 · 1 评论 -
10. Android MultiMedia框架完全解析 - MediaExtractor::Create函数的解析和FslExtractor分析
先来看看MediaExtractor所处的位置:(一)创建流程在GenericSource.cpp的NuPlayer::GenericSource::initFromDataSource()函数中调用了:extractor = MediaExtractor::Create(mDataSource, mimeType.isEmpty() ? N...原创 2019-04-01 20:53:54 · 2751 阅读 · 2 评论 -
9. Android MultiMedia框架完全解析 - MediaExtractor和MediaMuxer介绍
MediaExtractor API: https://developer.android.com/reference/android/media/MediaExtractorAndroid中Native层抽象出来MediaMuxer类和MediaExtractor类,MediaMuxer类主要用于将音频和视频数据进行混合生成多媒体文件(如:mp4文件),而MediaExtractor则...原创 2019-03-31 13:19:23 · 2931 阅读 · 0 评论 -
8. Android MultiMedia框架完全解析 - prepareAsync的过程分析
还是从mediaplayer.cpp文件开始分析:status_t MediaPlayer::prepareAsync(){ ALOGV("prepareAsync"); Mutex::Autolock _l(mLock); return prepareAsync_l();}基本没做什么,设置了一个自动锁,然后就直接跳到MediaPlayer::prepare...原创 2019-03-31 13:14:33 · 2519 阅读 · 0 评论 -
7. Android MultiMedia框架完全解析 - ALooper-AHandler-AMessage机制分析
先来看整个框架图:NuPlayer基于Stagefright的基础类构建,使用了更底层的ALooper-AHandler-AMessage机制来异步处理消息。AMessage作为一个消息载体,保存这与这个消息有关的信息;ALooper是一个循环,它运行着一个后台线程,来循环处理接收到的消息(将信息转给AHandler来处理,它相当于一个中转站);AHandler作为一个句柄,它...原创 2019-03-31 13:04:35 · 3416 阅读 · 0 评论 -
6. Android MultiMedia框架完全解析 - NuPlayerDriver与NuPlayer的通信
先解决NuPlayer与NuPlayerDriver的通信过程,在之前的文章中,都说了NuPlayerDriver是NuPlayer的一个Wrapper,上层的指令发送给NuPlayerDriver后,NuPlayer作为NuPlayerDriver的一个成员变量,NuPlayerDriver想调用NuPlayer的话,就相当简单。当NuPlayer完成一个指令后,如何通知NuPlayerDriv...原创 2019-03-31 12:59:06 · 2884 阅读 · 2 评论 -
5. Android MultiMedia框架完全解析 - 再谈Playback框架及一些学习方法的讨论
经过前面的分析,我们大概知道了一些概念,但是这个StageFright在整个playback的位置是什么样的:Android Media这一块的知识杂乱,而且有深度,有广度。深度的话,从app->JNI->C++->底层的OMX驱动,广度的话,每个播放器在播放的时候,会执行seek操作,快进,快退,暂停等等操作,同时,需要涉及读取源文件(从网络读取,从文件读取),解码(软...原创 2019-03-31 12:53:53 · 3579 阅读 · 1 评论 -
4. Android MultiMedia框架完全解析 - MediaPlayerFactory中OMX_Player的实现
这里的实现,可以参照C++设计模式中的工厂模式,:http://blog.youkuaiyun.com/wuzhekai1985/article/details/6660462这里插讲一下厂商定制Player的过程,可以参考NuPlayer的创建过程,通过这个过程,也能够对MediaPlayerFactory类有个比较深入的理解。(这里需要注意,代码是KK442版本的,FSL在那个版本使用OMX...原创 2019-03-31 12:42:17 · 3368 阅读 · 0 评论 -
3. Android MultiMedia框架完全解析 - setDataSource继续分析
在上一节中,我们分析到从服务端返回后,函数的执行流程(NO_ERROR != player->setDataSource(fd, offset, length)))这里继续执行,从服务端返回后,这个player就对应的是MediaPlayerService::Client,同时需要注意的是,在《Android中C/S架构以及C++层调用步骤分析》中介绍了创建了一个IMediaPlay...原创 2019-03-31 12:34:18 · 4025 阅读 · 2 评论 -
2. Android MultiMedia框架完全解析 - MediaPlayer的C/S架构与Binder机制实现
在Android中大量使用到了C/S架构来实现应用层和底层服务交互,而Binder机制无处不在。同样MediaPlayer也使用了这种机制,MediaPlayer在运行的时候,同样可以分为Client/Server两个部分,他们分别在不同的进程中运行,不同进程间的通信使用Binder机制,我们这里就以setDataSource()为例,讲解一下他们是如何建立关系的,架构图如下:1)...原创 2019-03-31 12:27:14 · 4688 阅读 · 1 评论 -
1. Android MultiMedia框架完全解析 - 从开机到MediaServer的注册过程
Android的App一般是用java写的,大致流程如下:MediaPlayer mediaPlayer = new MediaPlayer();mediaPlayer.setOnCompletionListener(new OnCompletionListener() {@Overridepublic void onCompletion(MediaPlayer mp){mediaP...原创 2019-03-31 12:10:05 · 9427 阅读 · 3 评论 -
Android MultiMedia框架完全解析 - 概览
之前的工作中,一直在看Android MultiMedia的一些东西,关注我博客的同学也许知道我换工作了,以后将要从事Camera相关的工作,于是乎,将之前整理存放在有道云笔记里面的一些东西发出来,整理成一个专栏。工作的环境为Android N7.1,基于fsl公司的i.MX6q平台。当然,有很多东西是我自己的领悟,有不对的地方欢迎大家指正。在公司内部做了一个ppt分享,但...原创 2019-03-31 11:37:52 · 8621 阅读 · 17 评论