AVCaptureSession startRunning首先使AVCaptureVideoPreviewLayer变黑

时间:2017-01-17 02:47:45

标签: ios avfoundation avcapturesession

最近,我正在iPhone上开发QR码识别。我使用AVFoundation框架。我使用 AVCaptureSession 连接AVCaptureDeviceInput和AVCaptureMetadataOutput并使用 AVCaptureVideoPreviewLayer 进行显示。 问题是,当AVCaptureSession startRunning时, AVCaptureVideoPreviewLayer首先变黑并逐渐恢复正常。问题是用户体验不佳。现在我使用GCD的dispatch_after()暂时解决这个问题。我知道还有其他解决方案。 因为AVCaptureSession的startRunning方法非常耗时,所以我在后台线程上调用startRunning()。我使用加载视图让用户等待AVCaptureSession启动。我观察“AVCaptureSessionDidStartRunningNotification”通知。但是当发布通知时,AVCaptureVideoPreviewLayer仍然是黑色的,并逐渐恢复正常。

dispatch_async(self.sessionQueue, ^{
            [_avSession startRunning];
            CGRect rectOfInterest = [_previewLayer metadataOutputRectOfInterestForRect:_config.rectOfInterest];
            _metadataOutput.rectOfInterest = rectOfInterest;
        }
    }
});

[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(avSessionDidStartRunning) name:AVCaptureSessionDidStartRunningNotification object:nil];

0 个答案:

没有答案