gpt4 book ai didi

objective-c - iOS AVFoundation captureStillImageAsynchronouslyFromConnection :completionHandler: Hanging Indefinitely

转载 作者:可可西里 更新时间:2023-11-01 03:52:59 25 4
gpt4 key购买 nike

我已经使用 iOS 4 和 5 中提供的 AVFoundation 框架实现了相机,但一直遇到 captureStillImageAsynchronouslyFromConnection:completionHandler: 函数的不一致问题,其中从未调用完成处理程序 block 。在这种情况下,不会发出快门声并且预览会卡住。

我遵循 Apple(WWDC 2010 和 2011 视频)和非 Apple 指南(博客和 SO 帖子)以照片分辨率实现静态图像捕获,但几乎没有改进。在以下条件下,我能够在某种程度上始终如一地重现:

  • 如果我将闪光灯设置为 AVCaptureFlashModeAuto 并在弱光下拍照,它会挂起并且永远不会运行完成 block 。闪光灯闪光,但不发出快门声。使用相同的代码,我可以在正常光线下拍照,快门声响起,闪光灯不响,完成 block 运行。
  • 如果我没有设置 flashMode 或将其设置为关闭,我可以拍一些照片,但在拍摄少量照片(通常在 1 到 5 之间)后,完成 block 停止触发。为了澄清,一个场景可能是:
    1. 拍照并在确认屏幕上查看
    2. 返回拍照屏幕
    3. 重复 1 和 2 几次
    4. 点击拍照,它会在完成 block 之前挂起。

我的实现

我在 ViewController 中处理接口(interface),并在单独的类中处理所有 AVFoundation 内容。处理 AVFoundation 内容的单独类的实例变量位于 ViewController 中。它与示例实现不同,但我不明白为什么它会导致这种偶然的错误。

更多观察

  • 即使在检查[stillImageOutput isCapturingStillImage]时,也会继续返回false,继续运行captureStillImageAsynchronouslyFromConnection函数
  • 如果我切换到另一个应用程序、锁定手机、在应用程序中执行某些其他操作,或者点击“拍照”按钮一百万次,我能够让完成 block 返回一个错误。它们因 Action 而异。常见的有11800、11801、11830,貌似跟挂不相关。
  • 我让我们的测试手机 (iPhone 4 GSM) 静置一个小时,看看它是否最终会处理。没有骰子。

我很想知道是否有我可能遗漏的东西、未设置的属性或需要解决的已知问题。

谢谢。

(我看到一个类似的帖子,但没有一个答案解决我的问题。我需要在应用程序中使用照片资源。供引用: iPhone SDK 4 AVFoundation - How to use captureStillImageAsynchronouslyFromConnection correctly? )

最佳答案

我应该添加代码,它可能会帮助任何人查看此内容,但无论如何:

事实证明,相机闪光灯对处理图像所需的时间有足够大的影响,从而在异步捕获某些内容时引起问题。在从 completionHandler block 发送通知之前,我不小心结束了捕获 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com