ios xcode GPUimage视频录制和静态图像捕捉

时间:2013-11-22 19:28:49

标签: ios video-capture gpuimage image-capture

我正在处理的应用允许用户录制具有所选效果的视频。它基于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;

             });

    }];

}

2 个答案:

答案 0 :(得分:2)

如果我不得不猜测我会说延迟来自于尝试同时运行GPUImageStillCamera和GPUImageVideoCamera。你可以尝试做这样的事情:

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

这样你根本不需要GPUImageStillCamera。希望这有帮助!

答案 1 :(得分:0)

你的情况还可以。只是在拍摄之前不要停止捕捉视频

//禁用按钮 - 阻止用户     btnPhoto.enabled = NO;     btnRecord.enabled = NO;

[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;

         });

}];

}