//获取全部摄像头
NSArray *carmes = [AVCaptureDevice defaultDeviceWithMediaType:AVMediaTypeVideo];
//获取前置摄像头
NSArray *captureDeviceArray = [carmes filteredArrayUsingPredicate:[NSPredicate predicateWithFormat:@"position == %d", AVCaptureDevicePositionFront]];
if (!captureDeviceArray.count) {
NSLog(@"获取前置摄像头失败");
return;
}
//转化为输出设备
AVCaptureDevice *camera = captureDeviceArray.firstObject;
NSError *error = nil;
self.captureDeviceInput = [AVCaptureDeviceInput deviceInputWithDevice:camera error:&error];
if (error) {
NSLog(@"AVCaptureDevice转AVCaptureDeviceInput失败",error.description);
return;
}
复制代码
初始化视频输出并设置视频数据格式,设置采集数据回调线程。markdown
//设置视频输出
self.captureVideDataOutput = [[AVCaptureVideoDataOutput alloc] init];
//设置视频数据格式
NSDictionary *videoSetting = [NSDictionary dictionaryWithObjectsAndKeys:[NSNumber numberWithInt:kCVPixelFormatType_420YpCbCr8PlanarFullRange], kCVPixelBufferPixelFormatTypeKey, nil];
//设置输出代理,串行队列和数据回调
dispatch_queue_t outQueue = dispatch_queue_create("AVCaptureViewDataOutputQueue", DISPATCH_QUEUE_SERIAL);
[self.captureVideDataOutput setSampleBufferDelegate:self queue:outQueue];
self.captureVideDataOutput.alwaysDiscardsLateVideoFrames = YES;
复制代码