programas para aplicaciones aplicacion animador animaciones animacion ios swift video avfoundation

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) }