天天看点

AVFoundation之音视频采集(一)拍照、视频采集(H264)

访问摄像头先添在info 文件中添加 NSCameraUsageDescription key字段。

用AVFoundation做音视频采集,首先记住一张图。

AVFoundation之音视频采集(一)拍照、视频采集(H264)

这张图完全展示了 AVFoundation 是如何做音视频采集的。

1.首先创建一个AVCAaptureSeesion对象。

2.获取输入设备,输入设备指的是摄像机和麦克风。

获取输入设备是为了初始化输入会话(AVCaptureDeviceInput)。因为做视频采集,所以选择一个摄像头做输入设备。

[AVCaptureDevice defaultDeviceWithMediaType:AVMediaTypeVideo]
           

3.创建输入会话。

用上面得到的摄像头创建输入会话。self.activityCamera就是上面得到的摄像头

[[AVCaptureDeviceInput alloc] initWithDevice:self.activityCamera error:nil];
           

4.用AVCAaptureSeesion对象添加创建的输入会话。

[_session beginConfiguration];
    if ([self.session canAddInput:_captureInput]) {
        [self.session addInput:_captureInput];
    }
    [_session commitConfiguration];
           

5.创建输出

AVFoundation之音视频采集(一)拍照、视频采集(H264)

不同的输出有不同的作用

AVCaptureOutput是输出抽象类

AVCapturePhotoOutput用来捕捉静态图片,实时照片,但是他只有在iOS10+才能用。

AVCaptureDepthDataOutput 用来捕获摄像机设备上记录的场景深度信息在iOS11+才能用。

 AVCaptureVideoDataOutput 用来捕获视频帧数据。

AVCaptureFileOutput 捕获记录在文件的抽象类。

AVCaptureMetadataOutput 用来捕获二维码、条形码等信息

AVCaptureAudioDataOutput 捕获音频数据。

AVCaptureMovieFileOutput 捕获QuickTime电影数据。

AVCaptureAudioFileOutput 音频文件。

还有一个过时的AVCaptureStillImageOutput 它在iOS10被弃用了改为用AVCapturePhotoOutput,AVCaptureStillImageOutput是用来捕获照片的。

创建一个AVCaptureStillImageOutput用来捕捉静态图片。

- (void)captureStillImageAsynchronouslyFromConnection:(AVCaptureConnection *)connection completionHandler:(void (^)(CMSampleBufferRef _Nullable imageDataSampleBuffer, NSError * _Nullable error))handler;
           

拍照方法,在拍照方法的block中获取照片。

如果想要捕捉视频帧做编码,用AVCaptureVideoDataOutput 做输出。AVCaptureVideoDataOutput的delegate中有CMSampleBuffer,他是一种包含媒体数据的类型。也可以在其中做一些滤镜处理。

这是一个例子

继续阅读