2010-12-09 3 views
9

다음 코드를 사용하여 오디오를 병합하려고했습니다. 나는 실행하려고하면[NSMutableArray objectAtIndex :] : 인덱스 0 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]; 

"[[audioAsset1 tracksWithMediaType을 : AVMediaTypeAudio] objectAtIndex : 0]"나는 콘솔에서 audioAsset1를 인쇄 할 때주고는, 오류

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

다음 그러나 < AVURLAsset : 0x198920, URL = '경로'> "이 인쇄됩니다. 나는 그 파일이있는 경로를 확인했다.

내 실수는 무엇입니까? 그것을 해결하도록 도와주세요.

+0

우리는'audioURL1' 값을 확인할 수 있습니까? –

+0

디버그 모드에서 확인했습니다. audioURL에서 가져옵니다. audioURL1에 없습니다. – jfalexvijay

+0

"[audioAsset1 tracksWithMediaType : AVMediaTypeAudio]"를 인쇄하려고하면 다음 문이 인쇄됩니다. 'asset : ( )'- 자산이 비어 있음을 의미합니다. – jfalexvijay

답변

33

이 문제가 해결되었습니다.

그냥 내가 문을

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

감사를 다음과 같이 다음과 같은 문장을

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


을 대체했다.

+0

당신은 생명의 은인입니다! – IanStallings

+2

나는 다른 방법을했고 그것은 내 문제를 해결했다. 나는 어떻게 해야할지 모르겠다. :) –

+0

브라보! 1 시간을 절약했습니다. – AVEbrahimi

관련 문제