Быстрая загрузка видеоконтента AVFoundation

Я столкнулся с очень интересным примером, что я так любопытствую, чтобы воспроизвести. Существует большое приложение, которое мне очень нравится: https://itunes.apple.com/ru/app/oldbooth/id298007500?mt=8

Я не рекламу, поскольку я не автор. Теперь у них есть интересный момент, когда из представления таблицы, выбирая большой палец, загружается ViewController с видеосеансом. Что я заметил:

1) Загрузка экрана сеанса видео очень быстро, почти не ожидая.

2) Отсутствует анимация затвора UIImagePicker

3) Анимация внешнего вида выглядит как «pushVC», я имею в виду, что она горизонтальная

4) вид с предварительным просмотром сначала белый, затем с альфа-анимацией он переходит в 0 альфа.

У меня есть опыт использования AVFoundation захвата видео, но это не так быстро! Это невероятно для меня, и я вижу, что этот уровень скорости возможен, конечно же, я хочу того же .. Пожалуйста, не могли бы вы посоветовать, как можно достичь такого уровня производительности?

Я пытаюсь сделать следующее:

В родительском VC, в didLoad:

dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0); UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"MainStoryboard" bundle:[NSBundle mainBundle]]; self.photoVC = [storyboard instantiateViewControllerWithIdentifier:@"PhotoCreationVC"]; dispatch_async(queue, ^{ [self.photoVC configureFoundation]; }); 

Метод делает следующее:

 -(void) configureFoundation{ NSError * error; _captureManager = [[AVCamDemoCaptureManager alloc] init]; if ([_captureManager setupSessionWithPreset:AVCaptureSessionPresetHigh error:&error]) { [self setCaptureManager:_captureManager]; _sessionEstablished = YES; } else { [Utils showMessage:[error localizedDescription] withTitle:@"Input Device Init Failed"]; } } 

и когда VC работает didLoad:

 - (void)viewDidLoad { [super viewDidLoad]; if (_sessionEstablished) { AVCaptureVideoPreviewLayer *captureVideoPreviewLayer = [[AVCaptureVideoPreviewLayer alloc] initWithSession:[_captureManager session]]; UIView *view = self.previewView; CALayer *viewLayer = view.layer; CGRect bounds = view.bounds; [captureVideoPreviewLayer setFrame:bounds]; if ([captureVideoPreviewLayer isOrientationSupported]) { [captureVideoPreviewLayer setOrientation:AVCaptureVideoOrientationPortrait]; } [captureVideoPreviewLayer setVideoGravity:AVLayerVideoGravityResizeAspectFill]; self.captureVideoPreviewLayer = captureVideoPreviewLayer; if ([[_captureManager session] isRunning]) { [_captureManager setDelegate:self]; NSUInteger cameraCount = [_captureManager cameraCount]; if (cameraCount < 1) { } else if (cameraCount < 2) { } if (cameraCount < 1) { } [viewLayer insertSublayer:captureVideoPreviewLayer below:[[viewLayer sublayers] objectAtIndex:0]]; } else { [Utils showMessage:@"Failed to start session." withTitle:@"Error"]; } } } 

Итак, что происходит: в приложении iTunes оно сначала загружает экран, а затем отпускает альфа белого представления (я думаю, это просто просмотр крышки, который начинает терять альфа после задержки). В моем случае он все еще думает, прежде чем загружать VC. Время (1,5 секунды) одно и то же, но ожидание не очень дружелюбное.

Если я поместил весь код загрузки в didAppear, он сразу же загрузится, но нагрузки, поэтому общее время между краном и готовым видео увеличивается до 2,5 секунд, что не очень хорошо.

Если я поместил код загрузки в willAppear, он будет работать так же, как в первой ситуации, когда он сначала думает, что нагрузки (всего 1,5 секунды) …

PS Я использую образец кода AVCamDemoCaptureManager от Apple, упрощенный, без выхода аудио и видео. просто устройство ввода видео и съемка неподвижного изображения.

Ребята, пожалуйста, можете ли вы дать мне рекомендации по эффективности? как можно добиться некоторой высокой производительности при загрузке сеанса камеры? Любая помощь будет высоко оценена!

Давайте будем гением компьютера.