我正在开发的应用程序允许用户录制具有选定效果的视频。它基于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;
});
}];
}