我正在编写一个应用程序,在用户按下按钮后每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...
})
}
}
答案 0 :(得分:0)
我最好的选择是.captureStillImage异步是异步的,它仍然访问共享资源,因此很可能会有一个内部互斥锁,阻止你如此快速地调用它,以至于它会在执行时重叠。我认为你的相机在跟上0.1秒的火速时遇到了问题。