iOS AVFoundation captureStillImageAsynchronouslyFromConnection: ЗавершениеHandler: Зависание на неопределенное время

I ' Мы реализовали камеру с использованием инфраструктуры AVFoundation, представленной в iOS 4 и 5, но столкнулись с несовместимой проблемой с функцией captureStillImageAsynchronouslyFromConnection: completionHandler: , при которой блок обработчика завершения никогда не вызывается. В этой ситуации звук срабатывания затвора не срабатывает, и предварительный просмотр останавливается.

Я следил как за руководствами Apple (видео WWDC 2010 и 2011), так и за руководствами сторонних разработчиков (блог и сообщения SO), чтобы реализовать захват неподвижных изображений с разрешением «Фото» практически без каких-либо улучшений. Мне удалось воспроизвести несколько стабильно в следующих условиях :

  • Если я установил вспышку на AVCaptureFlashModeAuto и сделал снимок при слабом освещении, он зависает и никогда не запускает завершение блокировать. Вспышка срабатывает, но звука срабатывания затвора нет. С помощью того же кода я могу сделать снимок при нормальном освещении, когда срабатывает звук срабатывания затвора, вспышка не работает и выполняется блок завершения.
  • Если я не установлю flashMode или отключу его, я могу сделать несколько фотографий, но после небольшого числа (обычно от 1 до 5) блок завершения перестает срабатывать.Для пояснения, сценарий может быть следующим:
    1. Сделать фото и просмотреть на экране подтверждения
    2. Вернуться, чтобы сделать снимок экрана
    3. Повторить 1 и 2 пару раз
    4. Нажмите сделать фото, и оно зависнет до завершения блока.

Моя реализация

У меня интерфейс обрабатывается в ViewController и отдельный класс для обработки всего материала AVFoundation. Переменная экземпляра отдельного класса, который обрабатывает материал AVFoundation, находится в ViewController. Он отличается от примеров реализации, но я не понимаю, почему он должен вызывать такие случайные ошибки.

Дополнительные наблюдения

  • Даже при проверке [stillImageOutput isCapturingStillImage] он будет продолжать возвращать false и продолжать выполнение функции captureStillImageAsynchronouslyFromConnection
  • Если я переключусь на другое приложение , заблокируйте телефон, выполните некоторые другие действия в приложении или нажмите кнопку «Сделать фото» миллион раз, и я могу получить блок завершения, чтобы вернуть ошибку. Они разные в зависимости от того, какое действие. Обычные - 11800, 11801 и 11830. Похоже, они не имеют отношения к зависанию.
  • Я оставил наш тестовый телефон (iPhone 4 GSM) на час, чтобы проверить, сможет ли он со временем работать. Никаких кубиков.

Я хотел бы знать, есть ли что-то, чего я могу упустить, свойство не настроено или известная проблема с обходным решением.

Спасибо.

(Я видел похожий пост, но ни один из ответов не решил мою проблему. Мне нужны фото в приложении.Для справки: iPhone SDK 4 AVFoundation - Как правильно использовать captureStillImageAsynchronouslyFromConnection? )

6
задан Community 23 May 2017 в 11:58
поделиться