Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/iphone/35.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios AVPlayer帧动画_Ios_Swift_Video_Avfoundation - Fatal编程技术网

Ios AVPlayer帧动画

Ios AVPlayer帧动画,ios,swift,video,avfoundation,Ios,Swift,Video,Avfoundation,我正在开发一个应用程序,其中包括使用每帧动画播放视频的功能。 您可以看到这样一个功能的示例 我已经尝试将CAKeyFrameAnimation添加到AVSynchronizedLayer的子层中,并与之一起使用 我还尝试过使用AVAssetExportSession(AVAssetExportSession)对视频进行预渲染,效果非常好。但是速度很慢。渲染这样的视频最多需要3分钟 也许还有其他方法可以做到这一点 更新: 这就是我如何使用AVSynchronizedLayer实现动画的方法: le

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

我已经尝试将
CAKeyFrameAnimation
添加到
AVSynchronizedLayer
的子层中,并与之一起使用

我还尝试过使用AVAssetExportSession(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)
}

请发布一些代码进行分析。@SwiftArchitect,谢谢您的编辑。我在黑暗中更新了我的问题快照:您是否尝试将计算模式更改为线性计算?也许线性插值会抵消帧速率的差异。@TheLivingForce,是的,我已经尝试了所有类型的预定义模式(以防万一)。我尝试了不同的预定义类型的计算函数,并实现了一些自定义函数。上面的代码产生最佳效果。您是否尝试在AVPlayerItem上使用customVideoCompositor