2010-12-09 14 views
9

He intentado con el siguiente código para fusionar los audios.[NSMutableArray objectAtIndex:]: índice 0 más allá de los límites para la matriz vacía 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]; 

Cuando trato de ejecutar el "[[audioAsset1 tracksWithMediaType: AVMediaTypeAudio] objectAtIndex: 0]" se está dando error

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

siguiente, pero cuando trato de imprimir el audioAsset1 en la consola, se está imprimiendo "< AVURLAsset: 0x198920, URL = 'ruta' >". He verificado con la ruta, ese archivo está allí.

¿Cuál es mi error? Por favor, ayúdame a resolverlo.

+0

¿Podemos ver el valor de 'audioURL1' por favor? –

+0

He marcado el modo de depuración. Lo recibo de audioURL. no en audioURL1. – jfalexvijay

+0

Cuando intento imprimir "[audioAsset1 tracksWithMediaType: AVMediaTypeAudio]", está imprimiendo la siguiente declaración; "activo: ( )" - significa que el activo está vacío. – jfalexvijay

Respuesta

33

Resolví este problema;

Sólo he sustituido la siguiente declaración

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

con la declaración siguiente

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

Gracias.

+0

¡Eres un salvavidas! – IanStallings

+2

Hice lo contrario y resolvió mi problema. No sé cómo. :) –

+0

¡Bravo! Ahorrado una hora – AVEbrahimi

Cuestiones relacionadas