重新启动AVAssetWriter

时间:2018-04-02 08:29:43

标签: swift avfoundation avassetwriter

我使用AVAssetWriter将视频录制到文件中。所以我为此目的创建了课程。 link to gist

然后在项目的某个地方推送记录并开始录制视频。

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以录制多个视频

2 个答案:

答案 0 :(得分:1)

目前尚不清楚是要创建多个视频文件还是将多个视频序列附加到单个文件中。如果您想要多个文件,请重新创建AVAssetWriter和朋友(即您的AssertController课程)。

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

你的要点使用帧数来计算缓冲区显示时间戳,所以除此之外别无他法,但是如果你正在处理图像样本缓冲区,那么它们已经有了自己的显示时间戳,你需要调整他们使用您的会话时间表。

答案 1 :(得分:1)

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