Ios AVFoundation:进入摄影机视图时滞后
我已经成功地在我的应用程序中实现了QRCode扫描仪,一切都很好,性能也很好。然而,在我的应用程序的主屏幕上,当你按下按钮切换到实际的视图控制器进行扫描时,至少有750ms/1秒的延迟 以下是摄像头设置:Ios AVFoundation:进入摄影机视图时滞后,ios,objective-c,iphone,camera,avfoundation,Ios,Objective C,Iphone,Camera,Avfoundation,我已经成功地在我的应用程序中实现了QRCode扫描仪,一切都很好,性能也很好。然而,在我的应用程序的主屏幕上,当你按下按钮切换到实际的视图控制器进行扫描时,至少有750ms/1秒的延迟 以下是摄像头设置: - (void)setupCaptureSession { // 1 if (_captureSession) return; // 2 _videoDevice = [self frontCamera];//[AVCaptureDevice defaultDevice
- (void)setupCaptureSession { // 1
if (_captureSession) return;
// 2
_videoDevice = [self frontCamera];//[AVCaptureDevice defaultDeviceWithMediaType:AVMediaTypeVideo];
if (!_videoDevice) {
DDLogWarn(@"No video camera on this device!"); return;
}
// 3
_captureSession = [[AVCaptureSession alloc] init];
// 4
_videoInput = [[AVCaptureDeviceInput alloc] initWithDevice:_videoDevice error:nil];
// 5
if ([_captureSession canAddInput:_videoInput]) { [_captureSession addInput:_videoInput];
}
// 6
_previewLayer = [[AVCaptureVideoPreviewLayer alloc] initWithSession:_captureSession];
_previewLayer.videoGravity = AVLayerVideoGravityResizeAspectFill;
_metadataOutput = [[AVCaptureMetadataOutput alloc] init];
//dispatch_queue_t metadataQueue = dispatch_queue_create("org.iso.QRCode.metadata", 0);
dispatch_queue_t metadataQueue = dispatch_get_main_queue();
[_metadataOutput setMetadataObjectsDelegate:self queue:metadataQueue];
if ([_captureSession canAddOutput:_metadataOutput]) {
//DDLogNotice(@"WE ARE OUTPUTING METADATA!");
[_captureSession addOutput:_metadataOutput];
_metadataOutput.metadataObjectTypes = @[AVMetadataObjectTypeQRCode];
}
// [self startRunning];
}
此方法正在viewDidLoad
中激发,并且在视图中将出现fire[自启动]
(它刚刚启动相机会话)
这里最大的问题看起来像是dispatch\u queue\u t metadataQueue=dispatch\u get\u main\u queue();
是不是当我从上一个视图控制器启动segue时,主线程被阻止启动相机,并暂时阻止UI?最好在不同的线程中设置相机
编辑
我移动了[自启动耳轴]
到视图确实出现了
,这极大地帮助了segue延迟,但是在加载相机预览之前需要很长的一秒钟。有什么优雅的方法可以减少相机实时预览时间吗?你能解决这个问题吗?我也面临同样的延迟。@KunalShrivastava到目前为止,我使用的是完全相同的代码,并且在VIEWDID中,您正在执行[自启动滚动]。性能似乎非常出色,如果您还有任何问题,请告诉我,我们可以尝试解决它!我能够解决问题。非常感谢。