在将视频与其他视频合并后,我将视频上传到服务器,但录制的视频顺时针旋转



合并代码 -

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),然后在发送到服务器之前相应地旋转视频。

最新更新