iOS камера, записывающая видео с начальным увеличением, приводит к черным кадрам в течение первой секунды - PullRequest
1 голос
/ 25 мая 2020

У меня есть приложение для записи видео. Я могу начинать и останавливать запись, таким образом записывая различные сегменты, как в TikTok. Недавно я реализовал настройку videoZoomFactor на AVCaptureDevice. Во время записи работает нормально. Но если я увеличу масштаб перед записью и нажму на запись, чтобы начать, первый кадр выходного видео будет черным. Также, если во время того же AVCaptureSession я записываю с увеличением, удаляю эту запись и снова записываю с увеличением, черные рамки не появляются. Из этого я делаю вывод, что вызов startRecording на AVCaptureMovieFileOutput исправляет что-то между первой записью и второй.

Может кто-нибудь посоветует мне решение? Я подумываю найти обходной путь, при котором я удалю первый кадр, если он был записан с начальным увеличением, но я хотел бы понять, почему это происходит, и найти правильное решение.

У меня довольно простая настройка для запись камеры. Я выполнял шаги в официальном руководстве из документации . Вот часть настройки коэффициента масштабирования.

self.sessionQueue.async {
        do {
            try device.lockForConfiguration()
            device.videoZoomFactor = factor
            device.unlockForConfiguration()
        } catch {
            print("\(error.localizedDescription)")
        }
    }

1 Ответ

1 голос
/ 26 мая 2020

Наконец, я понял, в чем проблема. Во время настройки всего сеанса захвата я не добавлял стабилизации выходному соединению. Итак, после добавления вывода файла к сеансу я добавил эту часть, и теперь видео снимается нормально и не имеет черных рамок в начале. Вот фрагмент кода.

        self.captureSession.addOutput(self.videoFileOutput)
        if let connection = self.videoFileOutput.connection(with: AVMediaType.video) {
            if connection.isVideoStabilizationSupported {
                connection.preferredVideoStabilizationMode = .auto
            }
        }
...