我已经使用iOS 4和5中提供的AVFoundation框架实现了一个摄像头,但是captureStillImageAsynchronouslyFromConnection:completionHandler:
函数遇到一个不一致的问题,即从未调用完成处理程序块。在这种情况下,快门不会发出声音,并且预览会卡住。
我一直关注Apple(WWDC 2010和2011视频)和非Apple指南(博客和SO帖子),以照片分辨率实现静态图像捕获,几乎没有改善。在以下条件下,我已经能够在上保持一致的再现:AVCaptureFlashModeAuto
并在弱光下拍照,它会挂起并且永远不会运行完成模块。闪光灯闪光,但快门声不响。使用相同的代码,我可以在正常的光线下拍摄照片,在此情况下,快门声音会闪光,闪光灯不会闪光,并且补全程序会运行。 flashMode
或将其设置为off,则可以拍摄一些照片,但是在少量(通常在1到5之间)后,完成块将停止触发。为了澄清起见,方案可能是:
我的实现
我在ViewController中处理了接口(interface),并在单独的类中处理了所有AVFoundation内容。 ViewController中是处理AVFoundation内容的单独类的实例变量。它与示例实现不同,但是我不明白为什么它会引起这种偶尔的错误。
更多观测值[stillImageOutput isCapturingStillImage]
,它也将继续返回false并继续运行captureStillImageAsynchronouslyFromConnection
函数
我很想知道是否有什么我可能会丢失的东西,未设置的属性或已知的解决方法。
谢谢。
(我看到了类似的帖子,但是没有答案能解决我的问题。我在应用程序中需要Photo res。供引用:
iPhone SDK 4 AVFoundation - How to use captureStillImageAsynchronouslyFromConnection correctly?)
最佳答案
我应该添加代码,它可能会帮助任何人查看此代码,但是无论如何:
事实证明,相机Flash对异步处理某些东西时处理图像导致问题所花费的时间有足够大的影响。在从completionHandler块发送通知之前,我意外地结束了捕获 session 。
- (void) saveImageFromCamera {
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(imageCapturedFromCamera) name:@"FTW_imageCaptured" object:nil];
[cameraController captureStillImage];
// WRONG: Session was stopped here before
}
- (void) imageCapturedFromCamera {
[[NSNotificationCenter defaultCenter] removeObserver:self name:@"FTW_imageCaptured" object:nil];
[sharedAppController setBackgroundImage:[cameraController stillImage]];
sharedAppController.imageFromCamera = YES;
[self endCamera];
// CORRECT: Should have stopped session here
[self updateBackgroundImage];
}
我希望这可以帮助遇到这种情况的任何其他人。
关于objective-c - iOS AVFoundation CaptureStillImageAsynchronouslyFromConnection :completionHandler: Hanging Indefinitely,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/7749263/