我现在已经完全设置了使用AVFoundation
框架录制视频的能力,这一切都很好,但现在我希望在录制过程中添加一个叠加层(在AVCaptureVideoPreviewLayer
图层上也可见)
我可以将此叠加UIView
对象添加到 VideoPreviewLayer,但我正在努力如何在录制的视频上获得相同的视图。UIView
这可能包含从UILabel
s 到UIImageView
s 的任何内容。
我现在已经完全设置了使用AVFoundation
框架录制视频的能力,这一切都很好,但现在我希望在录制过程中添加一个叠加层(在AVCaptureVideoPreviewLayer
图层上也可见)
我可以将此叠加UIView
对象添加到 VideoPreviewLayer,但我正在努力如何在录制的视频上获得相同的视图。UIView
这可能包含从UILabel
s 到UIImageView
s 的任何内容。
我不确定这是否是您正在寻找的东西,但我想您可以使用 Brad Larson 的 GPU 库,有一个名为 GPUImageElement 的类可让您添加叠加层和视图。请查看示例,尤其是名为 Filter 展示的示例并滚动到一个叫做 UIElement 的东西。
这是一些示例代码:
else if (filterType == GPUIMAGE_UIELEMENT)
{
GPUImageAlphaBlendFilter *blendFilter = [[GPUImageAlphaBlendFilter alloc] init];
blendFilter.mix = 1.0;
NSDate *startTime = [NSDate date];
UILabel *timeLabel = [[UILabel alloc] initWithFrame:CGRectMake(0.0, 0.0, 240.0f, 320.0f)];
timeLabel.font = [UIFont systemFontOfSize:17.0f];
timeLabel.text = @"Time: 0.0 s";
timeLabel.textAlignment = UITextAlignmentCenter;
timeLabel.backgroundColor = [UIColor clearColor];
timeLabel.textColor = [UIColor whiteColor];
uiElementInput = [[GPUImageUIElement alloc] initWithView:timeLabel];
[filter addTarget:blendFilter];
[uiElementInput addTarget:blendFilter];
[blendFilter addTarget:filterView];
__unsafe_unretained GPUImageUIElement *weakUIElementInput = uiElementInput;
[filter setFrameProcessingCompletionBlock:^(GPUImageOutput * filter, CMTime frameTime){
timeLabel.text = [NSString stringWithFormat:@"Time: %f s", -[startTime timeIntervalSinceNow]];
[weakUIElementInput update];
}];
}
您想要覆盖UIView
's,但如果您不介意使用s,您可以在使用'属性CALayer
导出后添加覆盖。它有一个属性,可以让你在输出中添加动画,但我认为如果你的叠加层的外观不能用. 您的显示标题示例可能是可能的,尽管我想像当前时间计数器这样简单的东西不会。如果您可以接受此限制,WWDC 2010 代码示例“AVEditDemo”是一个很好的起点。AVAssetExportSession
AVVideoComposition
AVVideoCompositionCoreAnimationTool *animationTool
CALayer
CABasicAnimation
如果您需要更多控制,您可以手动将叠加层渲染UIView
到捕获帧上,使用[view.layer renderInContext:contextToThenRenderToFrame]
然后将这些帧写入文件使用AVAssetWriter
(一旦将帧捕获到内存,您就不能再使用了AVCaptureMovieFileOutput
)。
警告:您正在捕获的帧可能不会以统一的速率到达,并且取决于环境照明甚至系统负载。如果您的叠加层以比捕获视频更高的速率变化,那么您将需要在第二种解决方案中重复帧。这是AVVideoComposition
在第一个解决方案中为您处理的。
PS 解决方案二很繁琐,但不详细说明,iOS7 似乎让这变得容易了很多。
您可以在编辑部分 的 AVFoundation Programming Guide 中找到它
有一个部分处理图像的叠加。我将尝试放置一个示例代码/项目。
要找出您的问题,在 raywenderlich 教程网站上有两个非常详细的解释。这是一个两部分的教程。
第一个在这里:http ://www.raywenderlich.com/13418/how-to-play-record-edit-videos-in-ios
第二个在这里: http ://www.raywenderlich.com/30200/avfoundation-tutorial-adding-overlays-and-animations-to-videos
祝你好运,希望这能帮到你!!