如何检测AVPlayerItem播放结束?

21

我一直在查看AVPlayerItemAVPlayer文档,但似乎没有回调函数可以在项目播放完成后调用。我希望能够利用某种委托回调或者AVPlayerActionAtItemEnd提供一个自定义动作来实现。

如何找到一种方法来检测AVPlayer何时完成了项目的播放?


https://dev59.com/o10b5IYBdhLWcg3wR_fe#57980323 - Fattie
3个回答

45

它使用NSNotification在播放完成时发出提醒。

注册通知:

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

完成时调用的方法:

-(void)itemDidFinishPlaying:(NSNotification *) notification {
    // Will be called when AVPlayer finishes playing playerItem
}

如果您使用AVPlayerViewController,可以使用[avPlayer currentItem] - abhimuralidharan
我能观察曲目名称以更新我的用户界面吗? - Awais Fayyaz

7

Swift-i-fied (版本3)

class MyVideoPlayingViewController: AVPlayerViewController {

    override func viewDidLoad() {
        // Do any additional setup after loading the view.
        super.viewDidLoad()

        let videoURL = URL(fileURLWithPath: Bundle.main.path(forResource: "MyVideo", 
                                                                  ofType: "mp4")!)
        player = AVPlayer(url: videoURL)

        NotificationCenter.default.addObserver(self,
                                           selector: #selector(MyVideoPlayingViewController.animationDidFinish(_:)),
                                           name: .AVPlayerItemDidPlayToEndTime,
                                           object: player?.currentItem)
    }

    override func viewDidAppear(_ animated: Bool) {
        super.viewDidAppear(animated)
        player?.play()
    }

    func animationDidFinish(_ notification: NSNotification) {
        print("Animation did finish")
    }

    deinit {
        NotificationCenter.default.removeObserver(self)
    }

}

回答不错,但请确保在观察者或任何在addObserver:selector:name:object:中指定的对象被释放之前调用removeObserver(_:name:object:)。 - pierre23

0

这是我做的方法。

[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(movieFinishedCallback:) name:AVPlayerItemDidPlayToEndTimeNotification object:player.currentItem];


- (void)movieFinishedCallback:(NSNotification*)aNotification
{
   // [self dismissViewControllerAnimated:YES completion:Nil];
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接