Видео зависает на переключателе камеры с помощью AVFoundation

Я сделал приложение с функцией захвата и сохранения видео. Я использовал для этого 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;

Спасибо, В. Дайсон.

6
задан reggian 23 April 2011 в 12:35
поделиться