[ios] AVPlayer框架动画



Answers

Question

我正在开发一个应用程序,其中包括使用每帧动画播放视频的功能。 你可以看到这样的功能的例子

我已经尝试添加CAKeyFrameAnimationCAKeyFrameAnimation的子层,并有一些麻烦

我也已经尝试用AVAssetExportSession预渲染视频,并且工作得很好。 但是速度很慢。 它需要长达3分钟来渲染这样的视频。

也许有其他的方法来做到这一点?

更新:

这是我如何使用AVSynchronizedLayer实现动画:

let fullScreenAnimationLayer = CALayer()
fullScreenAnimationLayer.frame = videoRect
fullScreenAnimationLayer.geometryFlipped = true

values: [NSValue] = [], times: [NSNumber] = []

// fill values array with positions of face center for each frame
values.append(NSValue(CATransform3D: t))

// fill times with corresoinding time for each frame
times.append(NSNumber(double: (Double(j) / fps) / videoDuration)) // where fps = 25 (according to video file fps)

...

let transform = CAKeyframeAnimation(keyPath: "transform")
transform.duration = videoDuration
transform.calculationMode = kCAAnimationDiscrete
transform.beginTime = AVCoreAnimationBeginTimeAtZero
transform.values = values
transform.keyTimes = times
transform.removedOnCompletion = false
transform.fillMode = kCAFillModeForwards
fullScreenAnimationLayer.addAnimation(transform, forKey: "a_transform")

...

if let syncLayer = AVSynchronizedLayer(playerItem: player.currentItem) {
    syncLayer.frame = CGRect(origin: CGPointZero, size: videoView.bounds.size)
    syncLayer.addSublayer(fullScreenAnimationLayer)
    videoView.layer.addSublayer(syncLayer)
}



Links