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;
             });
    }];
}

如果非要我猜的话,我会说延迟是因为试图同时运行GPUImageStillCamera和GPUImageVideoCamera。你可以尝试这样做:

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

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

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

//禁用按钮-阻止用户btnPhoto.enabled=否;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;
         });
}];

}

最新更新