ios xcode GPUзапись видеоизображения и захват неподвижного изображения

Приложение, над которым я работаю, позволяет пользователю записывать видео с выбранным эффектом. Он основан на примере GPUIamge FilterShowcase.

Я только что добавил возможность захвата неподвижного изображения текущего выбранного видеоэффекта.

Захват неподвижного изображения работает, но очень медленно. Существует большая задержка (от 1 до 2 секунд) между вызовом метода захвата неподвижного изображения и временем фактического сохранения изображения.

Есть ли более оптимизированный метод для достижения этого?

Спасибо.

Код следует:

-(IBAction)savePhotoWithEffects:(id)sender
{

    // disable buttons - prevent user 
    btnPhoto.enabled=NO;
    btnRecord.enabled=NO;

    // stop videoCamera capture
    [videoCamera stopCameraCapture];

    [stillCamera capturePhotoAsImageProcessedUpToFilter:filter withCompletionHandler:^(UIImage *captureImage, NSError *error){

        if (error) {
            NSLog(@"ERROR: Could not capture!");
        }
        else {
            // save file

            NSLog(@"PHOTO SAVED - ??");

            // save photo to album
            UIImageWriteToSavedPhotosAlbum(captureImage, nil, nil, nil);
        }

        runOnMainQueueWithoutDeadlocking(^{

                 // Start video camera capture again
                 [videoCamera startCameraCapture];

                  // enable the take photo and start recording buttons again
                 btnPhoto.enabled=YES;
                 btnRecord.enabled=YES;

             });

    }];

}

person learning-ios    schedule 22.11.2013    source источник


Ответы (2)


Если бы мне пришлось угадывать, я бы сказал, что задержка возникает из-за попытки одновременного запуска GPUImageStillCamera и GPUImageVideoCamera. Вы можете попробовать сделать что-то вроде этого:

[videoCamera pauseCameraCapture];
UIImage *capturedImage = [filter imageFromCurrentlyProcessedOutput];
UIImageWriteToSavedPhotosAlbum(capturedImage, nil, nil, nil);
[videoCamera resumeCameraCapture];

Таким образом, вам вообще не нужна GPUImageStillCamera. Надеюсь, это поможет!

person David Schwartz    schedule 22.11.2013

Ваш случай в порядке. Просто не останавливайте захват видео до того, как сделаете кадр

// отключить кнопки - запретить пользователю btnPhoto.enabled=NO; btnRecord.enabled=НЕТ;

[stillCamera capturePhotoAsImageProcessedUpToFilter:filter withCompletionHandler:^(UIImage *captureImage, NSError *error){

    if (error) {
        NSLog(@"ERROR: Could not capture!");
    }
    else {
        // save file

        NSLog(@"PHOTO SAVED - ??");

        // save photo to album
        UIImageWriteToSavedPhotosAlbum(captureImage, nil, nil, nil);
    }

    runOnMainQueueWithoutDeadlocking(^{

              // enable the take photo and start recording buttons again
             btnPhoto.enabled=YES;
             btnRecord.enabled=YES;

         });

}];

}

person Nikolay Shubenkov    schedule 19.04.2017