0

我正在尝试在前置摄像头上执行 AVCaptureSession 以读取 PDF417 条码,但它拒绝在前置摄像头上读取相同的条码,它在背面读取没有问题。是否有我遗漏的设置,或者它是否与出现“镜像”的前置摄像头有关?

我用二维码尝试了同样的事情,它在前后摄像头上都没有问题。

_session = [[AVCaptureSession alloc] init];

NSArray *videoDevices = [AVCaptureDevice devicesWithMediaType:AVMediaTypeVideo];
for( AVCaptureDevice *device in videoDevices )
{
    if( device.position == AVCaptureDevicePositionFront )
    {
        _device = device;
        break;
    }
}

//  couldn't find one on the front, so just get the default video device.
if( ! _device)
{
    _device = [AVCaptureDevice defaultDeviceWithMediaType:AVMediaTypeVideo];
}

// _device = [AVCaptureDevice defaultDeviceWithMediaType:AVMediaTypeVideo];

NSError *error = nil;

if( _device.isAutoFocusRangeRestrictionSupported )
{
    if( [_device lockForConfiguration:&error] )
    {
        [_device setAutoFocusRangeRestriction:AVCaptureAutoFocusRangeRestrictionNear];
        [_device unlockForConfiguration];
    }
}

_input = [AVCaptureDeviceInput deviceInputWithDevice:_device error:&error];
if (_input) {
    [_session addInput:_input];
} else {
    NSLog(@"Error: %@", error);
}

_output = [[AVCaptureMetadataOutput alloc] init];
[_output setMetadataObjectsDelegate:self queue:dispatch_get_main_queue()];
[_session addOutput:_output];

// _output.metadataObjectTypes = [_output availableMetadataObjectTypes]; _output.metadataObjectTypes = @[AVMetadataObjectTypePDF417Code ];

_prevLayer = [AVCaptureVideoPreviewLayer layerWithSession:_session];
_prevLayer.frame = self.view.bounds;
_prevLayer.videoGravity = AVLayerVideoGravityResizeAspectFill;
[self updatePreviewLayerForOrientation:[[UIApplication sharedApplication] statusBarOrientation] ];

[self.view.layer addSublayer:_prevLayer];

[_session startRunning];
4

0 回答 0