2017-03-13 3 views
0

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... 

      }) 
     } 
    } 
+0

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. –

+0

Wie bei Ihrer zweiten Frage ruft 'capturePhoto' eine Delegate-Methode auf, also würde das leider auch nicht mit dem Timing übereinstimmen. – cuomo456

Antwort

0

Meine beste Wette ist, dass während .captureStillImageAsynchronously asynchrone Ist es immer noch eine gemeinsame Ressource zugreift und damit sehr wahrscheinlich eine interne Mutex, die Sie daran hindert, es ruft so schnell, dass es in der Ausführung überlappen würden. Ich denke, dass deine Kamera Probleme mit deiner Feuerrate von 0.1s hat.

Verwandte Themen