ios - 使用 GPUImage 为视频添加水印,捕获错误,例如“试图过度释放帧缓冲区”
问题描述
这让我感到困惑,因为有时只有在您测试 5-6 次后才会出现,但有时您只需再测试 1 次。这是我的代码:
UIImage *coverImage1 = [UIImage imageNamed:@"imageName"];
UIImageView *coverImageView1 = [[UIImageView alloc] initWithImage:coverImage1];
[coverImageView1 setFrame:CGRectMake(20, size.height-100, 210, 50)];
UIView *subView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, size.width, size.height)];
subView.backgroundColor = [UIColor clearColor];
[subView addSubview:coverImageView1];
GPUImageUIElement *uielement = [[GPUImageUIElement alloc] initWithView:subView];
NSString *pathToMovie =string;
unlink([pathToMovie UTF8String]);
NSURL *movieURL = [NSURL fileURLWithPath:pathToMovie];
movieWriter = [[GPUImageMovieWriter alloc] initWithMovieURL:movieURL size:CGSizeMake(720.0, 1280.0)];
GPUImageFilter* progressFilter = [[GPUImageFilter alloc] init];
[progressFilter addTarget:filter];
[movieFile addTarget:progressFilter];
[uielement addTarget:filter];
movieWriter.shouldPassthroughAudio = YES;
movieFile.audioEncodingTarget = movieWriter;
[filter addTarget:movieWriter];
[movieFile enableSynchronizedEncodingUsingMovieWriter:movieWriter];
[movieWriter startRecording];
[movieFile startProcessing];
__weak typeof(self) weakSelf = self;
[progressFilter setFrameProcessingCompletionBlock:^(GPUImageOutput *output, CMTime time) {
[uielement update];
}];
[movieWriter setCompletionBlock:^{
dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(0.2 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
__strong typeof(self) strongSelf = weakSelf;
[strongSelf->filter removeTarget:strongSelf->movieWriter];
[strongSelf->movieWriter finishRecording];
[uielement useNextFrameForImageCapture];
//[[GPUImageContext sharedFramebufferCache]purgeAllUnassignedFramebuffers];
UISaveVideoAtPathToSavedPhotosAlbum(strongSelf->string, strongSelf, @selector(video:didFinishSavingWithError:contextInfo:), nil);
});
}];
我试图移动[uielement useNextFrameForImageCapture];
内部[progressFilter setFrameProcessingCompletionBlock...]
,但它也不起作用
解决方案
推荐阅读
- r - 如何在 R 中添加基于公共变量减去其他 2 行的行?
- php - Fullcalendar + 连接到 SQL + PHPMaker
- cpu-usage - 主机和来宾之间的 Hyper-V CPU 负载差异
- python - 无法安装 py4jdbc
- javascript - 未捕获的 ReferenceError:writeIn 未在更改时定义(
:5:4) 在 :7:1 - php - 重写获取参数
- java - 从 String[] 中删除重复项
- php - PHP 应用程序无法连接到 127.0.0.1 的 docker mysql 容器
- reactjs - 如何翻译核心ui中的菜单导航栏反应?
- c# - 从结果中的字符串中排除重复项