Ошибка сканирования QRCode, затем считывание кода с экрана телефона - PullRequest
0 голосов
/ 11 апреля 2019

Я использую приведенный ниже код для сканирования QRCode и BarCode, и он работает хорошо, когда я сканирую код с экрана ноутбука и любой код печати на бумаге, он работает быстро. но когда я сканирую с любого другого мобильного устройства, такого как телефон Android, оно не сканируется быстро.

scanRect = CGRectMake(scanRect.origin.y/windowSize.height, scanRect.origin.x/windowSize.width, scanRect.size.height/windowSize.height,scanRect.size.width/windowSize.width);
 self.device = [AVCaptureDevice defaultDeviceWithMediaType:AVMediaTypeVideo];
    self.input = [AVCaptureDeviceInput deviceInputWithDevice:self.device error:nil];

    self.output = [[AVCaptureMetadataOutput alloc]init];
    [self.output setMetadataObjectsDelegate:self queue:dispatch_get_main_queue()];


    self.session = [[AVCaptureSession alloc]init];
    [self.session setSessionPreset:([UIScreen mainScreen].bounds.size.height<500)?AVCaptureSessionPreset640x480:AVCaptureSessionPresetHigh];

    AVCaptureDevice            *frontDevice;
    AVCaptureDeviceInput       *frontDeviceInput;
    for (AVCaptureDevice *device in [AVCaptureDevice devicesWithMediaType:AVMediaTypeVideo]) {
        if (device.position == AVCaptureDevicePositionFront) {
            frontDevice = device;
        }
    }

    if (frontDevice) {
        frontDeviceInput = [AVCaptureDeviceInput deviceInputWithDevice:frontDevice error:nil];
    }

        [_session addInput:frontDeviceInput];

        [self.session addOutput:self.output];

    self.output.metadataObjectTypes=  self.output.availableMetadataObjectTypes;//@[AVMetadataObjectTypeQRCode,AVMetaObject];
    self.output.rectOfInterest = scanRect;

    self.preview = [AVCaptureVideoPreviewLayer layerWithSession:self.session];
    self.preview.videoGravity = AVLayerVideoGravityResizeAspectFill;
    self.preview.frame = CGRectMake(0, 0, _scanView.frame.size.width, _scanView.frame.size.height); //[UIScreen mainScreen].bounds;
    self.previewLayerConnection=self.preview.connection;
    if ([self.previewLayerConnection isVideoOrientationSupported])
    {

        self.previewLayerConnection.videoOrientation = [self videoOrientationFromCurrentDeviceOrientation];

    }

  [self.scanView.layer insertSublayer:self.preview atIndex:0];
  [self.session startRunning];
...