¿Cómo animar varias capas de video al mismo time en AVMutableComposition?

Estoy escribiendo una pieza de código que genera un video de diapositivas de múltiples imágenes y múltiples videos en dispositivos iOS. Pude hacerlo con un solo video y varias imágenes, pero no soy capaz de descubrir cómo mejorarlo en varios videos.

Aquí está el video de muestra que pude generar con un video y dos imágenes.

Aquí está la rutina principal, que prepara al exportador.

// Prepare the temporary location to store generated video NSURL * urlAsset = [NSURL fileURLWithPath:[StoryMaker tempFilePath:@"mov"]]; // Prepare composition and _exporter AVMutableComposition *composition = [AVMutableComposition composition]; AVAssetExportSession* exporter = [[AVAssetExportSession alloc] initWithAsset:composition presetName:AVAssetExportPresetHighestQuality]; exporter.outputURL = urlAsset; exporter.outputFileType = AVFileTypeQuickTimeMovie; exporter.shouldOptimizeForNetworkUse = YES; exporter.videoComposition = [self _addVideo:composition time:timeVideo]; 

Aquí está el _addVideo: time: method, que crea el videoLayer.

 -(AVVideoComposition*) _addVideo:(AVMutableComposition*)composition time:(CMTime)timeVideo { AVMutableVideoComposition* videoComposition = [AVMutableVideoComposition videoComposition]; videoComposition.renderSize = _sizeVideo; videoComposition.frameDuration = CMTimeMake(1,30); // 30fps AVMutableCompositionTrack *compositionVideoTrack = [composition addMutableTrackWithMediaType:AVMediaTypeVideo prefernetworkingTrackID:kCMPersistentTrackID_Invalid]; [compositionVideoTrack insertTimeRange:CMTimeRangeMake(kCMTimeZero,timeVideo) ofTrack:_baseVideoTrack atTime:kCMTimeZero error:nil]; // Prepare the parent layer CALayer *parentLayer = [CALayer layer]; parentLayer.backgroundColor = [UIColor blackColor].CGColor; parentLayer.frame = CGRectMake(0, 0, _sizeVideo.width, _sizeVideo.height); // Prepare images parent layer CALayer *imageParentLayer = [CALayer layer]; imageParentLayer.frame = CGRectMake(0, 0, _sizeVideo.width, _sizeVideo.height); [parentLayer addSublayer:imageParentLayer]; // Specify the perspecrtive view CATransform3D perspective = CATransform3DIdentity; perspective.m34 = -1.0 / imageParentLayer.frame.size.height; imageParentLayer.sublayerTransform = perspective; // Animations _beginTime = 1E-10; _endTime = CMTimeGetSeconds(timeVideo); CALayer* videoLayer = [self _addVideoLayer:imageParentLayer]; [self _addAnimations:imageParentLayer time:timeVideo]; videoComposition.animationTool = [AVVideoCompositionCoreAnimationTool videoCompositionCoreAnimationToolWithPostProcessingAsVideoLayer:videoLayer inLayer:parentLayer]; // Prepare the instruction AVMutableVideoCompositionInstruction *instruction = [AVMutableVideoCompositionInstruction videoCompositionInstruction]; { instruction.timeRange = CMTimeRangeMake(kCMTimeZero, timeVideo); AVAssetTrack *videoTrack = [[composition tracksWithMediaType:AVMediaTypeVideo] objectAtIndex:0]; AVMutableVideoCompositionLayerInstruction* layerInstruction = [AVMutableVideoCompositionLayerInstruction videoCompositionLayerInstructionWithAssetTrack:videoTrack]; [layerInstruction setTransform:_baseVideoTrack.prefernetworkingTransform atTime:kCMTimeZero]; instruction.layerInstructions = @[layerInstruction]; } videoComposition.instructions = @[instruction]; return videoComposition; } 

_addAnimation: time: método agrega capas de image y progtwig las animaciones de todas las capas, incluido _videoLayer.

Todo funciona bien hasta ahora.

Sin embargo, no puedo imaginar cómo agregar el segundo video a esta presentación de diapositivas.

La muestra en la Guía de progtwigción de AVFoundation utiliza múltiples instrucciones de composition de video (AVMutableVideoCompositionInstruction) para combinar dos videos, pero simplemente los convierte en un único object CALayer, que se especifica en videoCompositionCoreAnimationToolWithPostProcessingAsVideoLayer: inLayer: method (de AVVideoCompositionCoreAnimationTool).

Quiero hacer dos pistas de video en dos capas separadas (layer1 y layer2), y animarlas por separado, al igual que lo hago con las capas asociadas con las imágenes.