2011-02-06 88 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 

這在使用捕獲隊列時效果很好。根據作者的狀態,您可以設置一個開關來執行操作。