2012-07-27 11 views
8

Sto usando AVFoundation per visualizzare un video nel mio UIView tramite un AVCaptureVideoPreviewOverlay. Quindi utilizzare AVStillImageOutput's - captureStillImageAsynchronouslyFromConnection : per acquisire un'immagine statica dal video con la preimpostazione AVCaptureSessionPresetPhoto.Come faccio a mettere in pausa il video nel momento esatto in cui scatto una foto?

sto congelando il video utilizzando AVCaptureSession s' - stopRunning nel blocco di completamento - captureStillImageAsynchronouslyFromConnection accennato in precedenza. Tuttavia, è troppo tardi e il video continua a funzionare mentre viene scattata l'immagine fissa, quindi il congelamento è un secondo o due dopo. Quando visualizzo l'immagine, c'è un salto.

Come posso bloccare il video nel momento esatto in cui è stata scattata la foto?

+0

Esegui '-stopRunning' come la primissima azione nel tuo blocco di completamento? Altre operazioni in quel blocco potrebbero richiedere molto tempo, quindi vorrai che sia la prima cosa che accade lì dentro. –

+0

stopRunning è la primissima azione – user1130254

+0

Stai catturando i tuoi fotogrammi video sul thread principale o su un thread in background? –

risposta

1

Quasi un anno dopo ... Il tuo approccio è completamente sbagliato. Invece di provare a mettere in pausa il video nel preciso momento in cui l'immagine viene catturata, perché non mettere in pausa il video e quindi catturare quell'immagine in pausa. Per un utente non fa differenza, per uno sviluppatore non devi preoccuparti della precisione esatta.

Per reiterare la mia idea, se si mette in pausa un video e si attiva la visualizzazione bianca lampeggiante e si riproduce un clic, l'utente penserà di aver appena acquisito tale frame, indipendentemente dal fatto che lo si sia o meno. In realtà, puoi considerare di sospendere il video allo stesso modo di catturare un'immagine senza salvarla.