AVVideoCompositionCoreAnimationTool 继承自NSObject,用于将Core Animation合并到视频合成中的对象。
任何动画都将在视频的时间轴上非实时的执行,因此应该:
- 将动画的
beginTime属性设置为AVCoreAnimationBeginTimeAtZero而不是0(CoreAnimation替换为CACurrentMediaTime); - 将
removedOnCompletion设置为NO,使动画不会自动删除; - 避免使用与
UIView对象关联的图层。
、创建合成工具
1、将核心动画层添加到视频合成中
+ (instancetype)videoCompositionCoreAnimationToolWithAdditionalLayer:(CALayer *)layer
asTrackID:(CMPersistentTrackID)trackID;
将核心动画层添加到视频合成中:
- 参数
layer:要添加的Core Animation层。 - 参数
trackID:用于标识轨道的trackID。trackID不应该匹配源中的任何实际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<CALayer *> *)videoLayers
inLayer:(CALayer *)animationLayer;
使用Core Animation层组合合成的视频帧:
- 参数
videoLayers:一组视频层 - 参数
animationLayer:动画层。
复制每个videoLayer中的合成视频帧,并渲染animationLayer以生成最终帧。videoLayers应该在animationLayer的子层树中。
animationLayer不应该来自另一层树,也不应该添加到另一层树。
注意:在iOS中,支持UIView的层实例通常会翻转它们的内容,这是由-contentsAreFlipped方法定义的。可能需要在图层层次结构中插入其geometryFlipped属性设置为YES的CALayer实例,以便在图层备份UIView时将图层附加到接收器时获得相同的结果。












网友评论