Есть ли способ ограничить продолжительность вывода AVAssetWriter в iOS? - PullRequest
0 голосов
/ 04 января 2019

Я снимаю видео / аудио сэмплы, используя 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 Ответ

0 голосов
/ 04 января 2019

Хитрая часть - «сохранить только последние 1 мин»;насколько мне известно, не существует простого способа сделать это.Таким образом, ваша лучшая ставка, вероятно, будет примерно такой:

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