Reapertura de AVCaptureSession

Tengo una aplicación que toma algunas fotos. Toda mi aplicación está basada en el código de muestra de AVCam de WWDC 2010. He jugado mucho con él y, sin embargo, hasta ahora no puedo entender cómo liberar correctamente la vista de la camera que libera la session de la camera …

Todo lo que trato de hacer es lo siguiente:

  • Abra el controller de vista de camera
  • Toma algunas fotografías
  • Cerrar vista de camera Controlador
  • Ábralo otra vez

La segunda vez que presiono el viewController, la session se pierde, la vista previa no está disponible y la captura no está disponible también. Publicé el código de ejemplo completo en github .

Mi solución para el problema no era liberar la camera en absoluto, por lo que el controller de la vista de camera actúa como un Singleton, lo cual creo que no es el path correcto. Además, con este comportamiento, no pude encontrar una forma de admitir la camera cuando la aplicación pasó a segundo plano (llamada telefónica, por ejemplo).

Por favor consejo ¿Cómo destruyo la session de la camera? y es importante hacerlo?

He agregado el siguiente post a AVCamCaptureManager

 - (void) destroySession { if ([delegate respondsToSelector:@selector(captureManagerSessionWillEnd:)]) { [delegate captureManagerSessionWillEnd:self]; } // remove the device inputs [session removeInput:[self videoInput]]; [session removeInput:[self audioInput]]; // release [session release]; // remove AVCamRecorder [recorder release]; if ([delegate respondsToSelector:@selector(captureManagerSessionEnded:)]) { [delegate captureManagerSessionEnded:self]; } } 

Estoy llamando a destroySession cuando el viewController que sostiene la camera se acerca (en mi ejemplo es -closeCamera: de AVCamViewController ).

Para get el ejemplo completo de trabajo, puede download AVCam-CameraReleaseTest en github.com