Повторное открытие AVCaptureSession - PullRequest
5 голосов
/ 13 октября 2011

У меня есть приложение, которое делает несколько снимков.Все мое приложение основано на образце кода AVCam из WWDC 2010. Я много с ним связывался, и все же до сих пор не могу понять, как правильно отключить вид с камеры, который высвобождаетсессия камеры ...

Все, что я пытаюсь сделать, это следующее:

  • Открыть контроллер просмотра камеры
  • Сделать несколько фотографий
  • Закрыть представление камеры Контроллер
  • Откройте его снова

Во второй раз, когда я нажимаю viewController, сеанс теряется, предварительный просмотр недоступен и захват также недоступен.Я опубликовал полный пример кода на github .

Мой обходной путь для этой проблемы - вообще не выпускать камеру, поэтому контроллер вида камеры действует как синглтон, что, я думаю, не правильный путь.Более того, при таком поведении я не смог найти способ поддержки камеры, когда приложение ушло в фоновый режим (например, телефонный звонок).

Пожалуйста, советуйте .Как мне уничтожить сеанс камеры?и важно ли это делать?

Ответы [ 2 ]

5 голосов
/ 07 ноября 2011

Я добавил следующее сообщение к 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];
    }
}

Я звоню destroySession, когда viewController, удерживающий камеру, приближается (в моем примере это -closeCamera: из AVCamViewController).

Для полного рабочего примера вы можете загрузить AVCam-CameraReleaseTest на github.com

0 голосов
/ 13 октября 2011
...