Swift 重新启动AVAssetWriter

Swift 重新启动AVAssetWriter,swift,avfoundation,avassetwriter,Swift,Avfoundation,Avassetwriter,我使用AVAssetWriter将视频录制到文件中。因此,我为此创建了一个类。 然后在项目的某个地方,我推着录音,开始录制视频 func start() { assetWriter?.startWriting() assetWriter?.startSession(atSourceTime: kCMTimeZero) } 如果我只录制一次视频,一切正常,但当我停止录制时 func finish() { print("before finish") assetWriter?.finishWri

我使用AVAssetWriter将视频录制到文件中。因此,我为此创建了一个类。

然后在项目的某个地方,我推着录音,开始录制视频

func start() {
assetWriter?.startWriting()
assetWriter?.startSession(atSourceTime: kCMTimeZero)
}
如果我只录制一次视频,一切正常,但当我停止录制时

func finish() {
print("before finish")
assetWriter?.finishWriting {
  print("finish writing")
  }
}
然后尝试录制另一个视频,我发现异常

[AVAssetWriter startWriting] Cannot call method when status is 2

如何将AVAssertWriter配置为录制多个视频

不清楚您是要创建多个视频文件还是要将多个视频序列附加到单个文件中。如果需要多个文件,请重新创建
AVAssetWriter
和好友(即
AssertController
类)

如果您想在文件中包含多个序列,那么要知道
AVAssetWriter
不支持停止和启动,因此解决方案是不停止。您可以控制要追加的帧以及在会话时间线上的时间,因此在“停止”时不要追加帧


gist使用帧编号来计算缓冲区显示时间戳,因此没有太多其他事情要做,但是如果您使用图像样本缓冲区,那么它们已经有了自己的显示时间戳,您需要调整它们以使用会话时间戳。

当您使用AVAssetWriter时,您只能使用AVAssetWriter的给定实例一次写入单个文件。每次写入文件时都必须使用AVAssetWriter的新实例。

我想创建多个文件。因此,您建议每次创建新的AVAssertWriter都非常有用。重新创建
AVAssetWriter
也是更改文件名的唯一方法。