AVAsset“tracksWithMediaType”返回一个空数组

这是我用来将video合并到一起的方法的开始

-(void) mergeVideosAndAudio:(AVAsset *)audioAsset{ //Load Video Assets NSError *error; NSArray *dirFiles; if ((dirFiles = [[NSFileManager defaultManager] contentsOfDirectoryAtPath:[self documentsDirectory] error:&error]) == nil) { // handle the error }; // find all the temp files NSArray *movFiles = [dirFiles filteredArrayUsingPredicate:[NSPredicate predicateWithFormat:@"self BEGINSWITH 'temp'"]]; NSLog(@"The are %i temp files",movFiles.count); //Create assets array NSMutableArray *assets = [[NSMutableArray alloc]init]; for (int i = 0; i < movFiles.count; i++) { NSString *videoURL = [[self documentsDirectory] stringByAppendingPathComponent: [NSString stringWithFormat:@"temp%i.mov", i]]; NSURL *url = [NSURL fileURLWithPath:videoURL]; AVURLAsset *videoAsset = [AVURLAsset URLAssetWithURL:url options:nil]; [assets addObject:videoAsset]; } NSLog(@"assets:%i ", assets.count); // a second way for (id obj in assets) NSLog(@"obj: %@", obj); //Create the composition AVMutableComposition *mixComposition = [[AVMutableComposition alloc] init]; // 1 - Video track AVMutableCompositionTrack *firstTrack = [mixComposition addMutableTrackWithMediaType:AVMediaTypeVideo preferredTrackID:kCMPersistentTrackID_Invalid]; CMTime videoTrackDuration; for (int j = 0; j < assets.count; j++) { AVURLAsset *currentAsset = assets[j]; videoTrackDuration = CMTimeAdd(videoTrackDuration, currentAsset.duration); CMTime time; if (j == 0) { time = kCMTimeZero; }else{ AVURLAsset *previousAsset = assets[j-1]; time = previousAsset.duration; } AVAssetTrack *assetTrack = [[currentAsset tracksWithMediaType:AVMediaTypeVideo] objectAtIndex:0]; [firstTrack insertTimeRange:CMTimeRangeMake(kCMTimeZero, currentAsset.duration) ofTrack:assetTrack atTime:time error:nil]; } 

我遇到的问题是tracksWithMediaType属性是一个空数组。 这是控制台

在这里输入图像说明

任何帮助将不胜感激。 谢谢

你看过这个链接吗?

现在我正在研究解决scheme,现在KVO的轨道键:

 [item addObserver:self forKeyPath:kTracksKey options:opts context:nil];