ios - para - Animación de cuadros AVPlayer
aplicacion para animaciones android (0)
Estoy desarrollando una aplicación que incluye funcionalidad para reproducir video con animación por cuadro. Puedes ver un ejemplo de tal funcionalidad.
Ya intenté agregar CAKeyFrameAnimation
a la subcapa de AVSynchronizedLayer
y tuve algunos problemas con él.
También intenté preprocesar video con AVAssetExportSession
, y está funcionando perfectamente. Pero es muy lento Se necesita hasta 3 minutos para reproducir dicho video.
Tal vez hay otros enfoques para hacerlo?
Actualizar:
Así es como implemento la animación con 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)
}