Я сделал приложение с функцией захвата и сохранения видео. Я использовал для этого AVFoundation и Apple AVCam был моим руководством.
Надеюсь, я смогу прояснить это:
Все работает нормально, пока я не выпущу videoViewController, который впервые обрабатывает AVCamCaptureManager (в AVCam это будет AVCamViewController). После этого, когда я создаю его снова, видео зависает сразу после переключения камеры. Даже повторный запуск не поможет, ни очистка, ни сброс устройства. (Иногда что-то помогает, но это не правило.)
Я освобождаю videoViewController, когда он не нужен для экономии памяти.
Код для переключения камеры в основном тот же, что и в 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]);
}
Код, с помощью которого я отклоняю videoView
[self.videoViewController.view removeFromSuperview];
self.videoViewController = nil;
Мой текущий «обходной путь» - просто оставить его в покое, даже если он мне не нужен.
] Может кто-нибудь объяснить, почему это происходит и как это решить.
РЕДАКТИРОВАТЬ: Решено
Как указал В. Дайсон в своем ответе, я должен был остановить сеанс перед тем, как выпустить мой videoViewController, например:
[[[self.videoViewController captureManager] session] stopRunning];
[self.videoViewController.view removeFromSuperview];
self.videoViewController = nil;
Спасибо, В. Дайсон.