captureStillImage在特定时间异步无法正常工作

时间:2017-03-13 20:47:47

标签: ios swift asynchronous avcapturesession

我正在编写一个应用程序,在用户按下按钮后每0.1秒拍摄一次图像。但是我无法在图像之间获得一致的0.1秒延迟。

这是因为captureStillImageAsynchronously是异步关闭吗?从capturePhoto切换到AVCapturePhotoOutput会解决此问题吗?以下是我的代码摘要。

var stillImageOutput : AVCaptureStillImageOutput?

// Button action.
 @IBAction func takeImage(_ sender: UIButton) {      
    //take 1 image every 0.1 seconds scheduled using a timer
    Timer.scheduledTimer(timeInterval: 0.1,
                        target: self,
                        selector: #selector(calldidPressTakePhoto),
                        userInfo: nil,
                        repeats: true)
}

// Take image
    func didPressTakePhoto(){

        if let videoConnection = stillImageOutput?.connection(withMediaType: AVMediaTypeVideo){

            videoConnection.videoOrientation = AVCaptureVideoOrientation.portrait

            //Capture image.  everything in this closure is ASYNCHRONOUS?
            stillImageOutput?.captureStillImageAsynchronously(from: videoConnection, completionHandler: {
                (sampleBuffer, error) in

                //Do something with the result image...

            })
        }
    }

1 个答案:

答案 0 :(得分:0)

我最好的选择是.captureStillImage异步是异步的,它仍然访问共享资源,因此很可能会有一个内部互斥锁,阻止你如此快速地调用它,以至于它会在执行时重叠。我认为你的相机在跟上0.1秒的火速时遇到了问题。