2010-12-09 4 views
9

J'ai essayé avec le code suivant de fusionner les fichiers audios.[NSMutableArray objectAtIndex:]: index 0 au-delà des limites du tableau vide de AVURLAsset

AVMutableComposition* composition = [AVMutableComposition composition]; 
AVURLAsset* videoAsset = [[AVURLAsset alloc]initWithURL:audioURL options:nil]; 
AVURLAsset* audioAsset1 = [[AVURLAsset alloc]initWithURL:audioURL1 options:nil]; 
AVURLAsset* audioAsset2 = [[AVURLAsset alloc]initWithURL:audioURL1 options:nil]; 
AVMutableCompositionTrack *compositionVideoTrack = [composition addMutableTrackWithMediaType:AVMediaTypeAudio preferredTrackID:kCMPersistentTrackID_Invalid]; 
NSError* error = NULL; 
[compositionVideoTrack insertTimeRange:CMTimeRangeMake(kCMTimeZero,videoAsset.duration) 
             ofTrack:[[videoAsset tracksWithMediaType:AVMediaTypeVideo]objectAtIndex:0] 
             atTime:kCMTimeZero 
AVMutableCompositionTrack *compositionAudioTrack1 = [composition addMutableTrackWithMediaType:AVMediaTypeAudio preferredTrackID:kCMPersistentTrackID_Invalid]; 
     [compositionAudioTrack1 insertTimeRange:CMTimeRangeMake(kCMTimeZero,audioAsset1.duration) 
             ofTrack:[[audioAsset1 tracksWithMediaType:AVMediaTypeAudio]objectAtIndex:0] 
             atTime:kCMTimeZero 
             error:&error]; 
AVMutableCompositionTrack *compositionAudioTrack2 = [composition addMutableTrackWithMediaType:AVMediaTypeVideo preferredTrackID:kCMPersistentTrackID_Invalid]; 
     [compositionAudioTrack2 insertTimeRange:CMTimeRangeMake(kCMTimeZero,audioAsset2.duration) 
             ofTrack:[[audioAsset2 tracksWithMediaType:AVMediaTypeAudio]objectAtIndex:0] 
             atTime:kCMTimeZero 
             error:&error]; 

Lorsque je tente d'exécuter le "[[audioAsset1 tracksWithMediaType: AVMediaTypeAudio] objectAtIndex: 0]" il donne l'erreur suivante

*** Terminating app due to uncaught exception 'NSRangeException', 
reason: '*** -[NSMutableArray objectAtIndex:]: index 0 beyond bounds for empty array'

Mais lorsque je tente d'imprimer la audioAsset1 dans la console, il est l'impression "< AVURLAsset: 0x198920, URL = 'chemin' >". J'ai vérifié avec le chemin, ce fichier est là.

quelle est mon erreur? S'il vous plaît aidez-moi à le résoudre.

+0

pouvons-nous voir la valeur de 'audioURL1' s'il vous plaît? –

+0

J'ai vérifié en mode débogage. Je le reçois d'audioURL. pas dans audioURL1. – jfalexvijay

+0

Lorsque j'essaie d'imprimer "[audioAsset1 tracksWithMediaType: AVMediaTypeAudio]", il imprime l'instruction suivante; "atout: ( )" - ce bien signifie que l'actif est vide. – jfalexvijay

Répondre

33

J'ai résolu ce problème;

Juste j'ai remplacé la déclaration suivante

NSURL *audioURL = [NSURL URLWithString:path]; 
AVURLAsset* videoAsset = [[AVURLAsset alloc]initWithURL:audioURL options:nil]

avec déclaration suivante

NSURL *audioURL = [NSURL fileURLWithPath:path] 
AVURLAsset* videoAsset = [[AVURLAsset alloc]initWithURL:audioURL options:nil]

Merci.

+0

Vous êtes un épargnant de vie! – IanStallings

+2

Je l'ai fait dans l'autre sens et cela a résolu mon problème. Je ne sais pas comment. :) –

+0

Bravo! Enregistré une heure. – AVEbrahimi

Questions connexes