7

AVAssetWriter を使用して複数のシリアル書き込みセッションを作成しようとしています。正常に完了すると (finishWriting を呼び出した後)、ステータスは 2 (AVAssetWriterStatusCompleted) に設定されます。

別のセッションを作成しようとして、startWriting を呼び出しましたが、次のエラーが発生しました。

[AVAssetWriter startWriting] cannot call method when status is 2

何かを設定しない限り、書き込みセッションを作成できないようです。AVAssetWriter を再度作成する必要がありますか? 私は何かが欠けているに違いありません、そしてドキュメントは役に立ちません。

ありがとう。

4

1 に答える 1

17

ライターが完了すると、使用できなくなります。新しいものを作成する必要があります。ドキュメントから:

AVAssetWriter の特定のインスタンスを 1 回だけ使用して、1 つのファイルに書き込むことができます。ファイルに複数回書き込む場合は、毎回 AVAssetWriter の新しいインスタンスを使用する必要があります。

2 つの AVAssetWriter を使用するアプリがあります。一度に 1 つだけがアクティブになる 2 つのライターを作成します。ある時間のデルタに達すると、完了と再作成のためにアクティブなライターを GCD キューにプッシュし、アクティブなライター ポインターを他のライターに設定します。

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

これは、キャプチャ キューを使用する場合にうまく機能します。ライターの状態に応じて、操作を実行するようにスイッチを設定できます。

于 2011-03-02T02:06:55.107 に答える