2011-02-06 34 views
7

我正在尝试用AVAssetWriter创建多个串行写入会话。一旦我成功完成了一个(在完成写入后)状态设置为2(AVAssetWriterStatusCompleted)。AVAssetWriter多个会话和状态属性

试图创建另一个会话,我打电话startWriting,但我得到的错误:

[AVAssetWriter startWriting] cannot call method when status is 2 

看来,除非我的东西配置我不能创建一个会话写作。我是否必须重新创建AVAssetWriter?我一定错过了一些东西,而且这些文档没有帮助。

谢谢。

回答

17

作者完成后不再可用。您必须创建一个新的。从文档:

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

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

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

这在使用捕获队列时效果很好。根据作者的状态,您可以设置一个开关来执行操作。