Хобрук: Ваш путь к мастерству в программировании

Проблема с камерой при установке AVCaptureDevice на 1 кадр/с

У меня проблема с фреймворком AVFoundation. Всякий раз, когда я устанавливаю FPS камеры на 1, через некоторое время светодиод моей камеры FaceTime HD начинает мигать с интервалом в одну секунду. Кроме того, больше не вызываются вызовы делегата (делегата буфера выборки).

Проблема не возникает, когда я устанавливаю 2 FPS, но для приложения, которое я разрабатываю, мне нужно, чтобы оно было установлено на 1 FPS.

Просто проверьте здесь, есть ли у кого-то еще проблемы с камерой при настройке на один FPS. При необходимости я опубликую отчет об ошибке с Apple. Я использую Macbook Air с середины 2013 года под управлением macOS 10.13.3.

Вот код, который я использую для установки FPS:

/// Set the frame rate of the current av capture session, if it is supported by the camera.
///
/// - Parameter fps: The desired frames per second.
func set(fps: Int) {

    guard let captureDevice = captureDevice,
        let format = captureDevice.activeFormat else { return }
    let doubleFPS = Double(fps)

    // Lock the device before changing the frame rate.
    try? captureDevice.lockForConfiguration()

    // Look for a supported frame rate range that is supported by the camera.
    for range in format.videoSupportedFrameRateRanges as! [AVFrameRateRange] {
        if range.minFrameRate <= doubleFPS &&
            range.maxFrameRate >= doubleFPS {
            let time: CMTime = CMTime(value: 1, timescale: CMTimeScale(fps))
            captureDevice.activeVideoMaxFrameDuration = time
            captureDevice.activeVideoMinFrameDuration = time
            break
        }
    }

    // Unlock the device now that we are done.
    captureDevice.unlockForConfiguration()
}

Ответы:


1

Как обрабатываются кадры? Если вы делаете это с AVCaptureVideoDataOutput, вы можете отбросить любые кадры, которые вы не хотите, чтобы достичь желаемой частоты кадров. Если вы записываете в файл (например, AVCaptureMovieFileOutput), вы не можете.

p.s. проблема, которую вы описываете, выглядит как ошибка. В идеале вы бы зарегистрировали его.

28.03.2018
  • Да, действительно, я использую AVCaptureVideoDataOutput. Не могли бы вы рассказать, как я могу отбрасывать кадры, чтобы обрабатывать только 1 кадр в секунду? Стратегия, которую я описал в своем вопросе, кажется, соответствует следующему: developer.apple.com/library/content/technotes/tn2445/ 09.04.2018
  • Этот документ касается непреднамеренного пропуска кадров. Вы хотите намеренно отбросить их — прямо сейчас вы записываете/добавляете слишком много кадров в секунду, поэтому проверьте временную метку буфера сэмпла и, если предыдущая была меньше секунды назад, отбросьте/не добавляйте новую. Таким образом, ваша частота кадров может упасть ниже 1 кадра в секунду, поэтому вам может потребоваться объединить входящие кадры, чтобы получить желаемый 1 кадр в секунду. 09.04.2018
  • Я реализовал предложенную вами стратегию, и сейчас это лучшее решение моей проблемы. Однако это все еще не объясняет проблему, которую я описал в своем вопросе. 11.04.2018
  • Описанная вами проблема звучит как ошибка macOS. Зарегистрируйте его, если у вас есть время. 11.04.2018
  • Новые материалы

    Учебные заметки JavaScript Object Oriented Labs
    Вот моя седьмая неделя обучения программированию. После ruby ​​и его фреймворка rails я начал изучать самый популярный язык интерфейса — javascript. В отличие от ruby, javascript — это более..

    Разбор строк запроса в vue.js
    Иногда вам нужно получить данные из строк запроса, в этой статье показано, как это сделать. В жизни каждого дизайнера/разработчика наступает момент, когда им необходимо беспрепятственно..

    Предсказание моей следующей любимой книги 📚 Благодаря данным Goodreads и машинному обучению 👨‍💻
    «Если вы не любите читать, значит, вы не нашли нужную книгу». - J.K. Роулинг Эта статья сильно отличается от тех, к которым вы, возможно, привыкли . Мне очень понравилось поработать над..

    Основы принципов S.O.L.I.D, Javascript, Git и NoSQL
    каковы принципы S.O.L.I.D? Принципы SOLID призваны помочь разработчикам создавать надежные, удобные в сопровождении приложения. мы видим пять ключевых принципов. Принципы SOLID были разработаны..

    Как настроить Selenium в проекте Angular
    Угловой | Селен Как настроить Selenium в проекте Angular Держите свое приложение Angular и тесты Selenium в одной рабочей области и запускайте их с помощью Mocha. В этой статье мы..

    Аргументы прогрессивного улучшения почти всегда упускают суть
    В наши дни в кругах веб-разработчиков много болтают о Progressive Enhancement — PE, но на самом деле почти все аргументы с обеих сторон упускают самую фундаментальную причину, по которой PE..

    Введение в Джанго Фреймворк
    Схема «работать умно, а не усердно» В этой и последующих статьях я познакомлю вас с тем, что такое фреймворк Django и как создать свое первое приложение с помощью простых и понятных шагов, а..