- 博客(131)
- 资源 (9)
- 收藏
- 关注
原创 20. Android MultiMedia框架完全解析 - OMX组件解析与状态机简介
State类中会做一些常规的操作,而不同类中处理不同的状态类型转换,这句话是什么意思呢?参照上一篇文章中讲的OMX的使用例子,首先通过OMX_Init()函数来初始化OMX的环境,在这个函数中会去注册组件,注册content pipe,之后就会通过OMX_GetHandle()函数来构建组件,并获取这个组件的Handler,在这个函数中会通过上述的ConstructComponent()函数来构建组件,并通过SetCallbacks来设置组件的回调函数,此时就完成了组件的加载,状态为Loaded。
2022-10-10 16:42:26
2970
原创 19. Android MultiMedia框架完全解析 - 如何使用OpenMAX组件
Android MultiMedia框架完全解析 - 如何使用OpenMAX组件
2022-10-10 16:30:40
1776
原创 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
3040
4
原创 2019年终总结
这篇总结一直拖到2/27号才写, 希望能在2/29号之前写完吧, 啊哈哈哈.按照国际惯例, 肯定是先记录一年的流水帐~美好的日子总是过的很匆忙的, 依稀记得过完年后就正式开始离职流程了, 这一个月内好像没有啥新的工作要做了. 然后就开始了上班打卡, 下班打游戏的小日子, 过的也美滋滋. 大约过了两周后, 就感觉有些许的空虚, 想着以后不深入的多媒体方向了, 不总结一下, 感觉对不起自...
2020-04-01 08:05:00
1430
14
原创 17. Android MultiMedia框架完全解析 - MediaClock分析与音视频同步
这里的代码分析流程就是《15. Android MultiMedia框架完全解析 - Render流程分析》中的代码流程,上次主要关注的是buffer的交互流程,这次主要分析的是音视频同步,即AVsync。(一)音视频同步概念与方法音视频同步是一个播放器要处理的基本问题,音视频同步的好坏直接影响到播放效果。解码后的音频片段和视频片段,都分别带有 pts 时间戳信息。回放时需要做的...
2019-04-01 21:28:45
5442
1
原创 16. Android MultiMedia框架完全解析 - ACodec详细解析
之前的文章中,已经多次分析过ACodec,但是我仍然认为有必要单独拿出来一节分析其中的一些机制与流程,下面先来看看ACodec在整个NuPlayer架构中的位置:1、ACodec消息机制:ACodec有一个BaseState和派生出来的其他State,如 UninitializedState,LoadedToIdleState, ExecutingState等。当有消息过来时,如果派生...
2019-04-01 21:18:40
6429
2
原创 15. Android MultiMedia框架完全解析 - Render流程分析
先来看Render在NuPlayer框架中所处的位置:Renderer的作用就是根据传过来数据帧的时间来判断这一帧是否需要渲染,并进行音视频的同步。但是真正硬件渲染的代码在MediaCodec和ACodec中。Renderer的位置是在NuPlayerDecoder后面,他俩之间的交互是从NuPlayer::Decoder::handleAnOutputBuffer()函数开始的...
2019-04-01 21:11:58
3917
原创 14. Android MultiMedia框架完全解析 - NuPlayerDecoder与MediaCodec的交互
上一篇文章中详细分析了MediaCodec,以及由它向下的内容,但是在MediaCodec外面包裹的是一层NuPlayerDecoder,这里就看看它们两者之间是如何沟通的。从理论上来讲,既然NuPlayerDecoder包裹在MediaCodec外层,所以它相对于MediaCodec也可以理解为App,它调用MediaCodec的API来完成一些任务。下面就详细看看这个流程:1. ...
2019-04-01 21:10:11
3489
原创 13. Android MultiMedia框架完全解析 - MediaCodec解析
MeidaCodec API: https://developer.android.com/reference/android/media/MediaCodecMediaCodec是一个Codec,通过硬件加速解码和编码。它为芯片厂商和应用开发者搭建了一个统一接口。MediaCodec几乎是所有安卓播放器硬解的标配,要深入分析一个播放器的源码,如NuPlayer, ijkplayer,有必要了...
2019-04-01 21:08:23
9400
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
9853
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
3170
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
2731
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
2918
原创 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
2503
原创 7. Android MultiMedia框架完全解析 - ALooper-AHandler-AMessage机制分析
先来看整个框架图:NuPlayer基于Stagefright的基础类构建,使用了更底层的ALooper-AHandler-AMessage机制来异步处理消息。AMessage作为一个消息载体,保存这与这个消息有关的信息;ALooper是一个循环,它运行着一个后台线程,来循环处理接收到的消息(将信息转给AHandler来处理,它相当于一个中转站);AHandler作为一个句柄,它...
2019-03-31 13:04:35
3397
原创 6. Android MultiMedia框架完全解析 - NuPlayerDriver与NuPlayer的通信
先解决NuPlayer与NuPlayerDriver的通信过程,在之前的文章中,都说了NuPlayerDriver是NuPlayer的一个Wrapper,上层的指令发送给NuPlayerDriver后,NuPlayer作为NuPlayerDriver的一个成员变量,NuPlayerDriver想调用NuPlayer的话,就相当简单。当NuPlayer完成一个指令后,如何通知NuPlayerDriv...
2019-03-31 12:59:06
2871
2
原创 5. Android MultiMedia框架完全解析 - 再谈Playback框架及一些学习方法的讨论
经过前面的分析,我们大概知道了一些概念,但是这个StageFright在整个playback的位置是什么样的:Android Media这一块的知识杂乱,而且有深度,有广度。深度的话,从app->JNI->C++->底层的OMX驱动,广度的话,每个播放器在播放的时候,会执行seek操作,快进,快退,暂停等等操作,同时,需要涉及读取源文件(从网络读取,从文件读取),解码(软...
2019-03-31 12:53:53
3557
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
3346
原创 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
4006
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
4648
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
9354
3
原创 Android MultiMedia框架完全解析 - 概览
之前的工作中,一直在看Android MultiMedia的一些东西,关注我博客的同学也许知道我换工作了,以后将要从事Camera相关的工作,于是乎,将之前整理存放在有道云笔记里面的一些东西发出来,整理成一个专栏。工作的环境为Android N7.1,基于fsl公司的i.MX6q平台。当然,有很多东西是我自己的领悟,有不对的地方欢迎大家指正。在公司内部做了一个ppt分享,但...
2019-03-31 11:37:52
8573
17
原创 基于Android O8.1的ffmpeg NDK 开发 - 3 - CMakeList.txt解析
上两篇文章中,只是讲了APP如何创建,他们都使用到了同一个CMakeList.txt文件,但是没有仔细分析这个文件的作用,现在就仔细分析一下.首先什么是CMakeList.txt,它是一个构建工具CMake所使用的文件,CMake与Make工具类似,Make工具使用Makefile来确定编译规则,而CMake通过CMakeList来确定编译规则,这个CMakeList.txt就是CMake的构...
2018-07-30 15:18:05
702
原创 基于Android O8.1的ffmpeg NDK 开发 - 2 - APP显示ffmpeg所支持协议,编解码,过滤器,格式,配置等信息
我们今天的目标是仿照雷神的博客(https://blog.youkuaiyun.com/leixiaohua1020/article/details/47008825),把这个APP写出来,先上图:APP中有5个按钮,点击不同的按钮,会有不同的ffmpeg信息显示出来,分别是我们编译的ffmpeg所支持的协议,编解码器,过滤器,格式和配置等。 1. 新建Android Studio工程,参照上...
2018-07-30 09:56:21
510
原创 基于Android O8.1的ffmpeg NDK 开发 - 1 - Hello World!
很多做NDK开发的人(像我这样从底层转过来的 >_<!)对于Android app的开发不是很理解,而ffmpeg的NDK开发现在又离不开Andorid app。网上虽然教程虽多,但是很多过时或者与NDK开发需求的不契合,或者ffmpeg与Android Studio一直在更新,从而造成了很多困扰,故写此教程,希望用户可以直接从github上面拉下来就能编译使用,同时一步一步讲解...
2018-07-26 22:38:15
856
原创 第一次作为面试官的感悟
这几天有幸跟着老员工经历了一场校园招聘。遥想去年还是一个小小求职者,现在就要坐在桌子的对面,角色的转变,还是感触良多,就简单记下来。最近半年绝少写博客了,第一个原因当然是工作太忙了~ 显然,明白人都知道,这只是一句多么空洞敷衍的话。真实的原因恐怕是我懒了。。。第二个原因呢,是最近确实写了很多笔记,但是确实还没有整理成体系,安卓系统实在太大。第三,工作与在学校确实相差很大,不仅仅是角色的一个简单转变
2017-09-29 22:42:48
8757
2
原创 给校园招聘中应聘嵌入式程序员的几点建议
又快到了一年的校园招聘季节,俗话说金九银十,如果想要在金色的九月,收获颇丰,那么,从3月份开始准备面试笔试相关的部分,不算过分。当然,我并不是指现在从头学,等到九月份就可以轻轻松松的收获一个不错的offer,找工作其实是几年的积累。当然,如果问有什么技巧没?当然是有的,下面针对应聘嵌入式的同学简单说几点:1. 选择问题首先的一个问题是,很多同学还在纠结是去互联网公司好呢还是去嵌入式公司
2017-02-15 23:20:25
4469
原创 我的2016年终总结
眨眼之间,2016已经过去了。本来不想煽情,可是最近屡屡被虐,还是简单写写这一年的感触吧~~~2016年初,老师不让出去找实习,小论文没有发表,准确来说,有关小论文的研究根本就没有进行,可能连毕业都成问题的,自己还是毅然决然的准备去找实习。毕竟未来还是想找一个好工作的,自己也深知不是做学术的那块料,家里条件也不允许。正好NXP飞思卡尔招实习生呢,而且招聘的是linux底层驱动的实习生,我们学校
2017-01-12 23:17:53
1245
原创 7. GStreamer建议的学习步骤和网页链接汇总
学习步骤:0. 可以看看我做的《GStreamer讲解》ppt入门,里面对于很多知识的入门讲解,不用积分,下载链接:1. 学习《GStreamer中文开发手册.pdf》,这时候结合《GStreamer基础教程》和《GStreamer播放教程》来看;2. 如果想要深入理解应用开发的话,可以写一个项目试试手,参看《gstreamerMP3播放器项目》,网页链接为:http://spac
2016-10-30 10:16:18
6373
1
原创 6. Gobject 学习总结
简单的来说,GObject是一个程序库,它可以帮助我们使用C语言编写面向对象的程序。 很多人被灌输了这样一种概念:要写面向对象程序,那么就需要学习一种面向对象编程语言,例如C++、Java、C# 等等,而 C 语言是用来编写结构化程序的。事实上,面向对象只是一种编程思想,不是一种编程语言。换句话说,面向对象是一种游戏规则,它不是游戏。GObject 告诉我们,使用 C 语言编写程序时,可以
2016-10-30 10:13:43
4421
原创 5. gstreamer插件所用函数整理
gstreamer插件所用函数整理2016-10-06 08:30:46(一)设置插件属性相关的函数:(1) g_param_spec_boolean ()函数链接如下:https://developer.gnome.org/gobject/stable/gobject-Standard-Parameter-and-Value-Types.html GParamSpec
2016-10-30 10:05:47
3581
原创 4. gstimxv4l2src.c源码分析
由于这个文件中会调用到GStreamer 1.0 Core Reference Manual中的很多函数,但是如果将这些函数的分析放在代码分析中的话,就会严重影响可读性,于是将这些函数的讲解都放在《gstreamer插件所用函数整理》这个文件中,这两个文件中的标号都是相同的,如果遇到不理解的函数,可以去那个文件中搜索来看。 (一)属性相关的设置关于这一节,它对应《插件开发手册
2016-10-30 10:03:32
6016
原创 3. init函数和class_init函数的讲解
如何去使用GObject去构建一个所谓的“对象”呢?GObject中每个类要定义两个结构体,假设你要定义的类型为People,那么你要定义两个结构分别名为People和PeopleClass,估计刚接触的人会有些晕,一般的C++啊,JAVA什么的都是直接一个class了事儿了。但记住C本身并没有面向对象的机制,这里这样做也仅仅是为了模拟。 名为PeopleClass的结构是表示类的结构,而名为Pe
2016-10-30 09:34:24
6102
原创 2. gobject中G_DEFINE_TYPE和g_object_new流程简介
C语言如何实现gobject面向对象支持呢?很简单,我们只需要建立自己的头文件,并在 .c 文件中添加一个宏定义G_DEFINE_TYPE即可。 G_DEFINE_TYPE的流程(G_DEFINE_TYPE在 GLIB 的gobject/gtype.h 中定义):#define G_DEFINE_TYPE(TN, t_n, T_P) G_DEFINE_TYPE_EXTENDED (TN,
2016-10-30 09:27:29
7448
原创 1. 插件编写的原则及文件目录分析
gstreamer的相关路径,有两个路径,如下所示: fsl-release-bsp/build-x11/tmp/work/imx6qsabresd-poky-linux-gnueabi/gst1.0-fsl-plugin/4.0.8-r0/gst1.0-fsl-plugins-4.0.8 fsl-release-bsp/build-x11/tmp/work/cortexa9hf-...
2016-10-30 09:22:35
1672
1
转载 GObject 学习笔记汇总---15
转自: http://garfileo.is-programmer.com/2011/3/28/a-simple-example-for-gobject-introspection.25662.htmlGObject Introspection 的简单示例这段时间以来,一直在跟 GObject 死磕。除了有点枯燥与乏味之外,也没什么不适,就是一堆繁琐但还算是直观的 C 代码罢了
2016-10-18 19:43:10
1118
转载 GObject 学习笔记汇总---14
转自: http://garfileo.is-programmer.com/2011/4/4/gobject-signal-connection.25847.htmlGObject 信号机制——信号连接文档 [1,2] 讲述了 GObject 信号注册的相关细节,本文进一步分析信号与闭包的关联问题,即信号连接。事实上,在文档 [1,2] 中我们已对信号连接有
2016-10-18 19:34:59
819
转载 GObject 学习笔记汇总---13
转自: http://garfileo.is-programmer.com/2011/3/27/gobject-signal-extra-2.25621.htmlGObject 信号机制——信号 Accumulator在文档 [1] 中,从外围对 GObject 信号注册的过程进行了初步分析。生命不息,折腾不止,我们应当以 Adrian Hands 大叔为榜样。所以,本文
2016-10-18 19:33:49
912
转载 GObject 学习笔记汇总---12
转自: http://garfileo.is-programmer.com/2011/3/25/gobject-signal-extra-1.25576.htmlGObject 信号机制——信号注册上一篇文档“GObject 的信号机制”只是挖了一个坑便结束了,本篇尝试填坑,不过也不敢有所保证。因为我也不确定会不会因为被 GObject 的信号内幕再次搞晕。我们先老老实实的
2016-10-18 19:25:19
840
转载 GObject 学习笔记汇总---11
转自: http://garfileo.is-programmer.com/2011/3/22/gobject-deconstruction.25485.htmlGObject 子类对象的析构过程在“GObject 的信号机制”文中,谈到 GObject 子类对象的析构过程分为两个阶段,第一阶段是 dispose,第二阶段是 finalize。之所以划分成两个阶段而不是一步到位
2016-10-18 15:51:41
1286
Android MultiMedia框架完全解析
2019-03-31
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人