AVFoundation之摄像头

AVFoundation之摄像头_第1张图片
1.png

上图是使用捕捉功能时可能用到的一些类和它们的关系

捕捉会话捕捉设备

AVCaptureSession

管理类,连接输入输出

AVCaptureDevice

AVCaptureDevice 定义了大量的方法用于访问系统的捕捉设备(例如摄像头)提供了控制摄像头的对焦 白平衡 闪光灯....的方法。

捕捉输入AVCaptureDeviceInput

如最上图所示,AVCaptureDevice要装在一个AVCaptureDeviceInput里面才能添加到AVCaptureSession中
当创建AVCaptureDeviceInput对象的时候,系统会弹出警告框询问“是否允许使用摄像头”,这时候系统内部其实已经返回了一个AVCaptureDeviceInput对象,只是在用户同意之前,返回的是静音设备或者相机黑白帧,知道用户同意之后才正常工作。如果这时候用户点击不允许,则本次会话期间AVCaptureDeviceInput不会记录任何能容,下次重启app时候,AVCaptureDeviceInput创建时候会返回一个nil,然后就会收到NSError消息,这时候最好弹出一个提示框告诉用户。

捕捉输出AVCaptureStillImageOutput、 AVCaptureMovieFileOutput

如最上图所示,AVCaptureStillImageOutput和AVCaptureMovieFileOutput是抽象类AVCaptureOutput的高级扩展类,使用它们可以很容易的实现捕捉静态图片和视频的功能,也可以使用AVCaptureAudioDataOutput活着AVCaptureVideoDataOutput实现更高级也更底层的功能。

捕捉连接AVCaptureConnection

当把一个输入和输出添加到AVCaptureSession之后,
AVCaptureSession就会在输入、输出设备之间建立连接,而且通过AVCaptureConnection可以获取这个连接对象

捕捉预览AVCaptureVideoPreviewLayer

AVCaptureVideoPreviewLayer:相机拍摄预览图层,也是core animation的calayer子类,和AVPlayerLayer类似。能实时查看拍照或视频录制效 果,创建该对象需要指定对应的AVCaptureSession对象,因为AVCaptureSession包含视频输入数据,有视频数据才能展示。

最简单的demo

- (void)viewDidLoad {
    [super viewDidLoad];
    AVCaptureSession *session = [[AVCaptureSession alloc]init];
    AVCaptureDevice *devive = [AVCaptureDevice defaultDeviceWithMediaType:AVMediaTypeVideo];
    NSError *error = [NSError errorWithDomain:NSLocalizedDescriptionKey code:1 userInfo:@{@"info":@"出错了"}];
    AVCaptureDeviceInput *cameraInput = [AVCaptureDeviceInput deviceInputWithDevice:devive error:&error];
    if ([session canAddInput:cameraInput]) {
        [session addInput:cameraInput];
    }
    AVCaptureStillImageOutput *output = [[AVCaptureStillImageOutput alloc]init];
    if ([session canAddOutput:output]) {
        [session addOutput:output];
    }
    AVCaptureVideoPreviewLayer *layer = [AVCaptureVideoPreviewLayer layerWithSession:session];
    layer.frame = self.view.frame;
    [self.view.layer addSublayer:layer];
     [session startRunning];
}

使用以上概念可以做出一个最简单的显示摄像头画面的demo:


AVFoundation之摄像头_第2张图片
491DC701ABB666041F0ACC97DF20076D.jpg

你可能感兴趣的:(AVFoundation之摄像头)