playerItemDidReachEnd перемещается в неправильный ViewController - PullRequest
1 голос
/ 10 октября 2019

У моего приложения есть стартовая страница и вторая страница с кнопками для воспроизведения видео. Когда видео закончено, AVPlayer закрывается с помощью playerItemDidReachEnd. Но по какой-то причине он показывает стартовую страницу, а не вторую страницу, когда игрок закрывается. Как я могу заставить его показывать вторую страницу вместо этого?

#import "ViewController.h"
@import AVKit;
@import AVFoundation;

@interface ViewController ()
@property(nonatomic, readonly) AVPlayerItem *currentItem;
@end
@implementation ViewController

 AVPlayerViewController *playerViewController;

- (void)viewDidLoad {
    [super viewDidLoad];
    playerViewController = [[AVPlayerViewController alloc] init];
}


-(void)playerItemDidReachEnd:(NSNotification *) notification {
    //remove the player
    [self dismissViewControllerAnimated:NO completion:nil];
    [[NSNotificationCenter defaultCenter] removeObserver:self];
}

- (IBAction)playVideo:(id)sender {
    NSURL *url = [NSURL URLWithString:@"https://clips.vorwaerts-gmbh.de/big_buck_bunny.mp4"];
    AVURLAsset *asset = [AVURLAsset assetWithURL: url];
    AVPlayerItem *item = [AVPlayerItem playerItemWithAsset: asset];    
    AVPlayer * player = [[AVPlayer alloc] initWithPlayerItem: item];
    playerViewController.player = player;
    UIScreen *mainScreen = [UIScreen mainScreen];
    CGRect viewRect = mainScreen.bounds;
    playerViewController.view.frame = viewRect;
    playerViewController.showsPlaybackControls = YES;
    [self.view addSubview:playerViewController.view];

       [player play];

    /* When the player item has played to its end time we'll dismiss the controller */
    [[NSNotificationCenter defaultCenter] addObserver:self
                                             selector:@selector(playerItemDidReachEnd:)
                                                 name:AVPlayerItemDidPlayToEndTimeNotification
                                               object:playerViewController.player.currentItem];

}

@end

1 Ответ

1 голос
/ 10 октября 2019

Если я правильно понимаю ваш код, ваша "вторая страница" будет ViewController.

Вы добавляете AVPlayerViewController на [self.view addSubview:playerViewController.view];, поэтому вам нужно удалить это представление, вызвав [playerViewController.view removeFromSuperview].

После [self dismissViewControllerAnimated:NO completion:nil]; вы отклоняете целое ViewController, а не только AVPlayerViewController.

...