Android 午王
文章平均质量分 55
求闲
这个作者很懒,什么都没留下…
展开
-
Android MediaCodec踩坑笔记
关于编解码,FFMpeg不香吗,为什么要吊死在Android的MediaCodec上?对于这个问题,我也很无奈,FFMpeg很香,但是因为包体积、效率等问题引发的工作业务的需要,使我不得不在Android MediaCodec的摧残下苟且偷生。MediaCodec的api比较简单,用来写demo毫无难度,让人痛不欲生的是它的兼容性问题。使用MediaCodec遇到的问题,往往都是和机型、版本、某类媒体文件相关的问题。从开始使用MediaCodec到现在,遇到了许多问题,很多解决了后过了许久又忘记了,这篇博客原创 2020-05-10 17:14:29 · 13796 阅读 · 7 评论 -
Android OpenGLES2.0(十七)——球形天空盒VR效果实现
在3D游戏中通常都会用到天空盒,在3D引擎中也一般会存在天空盒组件,让开发者可以直接使用。那么天空盒是什么?天空盒又是如何实现的呢?本篇博客主要介绍如何在Android中利用OpenGLES绘制一个天空盒,并实现VR效果。天空盒、天空穹、天空球和VR虽然大多数人知道这些东西是啥,但是我觉得我还是有必要把他们的定义“搬”过来,万一有人不知道呢。天空盒(Sky Box)是放到场景中的一个立方体,经常是原创 2017-05-29 17:44:23 · 17372 阅读 · 25 评论 -
Android OpenGLES2.0(十三)——流畅的播放逐帧动画
在当前很多直播应用中,拥有给主播送礼物的功能,当用户点击赠送礼物后,视频界面上会出现比较炫酷的礼物特效。这些特效,有的是用粒子效果做成的,但是更多的时用播放逐帧动画实现的。在本篇博客中的动画素材,就是从花椒直播中“借”出来的,只做学习交流用,应该不构成侵权吧?那么如何实现这种动画效果呢?逐帧动画的实现方案分析有些朋友看到逐帧动画可能会想,逐帧动画还不容易吗?Android中的动画本来就支持原创 2016-12-25 22:35:23 · 14140 阅读 · 22 评论 -
Android FFMPeg(二)——FFMpeg+libx264编译
前面博客Android FFMpeg(一)——编译FFmpeg中记录了在windows中利用MinGW和Msys编译FFMpeg的步骤。FFMpeg中带有264的解码,没有264的编码,需要编码功能的话,可以使用x264这个库。准备编译环境win10 中内置了Linux子系统,使用win10的话,可以开启linux子系统的功能,就不需要去安装MinGW和Msys之类的软件了。开启方法也很简单:第一步原创 2017-02-18 18:02:13 · 4218 阅读 · 2 评论 -
Android Camera API/Camera2 API 相机预览及滤镜、贴纸等处理
Android Lollipop 增加了Camera2 API,并将原来的Camera API标记为废弃了。相对原来的Camera API来说,Camera2是重新定义的相机 API,也重构了相机 API 的架构。初看之下,可能会感觉Camera2使用起来比Camera要复杂,然而使用过后,你也许就会喜欢上使用Camera2了。无论是Camera还是Camera2,让相机遇到OpenGL就比较好玩原创 2017-03-14 23:22:20 · 25161 阅读 · 30 评论 -
Android OpenGLES2.0(七)——着色器语言GLSL
在前面的博客中,我们都使用到了片元着色器和顶点着色器,相信我们对着色器语言有了一点了解。前面我们所使用的着色器,代码非常简单,能做的事情非常有限,而在后面的博客中我们将会用到的着色器的越来越复杂,所以在这里单独写一篇博客来介绍我们使用到的着色器语言GLSL。关于着色器 着色器是用来实现图像渲染的,用来替代固定渲染管线的可编程程序。着色器替代了传统的固定渲染管线,可以实现3D图形学计算中的相关计算原创 2016-10-16 16:07:23 · 19926 阅读 · 6 评论 -
Android OpenGLES2.0(八)——纹理贴图之显示图片
前面几篇博客,我们将了Android中利用OpenGL ES 2.0绘制各种形体,并在上一篇博客中专门讲了GLSL语言。但是我们看到的基于OpenGL开发的应用和游戏,可不仅仅是那些规则形体和一些简单的色彩构成,而是各种不规则的形体构成了现实世界或者卡通世界的人和事物,他们都是外面穿着漂亮“衣服”的。本篇博客就是来讲解这些“衣服”的基础的。这些衣服就是纹理贴图。什么是纹理贴图 一般说来,纹理是表原创 2016-10-23 01:15:49 · 33477 阅读 · 59 评论 -
Android视频编码——RGBA、RGB、BGRA、BGR转YUV420P、YUV420SP
做视频处理一般都会涉及到RGBA与YUV颜色格式的相互转换,理论知识就不多说了,直接贴出转换公式来: Y’= 0.299*R’ + 0.587*G’ + 0.114*B’ U’= -0.147*R’ - 0.289*G’ + 0.436*B’ = 0.492*(B’- Y’) V’= 0.615*R’ - 0.515*G’ - 0.100*B’ = 0.877*(R’- Y’)原创 2017-01-24 13:47:04 · 10675 阅读 · 18 评论 -
Android OpenGLES2.0(十五)——利用EGL后台处理图像
在Android OpenGLES2.0(十二)——FBO离屏渲染中,记录了采用FBO进行离屏渲染的方式来进行后台处理图像,但是在使用时,示例中还是用到了GLSurfaceView控件来提供GL环境。怎样完全抛开GLSurfaceView来进行图像处理呢?OpenGLES和EGL OpenGL(全写Open Graphics Library)是指定义了一个跨编程语言、跨平台的编程接口规格的专业的原创 2017-02-20 10:36:27 · 14374 阅读 · 13 评论 -
Android FFMpeg(三)——使用FFMpeg解码h264、aac
前面博客记录了FFMpeg的编译,编译后我们可以拿到FFMpeg的动态库和静态库,拿到这些库文件后,通常我们需要做个简单的封装才能在Android上层愉快的使用。本篇博客的是从拿到FFMpeg静态库到使用FFMpeg解码视频的过程,记录尽可能的详尽,可能会让博客的篇幅略长。准备工作库文件本篇博客的示例是利用FFMPeg静态库进行解码的,所以首先我们需要得到FFMpeg的静态库,编译可以参照之前的两篇原创 2017-04-13 21:02:51 · 8610 阅读 · 4 评论 -
GLSurfaceView的简单分析及巧妙借用
学习在Android中使用OpenGLES,就不得不提到一个控件:GLSurfaceView。本篇博客将介绍GLSurfaceView的基本使用、GLSurfaceView的源码的简单分析,以及使用GLSurfaceView渲染图像到SurfaceView/TextureView或者PBuffer上等。关于GLSurfaceViewGLSurfaceView继承了SurfaceView,实现了Sur原创 2017-06-25 14:59:39 · 26578 阅读 · 5 评论 -
Android Camera增加自定义图像处理并录制MP4
在我的一篇博客Android Camera API/Camera2 API 相机预览及滤镜、贴纸等处理中,介绍了如何给相机增加滤镜贴纸的方法,也就是自定义图像处理。而另外一篇博客Android硬编码——音频编码、视频编码及音视频混合介绍了一种编码录制MP4的方法,虽然两者结合就能实现Camera增加自定义图像处理并录制MP4的功能,但是实际上如果自定义的处理稍微复杂一些,或者录制720p或者1080原创 2017-10-03 14:19:28 · 4790 阅读 · 5 评论 -
Android利用硬解硬编和OpenGLES来高效的处理MP4视频
最近工作中遇到一个问题,就是要对视频增加视频特效,实现类似于抖音的效果,抖音的效果由其他同事实现,我的工作重心在视频的处理,特效的集成。按照之前的思路很快就实现了这个功能,但是实际应用到项目中时却遇到各种问题。于是就有了这篇博客。遇到的问题说是各种问题,特效方便的不管,我所遇到的视频处理的问题主要为以下两个方面:处理过程耗时较长。因为处理的时候是按照之前的思路,用MediaCod原创 2017-09-10 20:16:12 · 13791 阅读 · 13 评论 -
Android OpenGLES2.0(四)——正方形和圆形
上篇博客中我们已经使用到了相机和投影,利用变换矩阵,绘制出了等腰直角三角形。在本篇博客中,我们绘制正方形和圆形同样少不了变换矩阵。构建正方形和圆形前面提到过,在OpenGLES的世界里面是没有正方形和圆形的,只有点、线、三角形。三角形就是OpenGLES提供的最复杂的图元单位。所以我们要绘制填充的正方形和圆形就需要利用三角形来实现。正方形正方形的构建比较简单,可以用两个三角形组成。当然,你也可以用很原创 2016-10-14 22:11:23 · 13013 阅读 · 7 评论 -
Android OpenGLES2.0(十八)——轻松搞定Blend颜色混合
Blend是OpenGL中的一个非常重要的部分,它可以让每个输出的源和目的颜色以多种方式组合在一起,以呈现出不同的效果,满足不同的需求。原创 2017-08-03 10:37:43 · 15534 阅读 · 7 评论 -
Android Studio上C++开发——第一个JNI程序
Android Studio2.1 上进行NDK开发。原创 2016-07-09 14:10:09 · 4847 阅读 · 0 评论 -
RGBA、YUV色彩格式及libyuv的使用
最近一段时间因为工作的需要,要使用到libyuv。因为之前写录制视频的时候,也要用到rgb转yuv,自己结合网上的资料做了个实现,记录了点笔记,现在索性一起整理下。常用的色彩格式常见的色彩格式主要分为两类,一类是RGBA系列,一类是YUV系列。RGBA系列首先就是rgba系列的格式,RGBA色彩主要用于色彩的显示和描述。常见的有RGBA/ARGB/BGRA/ABGR/RGB/BGR。这些格式都比较好原创 2017-07-29 20:53:47 · 30135 阅读 · 14 评论 -
Android OpenGLES2.0(十六)——3D模型贴图及光照处理(obj+mtl)
在Android OpenGLES2.0(十四)——Obj格式3D模型加载中实现了Obj格式的3D模型的加载,加载的是一个没有贴图,没有光照处理的帽子,为了呈现出立体效果,“手动”加了光照,拥有贴图的纹理及光照又该怎么加载呢?模型文件本篇博客例子中加载的是一个卡通形象皮卡丘,资源是在网上随便找的一个。加载出来如图所示: obj内容格式如下:# Wavefront OBJ file# Expor原创 2017-02-27 22:53:41 · 13623 阅读 · 13 评论 -
Android 自定义WheelView
功能滚轮式选择View,类似于TimePicker、DataPicker,可以设置有无边界(首尾是否相接)原创 2016-03-25 14:23:08 · 10164 阅读 · 16 评论 -
Android硬编码——音频编码、视频编码及音视频混合
视频编解码对许多Android程序员来说都是Android中比较难的一个知识点。在Android 4.1以前,Android并没有提供硬编硬解的API,所以之前基本上都是采用FFMpeg来做视频软件编解码的,现在FFMpeg在Android的编解码上依旧广泛应用。本篇博客主要讲到的是利用Android4.1增加的API MediaCodec和Android 4.3增加的API MediaMuxer原创 2017-01-04 15:22:54 · 18005 阅读 · 23 评论 -
Android OpenGLES2.0(一)——了解OpenGLES2.0
什么是OpenGL ES? OpenGL(全写Open Graphics Library)是指定义了一个跨编程语言、跨平台的编程接口规格的专业的图形程序接口。它用于三维图像(二维的亦可),是一个功能强大,调用方便的底层图形库。OpenGL在不同的平台上有不同的实现,但是它定义好了专业的程序接口,不同的平台都是遵照该接口来进行实现的,思想完全相同,方法名也是一致的,所以使用时也基本一致,只需要根原创 2016-10-12 00:04:25 · 29363 阅读 · 19 评论 -
Android MediaPlayer+SurfaceView播放视频(附Demo)
MediaPlayer+SurfaceView播放视频,切入后台暂停播放,切换回来继续播放。运行暂停,暂停后切入后台,再切换回来,避免了黑屏问题。原创 2016-09-30 11:37:03 · 26726 阅读 · 23 评论 -
Android OpenGLES2.0(三)——等腰直角三角形和彩色的三角形
上一篇博客中我们已经绘制出了一个直角三角形,虽然我们相对于坐标,我们设置的直角三角形的两腰是相等的,但是实际上展示出来的却并不是这样,虽然通过计算,我们可以把三角形的两腰计算一下比例,使它们在坐标上不等,但是现实出来相等,但是当绘制的图形比较复杂的话,这个工作量对我们来说实在太庞大了。那么我们怎么做呢?答案是,使用变换矩阵,把计算交给OpenGL。矩阵 在数学中,矩阵(Matrix)是一个按照长原创 2016-10-14 18:06:31 · 15379 阅读 · 18 评论 -
Android Camera的使用(一)
在Api21中Camera类被废弃,取而代之的是camera2包。相对来说,camera2比Camera使用起来看似复杂了好多,但是在灵活性方面增加了很多。不过出于兼容性的考虑,加上当前Android设备5.0以下的占比还是比较大的,所以在相机开发的过程中,Camera类还是不得不掌握的。在本文中,讲解的是Camera的基本使用。而关于camera2的使用,在以后的文章中会单独再讲。拍照步骤添加相原创 2016-08-24 15:52:07 · 5825 阅读 · 5 评论 -
利用CursorLoader实现短信验证码自动填写
概述android上实现短信验证码自动填写,常用的有两种方式。一种是利用BroadCastReceiver,还有一种是监听手机上短信数据库的变化。利用BroadCastReceiver来实现会在一些情况下无效,最常见的就是手机上安装了具有垃圾短信拦截功能的软件的情况下,短信验证码自动填写无效。所以,现在一般会选用监听数据库内容变化的方式来实现短信验证码自动填写。 网上对于利用监听数据库内容变化来实原创 2016-07-21 12:12:43 · 1152 阅读 · 1 评论 -
Android 蓝牙4.0 Ble 连接Ble模块
不得不说,相对蓝牙3.0来说,蓝牙4.0的确是蓝牙的一个重大突破。至于具体的优点什么的,网上一搜就是一大堆,我也不去复制过来了。一直以来,对于我来说,写技术博客,就是贴代码(当然像我这样的懒人,写技术博客也是很少有的事情)。为什么呢?直接了当啊,可以不用想,把主要的代码段一贴,需要的人看到了这些代码,凭借着注释想来总是能看懂的。不过不得不承认,这种偷懒的方式,的确对于提升自己没什么帮助,估计能够给原创 2015-06-05 11:55:43 · 13008 阅读 · 5 评论 -
AsyncTask源码分析
为什么使用AsyncTask*异步任务(用Thread) *主线程和子线程通信(用Handler) *线程的销毁和创建也是要占用时间的,大量创建线程会导致应用性能降低。(用线程池) 源码分析1.从构造函数看起 public AsyncTask() { mWorker = new WorkerRunnable<Params, Result>() {原创 2016-04-17 20:30:21 · 740 阅读 · 0 评论 -
Android OpenGLES2.0(二)——绘制一个三角形
选择绘制三角形作为OpenGL ES 2.0的第一个实例,是因为前文中提到的,点、线、三角形是OpenGL ES世界的图形基础。无论多么复杂的几何物体,在OpenGL ES的世界里都可以用三角形拼成。关于Android OpenGL ES 三角形的绘制,在Android官方文档中有详细的说明和步骤,本文实例也是依照官方文档步骤绘制的三角形。步骤依照官方文档中的说明,Android中利用OpenGL原创 2016-10-12 22:50:54 · 23953 阅读 · 31 评论 -
Android OpenGLES2.0(五)——绘制立方体
上篇博客中我们提到了OpenGLES中绘制的两种方法,顶点法和索引法。之前我们所使用的都是顶点法,这次绘制立方体使用索引法来绘制立方体。构建立方体上篇博客讲到正方形的绘制,立方体是是由六个正方形组成,我们将这六个正方形绘制出来,立方体就绘制完毕了。既然选择用索引法来绘制,立方体拥有八个顶点,我们先将这八个顶点列出来,放到一个数组中:final float cubePositions[] = {原创 2016-10-15 00:19:54 · 13204 阅读 · 6 评论 -
Android OpenGLES2.0(六)——构建圆锥、圆柱和球体
之前的博客中,我们绘制了三角形、正方形、圆形、立方体,今天我们将绘制圆锥、圆柱和球体。能够绘制这些基本的常规几何形体后,其他的常见几何形体的绘制对于我们来说就基本没问题了。绘制圆锥由之前的博客,我们大家也应该都知道了,OpenGL ES2.0中物体的绘制重点就是在于把这个物体表面分解成三角形,分解成功后,绘制自然就不成问题了。圆锥我们很容易就能想到把它拆解成一个圆形和一个锥面,锥面的顶点与圆形的顶点原创 2016-10-16 00:45:35 · 10369 阅读 · 9 评论 -
Android OpenGLES2.0(十四)——Obj格式3D模型加载
在博主《OpenGLES系列》文章中,最开始的几篇讲的就是OpenGL世界中各种形体的构建,但是那些形体都是规则的简单形体,遇到复杂的形体,比如说一个人、一朵花,怎么办呢?自然是通过其他工具类似于Maya、3DMax等3D建模工具,做好模型导出来,然后用OpenGLES加载导出的模型文件。模型的加载大同小异,本篇博客是以Obj格式的3D模型为例。模型文件本篇博客例子中加载的是一个帽子,原创 2017-01-10 02:11:19 · 20542 阅读 · 20 评论 -
用RecyclerView实现移动应用中常见的列表菜单
在很多地方我们都会用到纵向列表样式的菜单,比如微信首页的我、发现页面,微博的首页的我页面,QQ的动态页面等等等等,大多数的应用中都会存在这样的页面。我们怎样实现这种页面比较好呢?布局方案完成这样的页面,常见的布局方案有: 1. 用ScrollView+LinearLayout很容易的暴力布局出来,但是这样得到的布局太固定了,如果条目多一点,加载起来很耗时。 2. 用ListVi原创 2016-12-19 00:38:25 · 2803 阅读 · 4 评论 -
Android OpenGLES2.0(十二)——FBO离屏渲染
之前的博客我们所做的示例都是直接渲染到屏幕上的,如果我们并不需要渲染到屏幕上,也就是离屏渲染,该怎么做呢?FBO离屏渲染是一个很好的选择。在这篇博客中,我们将以渲染摄像头数据为例,使用FBO进行离屏渲染。关于FBO离屏渲染所谓的FBO就是Frame Buffer Object。之前我们使用OpenGLES渲染,都是直接渲染到屏幕上,FBO可以让我们的渲染不渲染到屏幕上,而是渲染到离屏B原创 2016-12-24 18:36:06 · 30597 阅读 · 20 评论 -
Android OpenGLES2.0(十)——OpenGL中的平移、旋转、缩放
在前面的博客中,所有的例子都是一个对象,类似绘制圆锥绘制圆柱,我们都是传入一个参数,然后去控制那个圆面的位置,如果我们要绘制几个个正方形,它的位置、大小、方向都是不相同的,按照那种方式该多麻烦啊。所以我们需要更好的办法——矩阵变换。什么是矩阵其实在之前的博客中,我们也基本都用到了矩阵,投影的设置,就是根据参数生成一个4*4的矩阵,我们用长度为16的浮点型数组来存储,相机的设置也是如此。那么矩阵到底该原创 2016-11-14 01:27:09 · 19753 阅读 · 10 评论 -
Android ProGuard代码混淆
关于混淆 代码混淆(Obfuscated code)亦称花指令,是将计算机程序的代码,转换成一种功能上等价,但是难于阅读和理解的形式的行为。代码混淆可以用于程序源代码,也可以用于程序编译而成的中间代码。执行代码混淆的程序被称作代码混淆器。目前已经存在许多种功能各异的代码混淆器。众所周知,Java虽然是编译型的语言,但是由于Java编译后的字节码的抽象级别较高,因此它们较容易被反编译。为了防止我原创 2016-10-21 10:52:17 · 1784 阅读 · 1 评论 -
Android 仿QQ、新浪相册的实现
在移动应用中,很多时候都会用到图片选择、图片裁剪等功能。最近我也在准备一个开源的相册项目,以方便以后开发应用的时候使用,也尽可能的方便需要的人。一个完整的相册,应该包含相册列表、图片列表、图片的单选和多选、图片的裁剪、拍照、多选图片的大图预览等功能。这也是我这个项目将要包含的功能。在本篇博客中,将会讲述下我在这个项目中相册列表和图片列表的大致实现。实现效果结合几个常用的APP中的相册效果,当前项目中原创 2016-11-09 00:06:40 · 8294 阅读 · 0 评论 -
Android OpenGLES2.0(九)——利用OpenGL进行图片处理
在之前的博客中我们就有提过OpenGLES的常见应用范围,其中有一个就是图片的处理。为了保证效率,Android手机中许多美颜相机、图片处理应用,都用到了OpenGLES来处理图片。上一篇博客中,我们利用OpenGLES 显示出了一张图片,并保证图片正常显示,不会被拉伸和压缩。在本篇博客中,我们来了解下利用OpenGLES来处理图片的一些简单方法。相关原理本篇博客以简单的图片色彩处理、模糊和放大镜效原创 2016-10-23 17:57:21 · 16773 阅读 · 29 评论 -
Android 图片裁剪
在Android应用中,图片裁剪也是一个经常用到的功能。Android系统中可以用隐式意图调用系统应用进行裁剪,但是这样做在不同的手机可能表现出不同的效果,甚至在某些奇葩手机上还会出其他更奇怪的问题,所以调用系统功能进行图片裁剪在很多时候对我们来说并不是一个好的选择。这时候就需要我们自己去实现这种裁剪功能了。功能分析要完成图片裁剪的功能,我们需要先知道图片裁剪的功能有哪些。图片裁剪之前,我原创 2016-10-29 16:38:39 · 5844 阅读 · 4 评论 -
Android工具类:获取手机的文件夹及文件列表
使用方法:List> list=GetFilesUtils.getInstance().getSonNode(file); //或其他方法使用示例:package wuwang.mypage.activity;import java.io.IOException;import java.util.ArrayList;import java.util.Collections;imp原创 2014-12-01 16:30:52 · 8590 阅读 · 19 评论