2012-07-27 37 views
8

Używam AVFoundation do wyświetlania wideo w moim UIView przez AVCaptureVideoPreviewOverlay. Następnie używam AVStillImageOutput 'scaptureStillImageAsynchronouslyFromConnection : do przechwytywania nieruchomego obrazu z wideo z presetem AVCaptureSessionPresetPhoto.Jak wstrzymać wideo dokładnie w momencie robienia zdjęcia?

jestem zamrożenie wideo za pomocą AVCaptureSession „s - stopRunning w bloku zakończenia - captureStillImageAsynchronouslyFromConnection wspomniano wcześniej. Jednak jest już za późno i wideo nadal działa, gdy zdjęcie jest zrobione, więc zamrożenie jest sekundę lub dwie później. Kiedy wyświetlam obraz, następuje skok.

Jak mogę zamrozić wideo w momencie, zdjęcie jest zrobione?

+0

Czy wykonujesz '-stopRunning' jako pierwszą akcję w twoim bloku ukończenia? Inne operacje w tym bloku mogą zająć znaczną ilość czasu, więc będziesz chciał, aby to była pierwsza rzecz, która się tam dzieje. –

+0

stopRunning to pierwsza czynność – user1130254

+0

Czy przechwytujesz swoje klatki wideo w głównym wątku lub wątku tła? –

Odpowiedz

1

Prawie rok później ... Twoje podejście jest złe. Zamiast próbować wstrzymać wideo dokładnie w momencie przechwytywania obrazu, nie zatrzymuj filmu, a następnie przechwytuj go. Dla użytkownika nie ma znaczenia, że ​​programista nie musi martwić się dokładnością.

Aby powtórzyć mój pomysł, jeśli wstrzymać wideo i migać biały wizualny i grać kliknij użytkownika pomyśli właśnie zdobyty tej ramki niezależnie od tego czy jesteś czy nie. Właściwie możesz rozważyć wstrzymanie wideo tak samo, jak przechwycenie obrazu bez jego zapisania.