2011-01-20 15 views
8

Quiero mostrar una superposición de pantalla sobre un video y exportar ese video, incluida esta pantalla. Eché un vistazo al marco de AVFoundation, AVCompositions, AVAssets, etc., pero aún no tengo una idea para lograrlo. Hay una clase llamada AVSynchronizedLayer que te permite animar cosas de forma sincronizada con el video, pero no quiero animar, pero quiero superponer la visualización del tiempo en cada fotograma del video. ¿Algún consejo?iOS AVFoundation: muestra una visualización de la hora en un video y exporta

Saludos

+0

Quiero hacer lo mismo. ¿Has hecho esto? ¿Pueden ayudarme? ¿Cómo puedo actualizar "myClockLayer"? Según la respuesta de Adam. – Nikunj

+0

¿tuviste algo sobre esto? –

Respuesta

5

algo como esto ...

(NB: entresacado de un proyecto mucho más grande, así que puede haber incluido algunas piezas innecesarias por accidente).

Tendrá que tomar el CALayer de su reloj/animación, y configurarlo en var myClockLayer (usado 1/3 del camino hacia abajo por la herramienta de animación).

Esto también asume que su video entrante solo tiene dos pistas: audio y video. Si tiene más, necesitará establecer la identificación de la ruta en "asTrackID: 2" con más cuidado.

AVURLAsset* url = [AVURLAsset URLAssetWithURL:incomingVideo options:nil]; 
AVMutableComposition *videoComposition = [AVMutableComposition composition]; 

AVMutableCompositionTrack *compositionVideoTrack = [videoComposition addMutableTrackWithMediaType:AVMediaTypeVideo preferredTrackID:kCMPersistentTrackID_Invalid]; 
AVAssetTrack *clipVideoTrack = [[url tracksWithMediaType:AVMediaTypeVideo] objectAtIndex:0]; 
[compositionVideoTrack insertTimeRange:CMTimeRangeMake(kCMTimeZero, [url duration]) ofTrack:clipVideoTrack atTime:kCMTimeZero error:&error]; 

AVMutableVideoComposition* videoComposition = [[AVMutableVideoComposition videoComposition]retain]; 
videoComposition.renderSize = CGSizeMake(320, 240); 
videoComposition.frameDuration = CMTimeMake(1, 30); 
videoComposition.animationTool = [AVVideoCompositionCoreAnimationTool videoCompositionCoreAnimationToolWithAdditionalLayer:myClockLayer asTrackID:2]; 

AVMutableVideoCompositionInstruction *instruction = [AVMutableVideoCompositionInstruction videoCompositionInstruction]; 
instruction.timeRange = CMTimeRangeMake(kCMTimeZero, CMTimeMakeWithSeconds(60, 30)); 

AVMutableVideoCompositionLayerInstruction* layerInstruction = [AVMutableVideoCompositionLayerInstruction videoCompositionLayerInstructionWithAssetTrack:clipVideoTrack]; 
instruction.layerInstructions = [NSArray arrayWithObject:layerInstruction]; 

videoComposition.instructions = [NSArray arrayWithObject: instruction]; 

exporter = [[AVAssetExportSession alloc] initWithAsset:saveComposition presetName:AVAssetExportPresetHighestQuality] ; 
exporter.videoComposition = videoComposition; 
exporter.outputURL=url3; 
exporter.outputFileType=AVFileTypeQuickTimeMovie; 

[exporter exportAsynchronouslyWithCompletionHandler:^(void){}]; 
+0

quiero actualizar mi capa de texto en cada segundo .. Quiero mostrar la fecha y hora en el video expoerted con la actualización de cada segundo. ¿Puedes por favor guía cómo puedo hacer? – Nikunj

+0

Crea una nueva pregunta sobre StackOverflow con tu problema – Adam

+0

ya creado. aquí está el enlace http://stackoverflow.com/questions/14894324/add-date-and-time-on-recorded-video y – Nikunj

2

Creo que se puede utilizar para procesar AVCaptureVideoDataOutput cada cuadro y utilizar AVAssetWriter para registrar la frame.You procesado puede hacer referencia a esta respuesta

https://stackoverflow.com/a/4944594/379941.

uso appendPixelBuffer de AVAssetWriterPixelBufferAdaptor: withPresentationTime: método para exportar
Y me sugieren fuertemente usando OpenCV al marco de procesar. este es un buen tutorial

http://aptogo.co.uk/2011/09/opencv-framework-for-ios/.

La biblioteca de OpenCV es muy buena.

Cuestiones relacionadas