//獲取全部攝像頭
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;
複製代碼