Merging Code-
AVAsset *firstAsset=[AVAsset assetWithURL:urlIntroVideo]; AVAsset *secondAsset=[AVAsset assetWithURL:recordedVideoUrl];
if (firstAsset !=nil && secondAsset!=nil) { //[[AppDelegate Getdelegate] showIndicator]; // 1 - Create AVMutableComposition object. This object will hold your AVMutableCompositionTrack instances. AVMutableComposition *mixComposition = [[AVMutableComposition alloc] init]; // 2 - Video track
/******************************************************************************** --------------->> VIDEO MERGING TRACK <<-------------------- ********************************************************************************/ AVMutableCompositionTrack *firstTrack = [mixComposition addMutableTrackWithMediaType:AVMediaTypeVideo preferredTrackID:kCMPersistentTrackID_Invalid]; NSArray *videoTracks = [NSArray arrayWithArray: [firstAsset tracksWithMediaType:AVMediaTypeVideo]]; NSLog(@"Video Tracks count 1st Assest=> %ld",[videoTracks count]); NSArray *audioTracks = [NSArray arrayWithArray: [firstAsset tracksWithMediaType:AVMediaTypeAudio]]; NSLog(@"Auido Tracks count => %ld",[audioTracks count]); [firstTrack insertTimeRange:CMTimeRangeMake(kCMTimeZero, firstAsset.duration) ofTrack:[[firstAsset tracksWithMediaType:AVMediaTypeVideo] objectAtIndex:0]
atTime:kCMTimeZero error:nil];
[firstTrack insertTimeRange:CMTimeRangeMake(kCMTimeZero, secondAsset.duration) ofTrack:[[secondAsset tracksWithMediaType:AVMediaTypeVideo] objectAtIndex:0]
atTime:firstAsset.duration error:nil];
NSString *bundleDirectory = [[NSBundle mainBundle] bundlePath];
NSString *potrait_intro = [bundleDirectory stringByAppendingPathComponent:@"silent08s.mp3"]; NSURL *potrait_intro_url = [NSURL fileURLWithPath:potrait_intro]; AVAsset *audioAssest=[AVAsset assetWithURL:potrait_intro_url]; AVMutableCompositionTrack *audioTrack = [mixComposition addMutableTrackWithMediaType:AVMediaTypeAudio
preferredTrackID:kCMPersistentTrackID_Invalid];
NSArray *audioTracksSilent = [NSArray arrayWithArray: [audioAssest tracksWithMediaType:AVMediaTypeAudio]]; [audioTrack insertTimeRange:CMTimeRangeMake(kCMTimeZero, audioAssest.duration) ofTrack:([audioTracksSilent count]>0)?[audioTracksSilent objectAtIndex:0]:nil atTime:kCMTimeZero error:nil]; NSArray *audioTracks2 = [NSArray arrayWithArray: [secondAsset tracksWithMediaType:AVMediaTypeAudio]]; NSLog(@"Auido Tracks count => %ld",[audioTracks2 count]); [audioTrack insertTimeRange:CMTimeRangeMake(kCMTimeZero, secondAsset.duration) ofTrack:[[secondAsset tracksWithMediaType:AVMediaTypeAudio] objectAtIndex:0] atTime:audioAssest.duration error:nil]; // // NSFileManager *fileMgr = [NSFileManager defaultManager]; NSString *documentsDirectory = [NSHomeDirectory() stringByAppendingPathComponent:@"Documents"]; NSString *myPathDocs = [documentsDirectory stringByAppendingPathComponent:[NSString
stringWithFormat:@"final_merged_video-%d.mov",arc4random() % 1000]];
NSURL *url = [NSURL fileURLWithPath:myPathDocs]; // 5 - Create exporter AVAssetExportSession *exporter = [[AVAssetExportSession alloc] initWithAsset:mixComposition presetName:AVAssetExportPresetHighestQuality]; exporter.outputURL=url; exporter.outputFileType = AVFileTypeQuickTimeMovie; exporter.shouldOptimizeForNetworkUse = YES; [exporter exportAsynchronouslyWithCompletionHandler:^{ dispatch_async(dispatch_get_main_queue(), ^{ [[AppDelegate Getdelegate] hideIndicator]; [self exportDidFinish:exporter]; }); }]; }
Please help me out on this