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