使用AV Foundation框架来实现实时滤镜

来源:互联网 发布:淘宝卖家不评论吗 编辑:程序博客网 时间:2024/05/19 12:13
         使用AV Foundation框架来实现实时滤镜


     UIImagePickerController处理的并不是原始摄像头数据,他是在原始数据被处理成图像后才开始访问。而AV Foundation能在原始数据变成图像之前就直接访问它,这就使得我们能够执行一些额外的暗箱操作,来实现实时滤镜的制作。


     AVCaptureSession用来控制输入设备(AVCaptureDeviceInput)视频图像到流入输出缓冲区(AVCaptureOutput)的过程。一旦AVCaptureSession启动以后,就会收集来自输入设备的信息,并在适当的时候将这些信息输出到数据缓冲区中。


     AVCaptureVideoPreviewLayer默认情况下会显示来自输入设备的原始数据,如果要实现实时滤镜或在这个图层上绘制额外的物体,那么就要冲视频输出缓冲区获取数据帧数据,并对其进行处理,处理完毕后可将像素数据输出到另一个图层或者OpenGL上下文中。


     AVCaptureConnection是一个类,用来在AVCaptureInput和AVCaptureOutput之间建立连接。AVCaptureSession必须从AVCaptureConnection中获取实际数据。


     相机实时效果制作过程:

创建一个新的AVCaptureSession;

设置对图像质量的预置值;

通过AVCaptureDevice来创建必要的输入捕捉设备如摄像头;

通过AVCaptureStillImageOutput或者AVCaptureVideoDataOutput来添加一个输出缓冲区;

建立AVCaptureVideoPreviewLayer(预览图层),并将他添加到视图控制器相关联的视图中,成为子视图;

启动AVCaptureSession;

获取一个AVCaptureConnection的引用,该链接位于AVCaptureInput和AVCaptureVideoDataOutput之间;

从AVCaptureVideoDataOutput中抓取单独帧的数据,然后将其显示在自己定制的预览图层中。


 总结:

  UIImagePickerController可以用于进行简单的媒体捕捉,通过设置属性sourceType和captureMode可以对UIImagePickerController进行简单的配置,让他以不同的分辨率捕捉静止图像或者视频。

     AVFoundation可以用来创建我们自己定制的捕捉解决方案,我们可以在帧数据刚刚从设备上捕捉到时就访问这些数据,而不用等到图像数据被最终确定之后,这就给我们提供相机实时效果以及其他的滤镜操作。


0 0