Ios 为活动注册AVPlayer-如何知道AVPlayer已播放完电影

Ios 为活动注册AVPlayer-如何知道AVPlayer已播放完电影,ios,avplayer,Ios,Avplayer,我知道AVPlayerItem(AVPlayer的一个子类)能够订阅AvPlayerItemDidPlaytoEndTime通知 AVPlayer没有这样的功能,我需要使用AVPlayer,除非没有办法解决这个问题,并且知道(在我的例子中)什么时候播放完成 如何在AVPlayer中执行此操作?我阅读了这些类的一些文档,但没有立即找到答案 -(void)setupVideoView{ _videoPlayer = [AVPlayer playerWithURL:urlObjectHer

我知道AVPlayerItem(AVPlayer的一个子类)能够订阅
AvPlayerItemDidPlaytoEndTime通知

AVPlayer没有这样的功能,我需要使用AVPlayer,除非没有办法解决这个问题,并且知道(在我的例子中)什么时候播放完成

如何在AVPlayer中执行此操作?我阅读了这些类的一些文档,但没有立即找到答案

-(void)setupVideoView{


    _videoPlayer = [AVPlayer playerWithURL:urlObjectHere];

    AVPlayerLayer *layer = [AVPlayerLayer layer];

    [layer setPlayer:_videoPlayer];
    [layer setFrame:_videoView.bounds];

    [_videoView.layer addSublayer:layer];

    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(itemDidFinishPlaying:) name:AVPlayerItemDidPlayToEndTimeNotification object:_videoPlayer];




}

-(void)itemDidFinishPlaying:(NSNotification *) notification {
    // does not get called

    DLog(@"");



}

正如我所知,没有办法通过AVPlayer层知道完整的时间

AVAsset-AVPlayerItem-AVPlayer是AvsFoundation中组合的三个组件。如果你想DIY更多的AVPlayer功能,你需要使用较低级别的AVPlayer,它们是AVAsset和AVPlayerItem

如果您只需要AVPlayer的正常实用程序,我想只需要使用AVKit中的AVPlayServiceWController


不建议使用MPMoviePlayer,因为它的大部分内容都已弃用。习惯AVPlayer…

我可以通过以下方式解决这个问题:我使用了一个AVPlayerItem并从该项目创建了我的AVPlayer,将通知订阅到播放器项目

-(void)setupVideoView{


     AVPlayerItem* playerItem = [AVPlayerItem playerItemWithURL:urlObjectHere];//edited

    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(itemDidFinishPlaying:) name:AVPlayerItemDidPlayToEndTimeNotification object:playerItem];//edited

    _videoPlayer = [[AVPlayer alloc] initWithPlayerItem:playerItem];//edited

    AVPlayerLayer *layer = [AVPlayerLayer layer];

    [layer setPlayer:_videoPlayer];
    [layer setFrame:_videoView.bounds];

    [_videoView.layer addSublayer:layer];

    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(itemDidFinishPlaying:) name:AVPlayerItemDidPlayToEndTimeNotification object:_videoPlayer];




}

-(void)itemDidFinishPlaying:(NSNotification *) notification {
    // gets called finally


    AVPlayerItem *p = [notification object]; //bring video back to zero
    [p seekToTime:kCMTimeZero];

    DLog(@"");



}

我是不是应该放弃它,改用MPMoviePlayer?我明白了,谢谢你。我不知道MPMoviePlayer被弃用了。我想用AVPlayerItem。如何使其在UIView中播放并调用播放/暂停?再次感谢,我能够使用AVPlayerItem解决我的问题。没问题,我知道AVPlayer中完整时间的唯一方法是,通过NSNotificationCenter,播放和暂停是正确的,有两个实例方法[yourplayer play];和[你的球员暂停];你可以判断你的玩家。rate>0要知道它是否在玩,rate是玩家的游戏速度