2012-09-20 13 views
15

Sembra che finishWriting sia rotto sul simulatore di iOS 6: si blocca per sempre. Ora è deprecato e sostituito dalla nuova finituraWritingWithCompletionHandler: - che non chiama mai il gestore.AVAssetWriter finishWriting non riuscito su iOS 6 Simulator

Su dispositivi reali con iOS 6, funziona come sempre. Anche nei precedenti simulatori iOS funziona perfettamente. Sembra un bug nel simulatore di iOS 6.

Qualcun altro che sta vivendo questo o può dimostrarmi sbagliato?

risposta

2

Ok ho trovato un lavoro su Simulator.

Sembra fermata deadlock il thread di elaborazione video in modo una soluzione consiste nel chiamare fermata nel thread principale invece:

//  in iOS6 Simulator this blocks the video processing thread call back in UI thread. 
//  BOOL stop = [assetWriter finishWriting]; 
[self performSelectorOnMainThread:@selector(stopInOtherThread) withObject:nil]; 

-(void)stopInOtherThread{ 
    //Stop doesn't block in MainThread 
    BOOL stop = [assetWriter finishWriting]; 
    NSLog(@" assetWriter finishWriting :%d",stop); 
} 

Questa soluzione non sembra funzionare per finishWritingWithCompletionHandler

Cercherò e vedere se riesco a sollevare un bug su Apple.

+0

Ho già postato un bug. Il paradosso è che da iOS6, se chiamiamo finishWriting sul thread principale, il registro mostra: ATTENZIONE: -finishWriting non dovrebbe essere chiamato sul thread principale. – user1574100

+0

Sto avendo lo stesso problema. Il simulatore iOS6 non è chiamato gestore e lo stato non cambia mai AVAssetWriterStatusWriting. –

+1

Ho iniziato a ottenere questo solo dopo aver cambiato il mio progetto per utilizzare ARC. –

11

Ho riscontrato questo problema, quindi mi sono reso conto che non stavo chiamando endSessionAtSourceTime: dopo averne avviato uno. Questo ha risolto il mio problema.

+1

Questo ha funzionato anche per me. Se si chiama 'finishWritingWithCompletionHandler:' sul proprio oggetto 'AVAssetWriter', allora ** è necessario chiamare **' endSessionAtSourceTime: 'prima di farlo in modo che il gestore di completamento sia invocato. (Le documentazioni affermano che non è necessario chiamarlo se si utilizza 'finishWriting', che è stato deprecato da iOS 6.0). – SolidSun

+0

Ha funzionato anche per me. Il deadlock non si verificava sempre, ma il file di output non veniva mai scritto correttamente senza la chiamata 'endSessionAtSourceTime:'. –

Problemi correlati