首页 > 解决方案 > 使用多个 AVPlayer 时如何检测哪个视频结束了?

问题描述

我在屏幕上并排播放两个视频,所以我有两个 AVPlayer 实例。我正在使用工作正常的通知检测视频播放结束。我的选择器(playerDidFinishPlaying)在两个视频结束时都会被调用。

NotificationCenter.default.addObserver(self, selector: #selector(playerDidFinishPlaying), name: .AVPlayerItemDidPlayToEndTime, object: nil) 

现在我的问题出在选择器(playerDidFinishPlaying)中,我想检测它是为哪个 avplayer 调用的?如何唯一标识视频结束的 AVPlayer?

标签: iosswiftavplayeravplayeritemavkit

解决方案


另一个想法。更新了@black_pearl 的方法

不同的通知注册,不同的通知方式。

    var player = AVPlayer()
    var playerTwo = AVPlayer()



    override func viewDidLoad() {
        super.viewDidLoad()
        NotificationCenter.default.addObserver(self, selector: #selector(playerDidFinishPlay(_:)), name: .AVPlayerItemDidPlayToEndTime, object: player.currentItem)
        NotificationCenter.default.addObserver(self, selector: #selector(playerDidFinishMusic(_:)), name: .AVPlayerItemDidPlayToEndTime, object: playerTwo.currentItem)

    }


       @objc func playerDidFinishPlay(_ noti: Notification) {
           if let p = noti.object as? AVPlayerItem, p == player.currentItem {
                print("1")
           }
       }


    @objc func playerDidFinishMusic(_ noti: Notification) {
        if let p = noti.object as? AVPlayerItem, p == playerTwo.currentItem{
            print("2")
        }
    }

推荐阅读