vídeo congela no comutador da câmera com o AVFoundation
Fiz um aplicativo com um recurso para capturar e salvar vídeo. Eu usei o AVFoundation para isso e AVCam da Apple tem sido meu guia.
Espero poder esclarecer:
Tudo funciona bem até eu lançar o videoViewController que lida com o AVCamCaptureManager pela primeira vez (na AVCam, seria AVCamViewController). Depois disso, quando eu crio novamente, o vídeo congela logo após a troca da câmera. Mesmo executar novamente não ajudará, nem limpará nem reinicializará o dispositivo. (Às vezes, uma das coisas ajuda, mas não é uma regra
Libro o videoViewController quando não for necessário para economizar memóri
O código para mudar a câmera é basicamente o mesmo da AVCam:
NSError *error;
AVCaptureDeviceInput *newVideoInput;
AVCaptureDevicePosition position = currentVideoInput.device.position;
if (position == AVCaptureDevicePositionBack)
newVideoInput = [[AVCaptureDeviceInput alloc] initWithDevice:frontFacingCamera error:&error];
else if (position == AVCaptureDevicePositionFront)
newVideoInput = [[AVCaptureDeviceInput alloc] initWithDevice:backFacingCamera error:&error];
if (newVideoInput != nil) {
[session beginConfiguration];
[session removeInput:currentVideoInput];
if ([session canAddInput:newVideoInput]) {
[session addInput:newVideoInput];
[self setVideoInput:newVideoInput];
} else {
[session addInput:currentVideoInput];
}
[session commitConfiguration];
[newVideoInput release];
} else if (error) {
NSLog(@"%@",[error localizedDescription]);
}
Code com o qual demiti o videoView
[self.videoViewController.view removeFromSuperview];
self.videoViewController = nil;
Minha "solução alternativa" atual é simplesmente deixar como está, mesmo que eu não precis
lguém pode explicar por que isso está acontecendo e como resolvê-l
EDIT: resolvido
omo W Dyson apontou em sua resposta, eu deveria ter parado a sessão antes de liberar meu videoViewController da seguinte forma:
[[[self.videoViewController captureManager] session] stopRunning];
[self.videoViewController.view removeFromSuperview];
self.videoViewController = nil;
Obrigado W. Dyson.