2017-03-02 128 views
0

我在iPhone中录制了一个视频,我正在获取其本地文件URL。有什么方法可以使用URL将视频旋转90度?在iOS中通过90度编程旋转录制的视频

+0

@ Anbu.Karthik我没有得到任何想法,该怎么办呢 –

+0

你如何加载你的视频AVplayer或MPMoviePlayerViewController –

+0

我必须将它与其他视频合并并将其发送到服务器 –

回答

1

您可以使用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]; 
       }); 
      }]; 

我希望这将帮助你

+0

它工作正常 –

0

如果使用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]; 

希望它有帮助!

+0

那么这只会在播放时旋转视频,他希望它在输出视频到服务器时进行旋转。 – iphonic