NSMutableArray objectAtIndex:]: index 0 beyond bounds for empty array from AVURLAsset NSMutableArray objectAtIndex:]: 空数组的索引0超出范围,来自AVURLAsset

10
我尝试使用以下代码合并音频。
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]"时,出现以下错误。
*** Terminating app due to uncaught exception 'NSRangeException', 
reason: '*** -[NSMutableArray objectAtIndex:]: index 0 beyond bounds for empty array'

但是当我尝试在控制台打印audioAsset1时,它打印出"<AVURLAsset: 0x198920, URL = 'path'>"。我已经检查了路径,文件确实存在。

我的错误在哪里?请帮助我解决这个问题。


请问我们能看到audioURL1的值吗? - Thomas Clayson
我已经在调试模式下检查过了。我是从audioURL获取它的,而不是从audioURL1获取。 - jfalexvijay
当我尝试打印“[audioAsset1 tracksWithMediaType:AVMediaTypeAudio]”时,它会打印以下语句:“asset:()”,这意味着资产为空。 - jfalexvijay
1个回答

33

我解决了这个问题;

我只是替换了以下语句

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

使用以下语句:

NSURL *audioURL = [NSURL <b>fileURLWithPath</b>:path]
AVURLAsset* videoAsset = [[AVURLAsset alloc]initWithURL:audioURL options:nil]

谢谢。


2
我尝试了另一种方法,它解决了我的问题。我不知道为什么。 :) - girish_vr
太棒了!节省了一个小时。 - AVEbrahimi
你是真正的MVP! - Hyder
非常感谢你,兄弟...是的!你是iOS开发者的救星:p - Dhiru

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接