Есть ли способ ограничить продолжительность вывода AVAssetWriter в iOS?

Я снимаю видео / аудио сэмплы, используя ReplayKit apis. Ниже приведен фрагмент для захвата кадров экрана

        recorder.startCapture(handler: {
        (cmSampleBuffer, rpSampleBufferType, error) in
        AssetWriter.shared.write(buffer: cmSampleBuffer, bufferType: rpSampleBufferType)
    }, completionHandler: {
        (error) in
        if let error = error {
            self.isCapturing = false
            NSLog("Error in capturing screens: \(error.localizedDescription)")
        } else {
            self.isCapturing = true
            NSLog("Capturing started successfully.")
        }
        self.updateViewButtons()
    })

и преобразование этих cmSampleBuffers с использованием AVAssetWriter в файл фильма, но я хочу ограничить размер файла фильма, скажем, 1 минутой, если он выходит за пределы, тогда он захватывает только последние 1 минуту.

1 ответ

Самое сложное - это "держать только последние 1 мин"; насколько мне известно, не существует простого способа сделать это. Так что ваша лучшая ставка, вероятно, будет что-то вроде:

  • во время записи запускайте новый AVAssetWriter каждую минуту и ​​сохраняйте только текущую и предыдущую запись
  • когда запись закончена и речь идет о сборке этой "последней 1 минуты"
    • открыть предыдущую и текущую запись как AVAssets
    • вставить временные диапазоны из них в новый AVMutableComposition так что они приводят к этой последней 1 минуте записи
    • экспортировать композицию с AVAssetExportSession к финальному фильму (использование предустановки "passthrough" избавит вас от лишних затрат / потери качества перекодирования)
Другие вопросы по тегам