Несколько сеансов AVAssetWriter и свойство состояния

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

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

[AVAssetWriter startWriting] cannot call method when status is 2

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

Спасибо.


person akaru    schedule 06.02.2011    source источник


Ответы (1)


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

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

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

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

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

person Steve McFarlin    schedule 02.03.2011