Ich schreibe eine Anwendung, die alle 0,1 Sekunden ein Bild aufnimmt, nachdem der Benutzer eine Taste drückt. Ich habe jedoch Probleme, eine konsistente Verzögerung von 0,1 Sekunden zwischen den Bildern zu bekommen.captureStillImageAsynchron zu bestimmter Zeit funktioniert nicht
Liegt das an der Tatsache, dass captureStillImageAsynchronously
asynchroner Abschluss ist? Würde das Problem von AVCapturePhotoOutput
auf capturePhoto
umgestellt werden? Hier ist eine Zusammenfassung meines Codes.
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...
})
}
}
Meine Vermutung wäre das asynchrone Problem, wie Sie vorgeschlagen haben. Wenn Sie asynchron ausführen, sagen Sie im Grunde, dass es Ihnen egal ist, wann der Code ausgeführt wird, sondern nur im Hintergrund. So werden Sie niemals gleichmäßig Zeitintervalle erhalten. –
Wie bei Ihrer zweiten Frage ruft 'capturePhoto' eine Delegate-Methode auf, also würde das leider auch nicht mit dem Timing übereinstimmen. – cuomo456