Objective-C如何添加覆盖到video使用AVFoundation?

我一直在试图为video添加叠加效果,现在我只是无法弄清楚为什么当我保存时,video向左旋转了九十度。 我一直在努力解决这个问题,但是和我一样接近。 目前会议预设位于AVCaptureSessionPreset1920x1080。 当我旋转video缩小,我不得不把它翻译到中心。 旋转后无法使video全屏。 请有人帮助我真的很需要它。 我会做任何事!

AVURLAsset *videoAsset = [[AVURLAsset alloc] initWithURL:self.video options:nil]; AVMutableComposition *mixComposition = [AVMutableComposition composition]; AVMutableCompositionTrack *compositionVideoTrack = [mixComposition addMutableTrackWithMediaType:AVMediaTypeVideo preferredTrackID:kCMPersistentTrackID_Invalid]; AVAssetTrack *clipVideoTrack = [[videoAsset tracksWithMediaType:AVMediaTypeVideo] lastObject]; [compositionVideoTrack insertTimeRange:CMTimeRangeMake(kCMTimeZero, videoAsset.duration) ofTrack:clipVideoTrack atTime:kCMTimeZero error:nil]; [compositionVideoTrack setPreferredTransform:[[[videoAsset tracksWithMediaType:AVMediaTypeVideo] objectAtIndex:0] preferredTransform]]; CGSize videoSize = [clipVideoTrack naturalSize]; NSLog(@"WIDTH: %f HEIGHT: %f", clipVideoTrack.naturalSize.width, clipVideoTrack.naturalSize.height); CALayer *parentLayer = [CALayer layer]; CALayer *videoLayer = [CALayer layer]; videoLayer.frame = CGRectMake(0, 0, videoSize.width, videoSize.height); parentLayer.frame = CGRectMake(0, 0, videoSize.width, 5000); [parentLayer addSublayer:videoLayer]; [parentLayer addSublayer:_text.layer]; AVMutableVideoComposition* videoComp = [AVMutableVideoComposition videoComposition]; videoComp.renderSize = [clipVideoTrack naturalSize]; videoComp.frameDuration = CMTimeMake(1, 30); videoComp.animationTool = [AVVideoCompositionCoreAnimationTool videoCompositionCoreAnimationToolWithPostProcessingAsVideoLayer:videoLayer inLayer:parentLayer]; AVMutableVideoCompositionInstruction *instruction = [AVMutableVideoCompositionInstruction videoCompositionInstruction]; instruction.timeRange = CMTimeRangeMake(kCMTimeZero, mixComposition.duration); AVAssetTrack *videoTrack = [[mixComposition tracksWithMediaType:AVMediaTypeVideo] objectAtIndex:0]; AVMutableVideoCompositionLayerInstruction *layerInstruction = [AVMutableVideoCompositionLayerInstruction videoCompositionLayerInstructionWithAssetTrack:videoTrack]; CGAffineTransform t1 = CGAffineTransformMakeTranslation(1500, 0); CGAffineTransform t2 = CGAffineTransformRotate(t1, M_PI_2); CGAffineTransform finalTransform = t2; [layerInstruction setTransform:finalTransform atTime:kCMTimeZero]; instruction.layerInstructions = [NSArray arrayWithObject:layerInstruction]; videoComp.instructions = [NSArray arrayWithObject:instruction]; AVAssetExportSession *assetExport = [[AVAssetExportSession alloc] initWithAsset:mixComposition presetName:AVAssetExportPresetMediumQuality]; assetExport.videoComposition = videoComp; NSString *videoName = @"output.mov"; NSString *exportPath = [NSTemporaryDirectory() stringByAppendingString:videoName]; NSURL *exportURL = [NSURL fileURLWithPath:exportPath]; if ([[NSFileManager defaultManager] fileExistsAtPath:exportPath]) [[NSFileManager defaultManager] removeItemAtPath:exportPath error:nil]; assetExport.outputFileType = AVFileTypeQuickTimeMovie; assetExport.outputURL = exportURL; assetExport.shouldOptimizeForNetworkUse = YES; [assetExport exportAsynchronouslyWithCompletionHandler:^(void){ dispatch_async(dispatch_get_main_queue(), ^{ [self exportDidFinish:assetExport]; }); }]; 

使用这里的示例代码http://www.raywenderlich.com/30200/avfoundation-tutorial-adding-overlays-and-animations-to-videos

它进行video方向计算,并将此方向信息提供给AVMutableVideoCompositionLayerInstruction,它应该产生所需的输出。