GPUImage简单实用及碰到的问题我

北京中科白癜风医院爱心传递 http://baijiahao.baidu.com/s?id=1700352152225524141&wfr=spider&for=pc

正式开始之前先介绍一下GPUImage,这是一款基于OpenGLES2.0的开源图像处理库。在iOS上将OpenGLES的使用封装成Objective-C接口,可以用来给图像、相机视频、视频等添加滤镜等渲染操作。GPUImage一代已经不再维护,OC只能给iOS和Mac使用;同时有GPUImage2使用Swift(基于Swift3)开发,可以给Mac,iOS和Linux使用;最新的GPUImage3仍在开发完善中,基于Swift4,并且将OpenGLES替换成苹果的Metal,由于是苹果官方封装GPU方法,可以预见会比使用OpenGLES的性能效率更高。本文使用的仍是第一代GPUImage。

接入GPUImage使用cocoapods直接接入就行,就不再赘述。下面是一个简单的滤镜使用:

GPUImage使用有三个关键点,input,output,filter(filter也是output但主要实现了滤镜,所以分开说)。output一般是用来承载图像内容输出,可以是GPUImageUIElement(通过UIView来创建并承载整个UIView的内容),GPUImagePicture(使用UIImage或者CGImage之类的图像来创建);filter就是所使用的滤镜,可以使用GPUImage自带的比如GPUImageGaussianBlurFilter,GPUImageColorInvertFilter等等,当然也可以自建Filter来实现一些自己所需要的滤镜,当然也需要一些OpenGL的功底;input则是内容输入需要GPUImage进行一些处理的,下面用一个MovieWriter进行视频和一个动态画面进行合成来举例:

使用中第一版没有提到声音问题所以没有发现,第二版需要使用视频原声音并录制进去,查了一下可以这样使用:

录制开始会有随机闪退问题,网上查了一下,大致是因为音频处理比视频处理快,当音频处理完直接callback去做渲染处理了,但这时视频这帧还没有加载完成,导致处理失败崩溃,网上有一个替换GPUImageMovieWriter.m源文件的方法来规避这个问题,但我尝试了一下仍然会发生,就不贴出来了。暂时也没有更好的办法来修复这个问题,由于时间紧迫,我采取只传递声音而取消写入视频中,使用ffmpeg进行音视频合成(或其他视频处理工具,因为本身项目有视频剪切使用了ffmpeg)。如果以后对这方面有更深入的了解和研究会继续更新如何解决这个问题。

PS:说个题外关于视频编码问题,腾讯家的qq和


转载请注明:http://www.aierlanlan.com/grrz/2552.html