传递到第二个UIViewController时无法保存或观看视频

时间:2018-09-07 10:43:56

标签: ios objective-c gpuimage

我有一个UIViewController,我在其中使用GPUImage创建视频。现在,在创建视频后,我将通过NSURL传递到第二个UIViewController,在此处向我们显示一个AVPlayerViewController

我通过以下显示它

- (void)showTheVideo {

    /// ----------
    /// Show the video
    /// ----------


    // grab a local URL to our video
    NSURL *videoURL = self.completeMovieURL;

    // create an AVPlayer
    self.player = [AVPlayer playerWithURL:videoURL];

    // create a player view controller
    AVPlayerViewController *controller = [[AVPlayerViewController alloc]init];
    controller.player = self.player;
    [controller setShowsPlaybackControls:TRUE];
    [controller.view setBackgroundColor:[UIColor clearColor]];
     //controller.videoGravity = AVLayerVideoGravityResizeAspectFill;


    // show the view controller
    [self addChildViewController:controller];
    [self.viewVideo addSubview:controller.view];
    controller.view.frame = self.viewVideo.frame;

    [self.player play];

}

问题是第二个UIViewController上的播放确实命中和错过。有时会加载视频,而其他时候则不会。我检查了self.completeMovieURL,路径就在那里。

现在要测试是否确实创建了视频,我已经尝试使用将视频保存在第二个控制器上

[PHAssetChangeRequest creationRequestForAssetFromVideoAtFileURL:self.completeMovieURL];

但是出现错误,但是如果我尝试将其保存在视图控制器上,则可以在其中保存。

请问有人可以解释为什么我可以将视频保存在第一个控制器上,但不能保存在第二个控制器上,并且在播放时遇到问题吗?

1 个答案:

答案 0 :(得分:0)

使用以下代码保存您的视频:

#import <AssetsLibrary/ALAsset.h>
#import <AssetsLibrary/ALAssetsLibrary.h>
#import <AssetsLibrary/ALAssetRepresentation.h>

- (void)writeToAlbum:(NSURL *)outputFileURL{
    self.library = [[ALAssetsLibrary alloc] init];
    if ([_library videoAtPathIsCompatibleWithSavedPhotosAlbum:outputFileURL])
    {
        [_library writeVideoAtPathToSavedPhotosAlbum:outputFileURL
                                     completionBlock:^(NSURL *assetURL, NSError *error)
         {
             if (error)
             {
                 dispatch_async(dispatch_get_main_queue(), ^{
                   //  [SVProgressHUD showErrorWithStatus:@"failed"];
                 });
                 NSLog(@"fail to saved: %@", error);
             }else{
                 NSLog(@"saved");
                 dispatch_async(dispatch_get_main_queue(), ^{
                   //  [SVProgressHUD showSuccessWithStatus:@"saved"];
                 });
             }
         }];
    }}