How to detect AVPlayer actually started to play in swift

后端 未结 7 1477
情话喂你
情话喂你 2020-12-16 10:59

Hello I have set my UISliderminimum value to 0.00. Then I set it\'s max value in this way.

self.viewPlayer.layer.addSublayer(playerLayer)
    le         


        
7条回答
  •  太阳男子
    2020-12-16 11:32

    Since iOS 10 you can observe timeControlStatus property of AVPlayer. It can be .playing.

    Check the code:

    private func setupAVPlayer() {
        avPlayer.addObserver(self, forKeyPath: "status", options: [.old, .new], context: nil)
        if #available(iOS 10.0, *) {
            avPlayer.addObserver(self, forKeyPath: "timeControlStatus", options: [.old, .new], context: nil)
        } else {
            avPlayer.addObserver(self, forKeyPath: "rate", options: [.old, .new], context: nil)
        }
    }
    
    override func observeValue(forKeyPath keyPath: String?, of object: Any?, change: [NSKeyValueChangeKey : Any]?, context: UnsafeMutableRawPointer?) {
        if object as AnyObject? === avPlayer {
            if keyPath == "status" {
                if avPlayer.status == .readyToPlay {
                    avPlayer.play()
                }
            } else if keyPath == "timeControlStatus" {
                if #available(iOS 10.0, *) {
                    if avPlayer.timeControlStatus == .playing {
                        videoCell?.muteButton.isHidden = false
                    } else {
                        videoCell?.muteButton.isHidden = true
                    }
                }
            } else if keyPath == "rate" {
                if avPlayer.rate > 0 {
                    videoCell?.muteButton.isHidden = false
                } else {
                    videoCell?.muteButton.isHidden = true
                }
            }
        }
    }
    

提交回复
热议问题