2013-04-09 21 views
5

ho usato il seguente modo ma i video non si sono uniti e nell'output l'ultimo video aggiunto ad AVMutableCompositionTrack viene memorizzato nella Libreria.Come unire i video utilizzando AVMutableComposition in sdk iPhone

NSArray *arrVideoUrl=[objApp.dictSelectedVideos allKeys]; 
AVURLAsset *video1=[[AVURLAsset alloc]initWithURL:[arrVideoUrl objectAtIndex:0] options:nil]; 
AVURLAsset *video2=[[AVURLAsset alloc]initWithURL:[arrVideoUrl objectAtIndex:1] options:nil]; 
AVURLAsset *audioAsset=[[AVURLAsset alloc]initWithURL:songUrl options:nil]; 

AVMutableComposition *mixcomposition=[AVMutableComposition composition]; 

AVMutableCompositionTrack *track1=[mixcomposition addMutableTrackWithMediaType:AVMediaTypeVideo preferredTrackID:kCMPersistentTrackID_Invalid]; 
[track1 insertTimeRange:CMTimeRangeMake(kCMTimeZero, video1.duration) ofTrack:[[video1 tracksWithMediaType:AVMediaTypeVideo] objectAtIndex:0] 
       atTime:kCMTimeZero error:nil]; 


AVMutableCompositionTrack *track2=[mixcomposition addMutableTrackWithMediaType:AVMediaTypeVideo preferredTrackID:kCMPersistentTrackID_Invalid]; 

[track2 insertTimeRange:CMTimeRangeMake(kCMTimeZero, video2.duration) ofTrack:[[video2 tracksWithMediaType:AVMediaTypeVideo] objectAtIndex:0] 
       atTime:kCMTimeZero error:nil]; 

Qualcuno può aiutarmi per favore?

risposta

2

Ora si dispone di AVMutableComposition s per entrambe le tracce, è necessario creare - - AVMutableVideoCompositionLayerInstruction per entrambi.

  • Crea AVMutableVideoCompositionInstruction per la traccia unito il cui oggetto sarà
    avere instructions in un array composto da AVMutableVideoCompositionLayerInstruction per la prima e la seconda traccia.

  • Creare AVMutableVideoComposition per oggetto pista unita e fornire sopra
    AVMutableVideoCompositionInstruction.

Questo approccio proviene da un ottimo tutorial dal collegamento this.

+0

Beh grazie per questo .. ha funzionato !!! ma sto riscontrando il problema nell'orientamento ... l'orientamento del video è impostato su orizzontale, che è l'impostazione predefinita per AVAsset. Ho usato il tutorial fornito dal tuo link ma il problema dell'orientamento sta arrivando. Puoi aiutarmi a uscire da questo? –

+0

contento di aiutare ... per l'Orientamento se non funziona niente, si potrebbe provare a "trasformare" le proprietà su AVPlayerLayer, eseguendo la trasformazione (CGAfflineTransform) in base agli orientamenti del dispositivo. – BhushanVU

+1

Grazie per il codice! Oh aspetta, non hai lasciato nulla ... -1 –