AVAssetWriter несколько сеансов и свойство status - PullRequest
7 голосов
/ 06 февраля 2011

Я пытаюсь создать несколько последовательных сеансов записи с AVAssetWriter. После того, как я успешно завершил (после вызова finishWriting), состояние устанавливается равным 2 (AVAssetWriterStatusCompleted).

Пытаясь создать еще один сеанс, я вызываю startWriting, но получаю сообщение об ошибке:

[AVAssetWriter startWriting] cannot call method when status is 2

Кажется, я не могу создать сеанс записи, если я что-то не настрою. Нужно ли заново создавать AVAssetWriter? Должно быть, я что-то упустил, и документы не помогают.

Спасибо.

1 Ответ

17 голосов
/ 02 марта 2011

После того, как автор завершил, он больше не может быть использован.Вы должны создать новый.Из документов:

Вы можете использовать данный экземпляр AVAssetWriter только один раз для записи в один файл.Если вы хотите писать в файлы несколько раз, вы должны каждый раз использовать новый экземпляр AVAssetWriter.

У меня есть приложение, в котором я использую два AVAssetWriter.Я создаю двух авторов, где только один активен за один раз.Когда достигается некоторое время, я помещаю активную запись в очередь GCD для завершения и восстановления и устанавливаю указатель активной записи на другую запись.

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

Это хорошо работает при использовании очереди захвата.Вы можете настроить переключатель для выполнения операций с учетом состояния устройства записи.

...