在iOS中以90度程序旋转录制的视频

时间:2017-03-02 07:36:27

标签: ios objective-c iphone

我在iphone中录制了一段视频,我正在获取其本地文件URL。有没有办法使用URL将该视频旋转90度?

2 个答案:

答案 0 :(得分:2)

您可以在使用AVMutableVideoCompositionLayerInstruction课程导出会话之前轮播视频,并可以在其上应用Transform

这是方法

 [yourlayerInstruction setTransform:CGAffineTransformMakeRotation(M_PI/2) atTime:firstAssets.duration];

这是完整的实现

          AVMutableComposition *mixComposition = [[AVMutableComposition alloc] init];

          AVMutableCompositionTrack *firstTrack = [mixComposition addMutableTrackWithMediaType:AVMediaTypeVideo
                                                                                preferredTrackID:kCMPersistentTrackID_Invalid];


          AVMutableVideoCompositionInstruction * mainInstruction = [AVMutableVideoCompositionInstruction videoCompositionInstruction];
            mainInstruction.timeRange = CMTimeRangeMake(kCMTimeZero, CMTimeAdd(firstAsset.duration, secondAsset.duration));

          AVMutableVideoCompositionLayerInstruction *firstlayerInstruction = [AVMutableVideoCompositionLayerInstruction 
    videoCompositionLayerInstructionWithAssetTrack:firstTrack]; 

// set Trasform Here 
  [firstlayerInstruction setTransform:CGAffineTransformMakeRotation(M_PI/2) atTime:kCMTimeZero];

       [firstlayerInstruction setOpacity:0.0 atTime:firstAsset.duration];

          mainInstruction.layerInstructions = [NSArray arrayWithObjects:firstlayerInstruction,nil];;

         AVMutableVideoComposition *mainCompositionInst = [AVMutableVideoComposition videoComposition];

         mainCompositionInst.instructions = [NSArray arrayWithObject:mainInstruction];
            mainCompositionInst.frameDuration = CMTimeMake(1, 30);
            mainCompositionInst.renderSize = CGSizeMake(320.0, 480.0);

         AVAssetExportSession *exporter = [[AVAssetExportSession alloc] initWithAsset:mixComposition
                                                                              presetName:AVAssetExportPreset640x480];
            exporter.outputURL=url;
            exporter.videoComposition=mainCompositionInst;
            exporter.outputFileType = AVFileTypeQuickTimeMovie;
            exporter.shouldOptimizeForNetworkUse = YES;
            [exporter exportAsynchronouslyWithCompletionHandler:^{
                dispatch_async(dispatch_get_main_queue(), ^
                {
                    [self exportDidFinish:exporter];
                });
            }];

我希望这会对你有所帮助

答案 1 :(得分:-1)

如果您使用MPMoviePlayerViewController播放视频: - 然后你可以尝试这个, 首先使用下面的行

从包中获取您的网址
  NSURL *fileUrl = [NSURL fileURLWithPath:[[NSBundle mainBundle] pathForResource:@"your video" ofType:@"mp4"]];

或者您可以直接在mpmovieplayerviewcontroller

中使用本地文件网址

然后创建MPmovieplayerview控制器的对象并使用您的视频文件,如下所示: -

    MPMoviePlayerViewController *moviePlayerController = [[MPMoviePlayerViewController alloc]initWithContentURL:fileUrl];
    [moviePlayerController.moviePlayer prepareToPlay];
    moviePlayerController.view.transform = CGAffineTransformMakeRotation(M_PI/2);
    [self.view addSubview:moviePlayerController.view];

希望它有所帮助!