合并代码 -
avasset *firstAsset = [avasset AssetWithurl:urlintrovideo];Avasset *secondAsset = [avasset AssetWithurl:recordedVideourl];
if(firstAsset!= nil&& secondAsset!= nil){ //[[appdelegate getDelegate] showIndicator]; //1-创建AvmutableComposition对象。此对象将包含您的AvMutableCompositionTrack实例。 avmutableComposition *mixComposition = [[[avmutableComposition salroc] init]; //2-视频跟踪
/******************************************************************************** --------------->> 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错误:nil];
[firstTrack insertTimeRange:CMTimeRangeMake(kCMTimeZero, secondAsset.duration) ofTrack:[[secondAsset tracksWithMediaType:AVMediaTypeVideo] objectAtIndex:0]
attime:firstAsset.duration错误:nil];
nsString *bundledirectory = [[[NSBUNDLE MAINBUNDLE] BUNDLEDERPATH];
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]; }); }]; }
请帮助我
当您合并视频和/或服务器无法处理时,您可能会在avasset上放松旋转信息。您需要做的是获取旋转信息(例如,您可以使用此信息:例如:https://gist.github.com/lukabernardi/5020724),然后在发送到服务器之前相应地旋转视频。
。