7

我正在尝试使用 AVAssetWriter 创建多个串行写入会话。一旦我成功完成了一个(在调用finishWriting 之后),状态就会设置为2(AVAssetWriterStatusCompleted)。

尝试创建另一个会话,我调用 startWriting,但出现错误:

[AVAssetWriter startWriting] cannot call method when status is 2

除非我配置一些东西,否则我似乎无法创建写作会话。我是否必须再次重新创建 AVAssetWriter?我一定遗漏了一些东西,而文档没有帮助。

谢谢。

4

1 回答 1

17

编写器完成后,它不再可用。您必须创建一个新的。从文档:

您只能使用一次给定的 AVAssetWriter 实例来写入单个文件。如果要多次写入文件,则必须每次都使用一个新的 AVAssetWriter 实例。

我有一个使用两个 AVAssetWriters 的应用程序。我创建了两个作家,一次只有一个活跃。当达到某个时间增量时,我将活动写入器推送到 GCD 队列以完成和重新创建,并将活动写入器指针设置为另一个写入器。

if(time > delta)
  dispatch( ^{ finish writer, create new one })
  active_writer = next writer

这在使用捕获队列时效果很好。您可以设置一个开关来执行给定写入器状态的操作。

于 2011-03-02T02:06:55.107 回答