1.渲染处理
这里所说的渲染处理主要是从相机中采集的数据进行二次处理也就是常说的美颜(美颜的概念值通过一定的算法对原始数据图像进行二次处理并强化图像效果,不限于去掉不协调边缘/边缘检测等),市面上比较好的美颜厂商有商汤/FaceUnity等,而自己做美颜封装,可用的开源库主要是GPUImage

GPU工作原理指图像运算工作的微处理器,GPU主要利用显卡对图像的顶点坐标,通过图元组配进行光栅化/顶点着色/片元着色等一系列管线操作

OpenGl ES(开源嵌入式图像处理框架)它是一套图形与硬件的接口,用于把处理好的图像显示到屏幕上

GPUImage是一个基于OpenGL ES 2.0 的图像和视频处理的宽平台框架,提供多样的图像处理滤镜,支持相机和摄像机实时滤镜,内置超百种滤镜效果,且能够自定义图像处理,而滤镜处理的原理就是把静态图像或视频的每一帧进行图形变换后显示出来,它的本质是像素点的坐标和颜色变化

下面简单介绍下GPUImage处理画面的原理:
GPUImage采用链式处理画面,通过addTarget函数为链条添加每一个环节对象,处理完一个target就会把上个环节处理好的图像数据传递给下一个target去处理,这被称为GPUImage处理链.如:墨镜原理,从外界传来光线,会经过墨镜过滤,再传给我们的眼睛,这样我们就能感受到大白天也会乌黑一片了
一般的target可分为两类,一种是中间环节的target,一般是各种滤镜,即GPUImageFliter或其子类,另一种是最终环节的target,GPUImageView用于显示到屏幕上,或者是GPUImageMovieWriter,写成视频文件
GPUImage处理主要分为3个环节,即Source(图像/视频源)->filter(滤镜)->finaltarget(处理后的图像/视频).
GPUImage的Source都继承自GPUImageOutput的子类,作为GPUImage的数据源,就好比外界的光线,作为眼睛的输出源.Source包括如下几种:
*GPUImageVideoCamera : 用于实时拍摄视频
*GPUImageStillCamera : 用于实时拍摄照片
*GPUImagePicture : 用于处理已经拍摄好的图像.如png/jpg文件
*GPUImageMovie : 用于处理已经拍摄好的视频.如mp4文件
GPUImage的filter一般是GPUImageFliter类或者其子类,这个类继承自GPUImageOutput,且遵守GPUImageInput协议,这样既能流进又能流出.好比墨镜,光线经过墨镜的处理,最终进入我们的眼睛
GPUImage的finaltarget一般是GPUImageView/GPUImageMovieWriter,这就好比我们的眼睛,最终的输入目标
如果想更多的研究美颜,可以好好研究下GPUImage

2.编码数据
2.1:视频编码的意义
视频编码就是通过特定的压缩技术,将某个视频格式文件转换成另一种视频格式文件的方式,这里重点考虑的是压缩,如一个普通文件太大时,可以用一些压缩工具压缩后传输,以提高效率视频压缩也一样,采集到的数据一般较大,经过H.264编码压缩后,体积就会减小很多,这样在传输过程中可以节省很多网络带宽资源

2.2:压缩处理
这里很重要,有时候伙伴们会有疑问,为什么巨大的视频可以压缩成很小的视频呢?这其中办函的技术有哪些呢?其核心思想就是去除冗余信息
(1)空间冗余,在很多图像数据中,像素在行/列方向上都有很大的相关性,相邻像素的值比较接近或者完全相同,这种数据就是空间冗余
(2)时间冗余,在视频图像序列中,相邻两帧的图像数据有很多共同的地方,这种共同性被称为时间冗余(可采用动态补偿算法来去掉冗余信息,这也就是现在为什么有支持动态补偿的电视价格会比较贵的原因)
(3)视觉冗余,视觉冗余是相对于人眼的视觉特性而言,人类的视觉系统对图像的敏感性是非均匀和非线性的,即人严管查不到的图像中所有变化
(4)信息熵冗余,信息熵指一组数据所携带的信息量,信息熵冗余指数据所携带的信息量少于数据本身,从而反映出数据冗余
(5)结构冗余,在有些图像的纹理区,图像的像素值存在着明显的分布模式
(6)知识冗余,对许多图像的理解与某些先验知识有相当大的相关性,这类规则的结构可由先验知识和背景知识得到,此类冗余称为知识冗余

2.3:常用研所编码方法分类

常用压缩编码方法如图

android studio 调试GPU渲染 安卓gpu渲染程序_滤镜


我们常说的I帧P帧就分别采用的帧内编码和帧间编码,而这两者之间除了第一步不同其余相同

帧内编码:

(1)帧内预测:去除时间冗余

(2)变换:去除空间冗余

(3)量化:去除视觉冗余/有损压缩

(4)熵编码:去除编码冗余

帧间编码:

(1)帧间预测:去除时间冗余

(2)变换:去除空间冗余

(3)量化:去除视觉冗余/有损压缩

(4)熵编码:去除编码冗余

除了空间冗余和时间冗余的压缩,主要还有编码压缩和视觉压缩,以上就是一个编码器的主要工作流程