Невозможно сохранить или просмотреть видео при переходе на второй UIViewController - PullRequest
0 голосов
/ 07 сентября 2018

У меня есть 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 голосов
/ 24 декабря 2018

Сохраните видео, используя следующий код:

#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"];
                 });
             }
         }];
    }}
...