【问题标题】:Restart AVAssetWriter重启 AVAssetWriter
【发布时间】:2018-04-02 08:29:42
【问题描述】:

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

【问题讨论】:

    标签: swift avfoundation avassetwriter


    【解决方案1】:

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

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

    您的 gist 使用帧号来计算缓冲区表示时间戳,因此没有什么可做的,但是如果您正在使用图像样本缓冲区,那么它们已经有自己的表示时间戳,您需要调整它们以使用您的会话时间表。

    【讨论】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-03-03
      相关资源
      最近更新 更多