Есть ли способ ограничить продолжительность вывода 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" избавит вас от лишних затрат / потери качества перекодирования)
- открыть предыдущую и текущую запись как