7
-(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];
}
I 'e sahip am sorun currentAsset arasında tracksWithMediaType
özelliği boş bir dizi olmasıdır. İşte Herhangi bir yardım büyük takdir edilecektir
konsoludur. Teşekkürler
Eğer currentAsset aslında dosya sisteminde gerçek dosyayı işaret olmadığını kontrol ettiniz:
Ben KVO en izler anahtarı o anda bir çözüm üzerinde çalışıyorum? – jlw
@jlw Anladığım kadarıyla, currentAsset, konsolda görülebilen varlıklar dizisinde saklanan dosyayı alır. – Kaitis
Evet, ancak tüm currentAssets'lerin AVPlayer veya MPMoviePlayer ile oynanabilir olması sorumuydu. Bir dosya tutmayan bir konuma işaret eden bir NSURL ile bir AVAsset oluşturmak mümkündür. – jlw