OC之视频插入CoreAnimation层工具AVVideoCompositionCoreAnimationTool

AVVideoCompositionCoreAnimationTool 继承自NSObject,用于将Core Animation合并到视频合成中的对象。

任何动画都将在视频的时间轴上非实时的执行,因此应该:

  • 将动画的beginTime属性设置为AVCoreAnimationBeginTimeAtZero而不是0(CoreAnimation替换为CACurrentMediaTime);
  • removedOnCompletion设置为NO,使动画不会自动删除;
  • 避免使用与UIView对象关联的图层。

、创建合成工具

1、将核心动画层添加到视频合成中
+ (instancetype)videoCompositionCoreAnimationToolWithAdditionalLayer:(CALayer *)layer
asTrackID:(CMPersistentTrackID)trackID;

将核心动画层添加到视频合成中:

  • 参数layer:要添加的Core Animation层。
  • 参数trackID:用于标识轨道的trackIDtrackID不应该匹配源中的任何实际trackID

可以使用此方法将Core Animation图层包含为视频合成中的单个轨道输入。视频合成指令应引用应包含渲染动画的trackID

2、使用核心动画层构成合成视频帧
+ (instancetype)videoCompositionCoreAnimationToolWithPostProcessingAsVideoLayer:(CALayer *)videoLayer
inLayer:(CALayer *)animationLayer;

使用核心动画层构成合成视频帧:

  • 参数videoLayer:一个视频层。
  • 参数animationLayer:动画层。

将合成的视频帧放在videoLayer中并渲染animationLayer以生成最终帧。
videoLayer应该在animationLayer子层树中;animationLayer不应来自或添加到另一个图层树。

3、使用Core Animation层组合合成的视频帧
+ (instancetype)videoCompositionCoreAnimationToolWithPostProcessingAsVideoLayers:(NSArray *)videoLayers
inLayer:(CALayer *)animationLayer;

使用Core Animation层组合合成的视频帧:

  • 参数videoLayers:一组视频层
  • 参数animationLayer:动画层。

复制每个videoLayer中的合成视频帧,并渲染animationLayer以生成最终帧。videoLayers应该在animationLayer的子层树中。
animationLayer不应该来自另一层树,也不应该添加到另一层树。

注意:在iOS中,支持UIView的层实例通常会翻转它们的内容,这是由-contentsAreFlipped方法定义的。可能需要在图层层次结构中插入其geometryFlipped属性设置为YES的CALayer实例,以便在图层备份UIView时将图层附加到接收器时获得相同的结果。

你可能感兴趣的:(OC之视频插入CoreAnimation层工具AVVideoCompositionCoreAnimationTool)