2012-09-20 24 views
15

Parece que finishWriting está roto en el simulador de iOS 6: se cuelga para siempre. Ahora está obsoleto y reemplazado por el nuevo finishWritingWithCompletionHandler: - que tampoco llama al controlador.AVAssetWriter finishWriting falla en iOS 6 Simulator

En dispositivos reales con iOS 6, esto funciona bien como siempre. También en los simuladores de iOS anteriores funciona bien. Parece un error en el simulador de iOS 6.

¿Alguien más está experimentando esto o puede demostrar que estoy equivocado?

Respuesta

2

Bien encontré un trabajo en Simulador.

Parece parada interbloqueos el hilo de procesamiento de video por lo que una solución es llamar a tope en el hilo principal en su lugar:

//  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); 
} 

no parece que esta solución funcione para finishWritingWithCompletionHandler

Voy a tratar y ver si puedo generar un error en Apple.

+0

Ya publiqué un error. La paradoja es que desde iOS6, si llamamos finishwriting en el hilo principal, el registro muestra: ADVERTENCIA: -finishWriting no debe invocarse en el hilo principal. – user1574100

+0

Estoy teniendo el mismo problema. El simulador iOS6 no se llama manejador, y el estado nunca cambia de AVAssetWriterStatusWriting. –

+1

Solo comencé a recibir esto después de cambiar mi proyecto para usar ARC. –

11

Tuve este problema también y luego me di cuenta de que no llamaba a endSessionAtSourceTime: después de iniciar uno. Esto resolvió mi problema.

+1

Esto funcionó para mí también. Si llama a 'finishWritingWithCompletionHandler:' en su objeto 'AVAssetWriter', ** tiene que llamar a **' endSessionAtSourceTime: 'antes de eso para que se invoque el controlador de finalización. (La documentación indica que no tiene que llamar si usa 'finishWriting', que ha quedado obsoleto desde iOS 6.0.) – SolidSun

+0

También funcionó para mí. El punto muerto no siempre ocurrió, pero el archivo de salida nunca se escribió correctamente sin la llamada 'endSessionAtSourceTime:'. –

Cuestiones relacionadas