pragma mark - AV capture methods
- (void)setupCaptureSession {
// 1
if (_captureSession) return;
// 2
_videoDevice = [AVCaptureDevice
defaultDeviceWithMediaType:AVMediaTypeVideo];
if (!_videoDevice) {
NSLog(@"No video camera on this device!");
return;
}
// 3
_captureSession = [[AVCaptureSession alloc] init];
//高质量采集率
[_captureSession setSessionPreset:AVCaptureSessionPresetHigh];
// 4
_videoInput = [[AVCaptureDeviceInput alloc]
initWithDevice:_videoDevice error:nil];
//
// 5
if ([_captureSession canAddInput:_videoInput]) {
[_captureSession addInput:_videoInput];
}
// //新增自动对焦功能
// [_videoInput.device lockForConfiguration:nil];
// //自动平衡
// if ([_videoDevice isWhiteBalanceModeSupported:AVCaptureWhiteBalanceModeAutoWhiteBalance]) {
// [_videoInput.device setWhiteBalanceMode:AVCaptureWhiteBalanceModeAutoWhiteBalance];
// }
// //先进行判断是否支持d控制对焦,不开启自动对焦功能,很难识别二维码
// if (_videoDevice.isFocusPointOfInterestSupported && [_videoDevice isFocusModeSupported:AVCaptureFocusModeAutoFocus]) {
// [_videoInput.device setFocusMode:AVCaptureFocusModeContinuousAutoFocus];
// }
// [_videoInput.device unlockForConfiguration];
//新增自动对焦功能
// 6
_previewLayer = [[AVCaptureVideoPreviewLayer alloc]
initWithSession:_captureSession];
_previewLayer.videoGravity =
AVLayerVideoGravityResizeAspectFill;
// capture and process the metadata
_metadataOutput = [[AVCaptureMetadataOutput alloc] init];
dispatch_queue_t metadataQueue =
dispatch_queue_create("com.1337labz.featurebuild.metadata", 0);
// [_metadataOutput setMetadataObjectsDelegate:self
// queue:metadataQueue];
[_metadataOutput setMetadataObjectsDelegate:self
queue:dispatch_get_main_queue()];
if ([_captureSession canAddOutput:_metadataOutput]) {
[_captureSession addOutput:_metadataOutput];
}
//不加调焦距扫不出来
_metadataOutput.metadataObjectTypes = @[AVMetadataObjectTypeQRCode,AVMetadataObjectTypeCode39Code,AVMetadataObjectTypeCode93Code,AVMetadataObjectTypeCode128Code,AVMetadataObjectTypeCode39Mod43Code,AVMetadataObjectTypeEAN8Code,AVMetadataObjectTypeEAN13Code];
[_captureSession addObserver:self forKeyPath:@"running" options:NSKeyValueObservingOptionNew context:nil];
// [self autoJiaoju];
}
pragma mark --调焦距
// slider变动时改变label值
- (void)sliderValueChanged:(id)sender {
UISlider *slider = (UISlider *)sender;
// self.valueLabel.text = [NSString stringWithFormat:@"%.1f", slider.value];
//改变焦距 记住这里的输出链接类型要选中这个类型,否则屏幕会花的
CGFloat kCameraScale=slider.value;
[_videoDevice lockForConfiguration:nil];
[_videoDevice rampToVideoZoomFactor:kCameraScale withRate:1.0];
[_videoDevice unlockForConfiguration];
}
网友评论