2011-01-20 10 views
8

Desidero mostrare una sovrapposizione di visualizzazione su un video ed esportare quel video incluso questo display. Ho dato un'occhiata a AVFoundation Framework, AVCompositions, AVAssets ecc. Ma non ho ancora un'idea per raggiungere questo obiettivo. Esiste una classe chiamata AVSynchronizedLayer che consente di animare le cose sincronizzate con il video, ma non desidero animare, ma voglio sovrapporre la visualizzazione del tempo in ogni singolo fotogramma del video. Qualche consiglio?iOS AVFoundation: mostra una visualizzazione dell'ora su un video ed esporta

saluti

+0

Voglio fare la stessa cosa. Hai fatto questo? Puoi aiutarmi come posso aggiornare "myClockLayer" come per la risposta di Adam. – Nikunj

+0

hai qualcosa per quanto riguarda questo ??? –

risposta

5

qualcosa di simile ...

(NB: abbattuti da un progetto molto più grande, così che io possa avere incluso alcuni pezzi inutili per caso).

È necessario prendere il CALayer del proprio orologio/animazione e impostarlo su var myClockLayer (utilizzato per 1/3 dello strumento andimation).

Questo presuppone anche che il video in arrivo abbia solo due tracce: audio e video. Se ne hai di più, dovrai impostare l'id della traccia in "asTrackID: 2" con maggiore attenzione.

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

Voglio aggiornare il mio testo su ogni secondo .. Voglio mostrare l'ora sul video pubblicato con l'aggiornamento per ogni secondo. Per favore, guidami come posso fare? – Nikunj

+0

Crea una nuova domanda su StackOverflow con il tuo problema – Adam

+0

già creato. ecco il link http://stackoverflow.com/questions/14894324/add-date-and-time-on-recorded-video e – Nikunj

2

Penso che si possa utilizzare AVCaptureVideoDataOutput per elaborare ogni fotogramma e utilizzare AVAssetWriter per registrare il frame.You elaborato può fare riferimento a questa risposta

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

uso appendPixelBuffer di AVAssetWriterPixelBufferAdaptor: withPresentationTime: metodo per esportare
E vi consiglio vivamente di utilizzare OpenCV per elaborare telaio. questo è un bel tutorial

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

La libreria OpenCV è molto grande.

Problemi correlati