2011-02-06 1 views
7

Sto tentando di creare più sessioni di scrittura seriale con AVAssetWriter. Una volta completato con successo uno (dopo aver chiamato finishWriting) lo stato è impostato su 2 (AVAssetWriterStatusCompleted).AVAssetWriter più sessioni e la proprietà di stato

Cercando di creare un'altra sessione, che io chiamo startWriting, ma ottengo l'errore:

[AVAssetWriter startWriting] cannot call method when status is 2 

sembra che io non riesco a creare una sessione di scrittura a meno che non configura qualcosa. Devo ricreare nuovamente AVAssetWriter? Devo mancare qualcosa, e i documenti non stanno aiutando.

Grazie.

risposta

17

Dopo che lo scrittore ha completato, non è più utilizzabile. Devi crearne uno nuovo. Dai documenti:

È possibile utilizzare una determinata istanza di AVAssetWriter solo una volta per scrivere su un singolo file. Se si desidera scrivere su file più volte, è necessario utilizzare una nuova istanza di AVAssetWriter ogni volta.

Ho un'app in cui utilizzo due AVAssetWriters. Creo due scrittori in cui solo uno è attivo alla volta. Quando viene raggiunto un delta temporale, spingo il writer attivo su una coda GCD per il completamento e la ricreazione e imposto il puntatore del writer attivo all'altro scrittore.

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

Questo funziona bene quando si utilizza una coda di cattura. È possibile impostare un interruttore per eseguire le operazioni in base allo stato del writer.