有什么方法可以限制iOS中AVAssetWriter的输出持续时间?

时间:2019-01-04 04:52:11

标签: avfoundation replaykit

我正在使用ReplayKit API捕获视频/音频样本。下面是捕获屏幕框架的代码段

        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()
    })

,然后使用AVAssetWriter将这些cmSampleBuffers转换为电影文件,但是我想限制电影文件的大小,例如超过1分钟则只能捕获最后1分钟。

1 个答案:

答案 0 :(得分:1)

棘手的部分是“仅保留最后1分钟”;据我所知,没有简单的方法可以做到这一点。因此,您最好的选择可能是:

  • 录音时,每分钟启动一个新的AVAssetWriter,并保持当前和以前的录音
  • 完成录制后,涉及组装“最后1分钟”
    • AVAssets的形式打开上一个和当前记录
    • 将时间从这些时间插入到一个新的AVMutableComposition中,以使它们导致记录的最后1分钟
    • 将带有AVAssetExportSession的构图导出到最终的电影中(使用直通预设可以避免重新编码的开销/质量损失)