// Writing the galery video in output video import AVFoundation class SampleReaderProvider { private var videoBuffers: [(frame: CVPixelBuffer, time: CMTime)] = [] private var audioBuffers: [CMSampleBuffer] = [] private var counter = 0 init(audios: [CMSampleBuffer]) { self.audioBuffers = audios } init(frames: [(frame: CVPixelBuffer, time: CMTime)]) { self.videoBuffers = frames } func getNextVideoBuffer() -> (frame: CVPixelBuffer, time: CMTime)? { if counter == videoBuffers.count { return nil } let buffer = (frame: videoBuffers[counter].frame, time: videoBuffers[counter].time) counter += 1 return buffer } func getNextAudioBuffer() -> CMSampleBuffer? { if counter == audioBuffers.count { return nil } let buffer = audioBuffers[counter] counter += 1 return buffer } func isFinished() -> Bool { if videoBuffers.count > 0 { return counter == videoBuffers.count } else if audioBuffers.count > 0 { return counter == audioBuffers.count } else { return false } } }