AVComposition中的CALayer
来源:互联网 发布:想做淘宝模特怎么入行 编辑:程序博客网 时间:2024/06/04 19:30
AVMutableComposition
除了可以插入视频轨道、音频轨道外,还可以在上面覆盖layer,以添加水印、动画等。想想新闻联播下面转圈的地球,这种效果没有layer还真不好做
AVVideoCompositionCoreAnimationTool
AVVideoCompositionCoreAnimationTool
用来将 Core Animation 作为视频组合的后期处理阶段纳入 video composition 中
videoLayer 是video composition展现时的图层,animationLayer 是我们要在其上覆盖用的图层。AVVideoCompositionCoreAnimationTool
用于将 animationLayer 添加到 videoLayer 上。
使用AVVideoCompositionCoreAnimationTool
时需要注意:
- 动画时间坐标与视频时间坐标不一样,如果
beginTime
= 0,则表示动画开始时间为CACurrentMediaTime
,这与渲染视频的时间完全不同——渲染时“当前时间”早就过去了。AVFoundation
设置了AVCoreAnimationBeginTimeAtZero
常量来将 Core Animation 的beginTime
设为视频时间坐标的0 - 默认情况下,动画完成后,为提高性能,图层会把动画移除,这样动画的时间一旦过去就无法返回了,但这种逻辑不符合视频动画:因为可能会重新播放等,所以
removedOnCompletion
必须置为NO
- 添加的 layer 不能与
UIView
有关系
示例
如果没有视频轨道(如纯layer的composition),则必须添加一个空白视频,否则什么也渲染不出来
// 初始化 composition, videoComposition ...// parent layerCALayer *parentLayer = [CALayer layer];parentLayer.frame = (视频frame)// video layerCALayer *videoLayer = [CALayer layer];videoLayer.frame = parentLayer.frame;// animation/overlay layerCALayer *layer1 = [CALayer layer];CALayer *layer2 = [CALayer layer];...// 在layer上想做什么就可以做什么,如添加动画CABaseAnimation *animation = ...animation.fromValue = ...animation.toValue = ...animation.beginTime = AVCoreAnimationBeginTimeAtZero;animation.removedOnCompletion = NO;[layer1 addAnimation: animation forKey: nil];// 将自定义的layer添加到parentLayer中[parentLayer addSublayer: videoLayer];[parentLayer addSublayer: layer1];[parentLayer addSublayer: layer2];...// 将合成的parentLayer关联到composition中videoComposition.animationTool = [AVVideoCompositionCoreAnimationTool videoCompositionCoreAnimationToolWithPostProcessingAsVideoLayer: videoLayer inLayer: parentLayer];// 用AVAssetExportSession导出
0 0
- AVComposition中的CALayer
- AVComposition中的CALayer
- iphone开发中的CALayer
- iOS 中的CALayer
- iOS中的CALayer
- CALayer中的position与anchorPoint
- CALayer
- CALayer
- CALayer
- CALayer
- CALayer
- CALayer
- CALayer
- CALayer
- CALayer
- CALayer
- CALayer
- CALayer
- 基类构造和派生构造
- mysql流程函数练习
- DuiLib学习(三)
- UNITY3D 贴图格式压缩说明
- hjr教程-DSP(四):几种滤波器设计
- AVComposition中的CALayer
- mysql时间函数练习
- oracle的最大连接数
- matlab调用c++,应该用mex把cpp编译成 .mex文件供MATLAB在命令行方式下调用吧
- 简单易学的机器学习算法——马尔可夫链蒙特卡罗方法MCMC
- BZOJ 1001 狼抓兔子 [最小割转最短路=平面图转对偶图]
- python模拟开发WebQQ(二)
- 简单易学的机器学习算法——Gibbs采样
- mysql分页和排序练习