Timeline Progress bar for AVPlayer

后端 未结 8 2190
情深已故
情深已故 2020-12-22 22:31

AVPlayer is fully customizable, unfortunately there are convenient methods in AVPlayer for showing the time line progress bar.

AVPl         


        
8条回答
  •  离开以前
    2020-12-22 22:35

    In my case, the following code works Swift 3:

    var timeObserver: Any?
    override func viewDidLoad() {
        ........
        let interval = CMTime(seconds: 0.05, preferredTimescale: CMTimeScale(NSEC_PER_SEC))
        timeObserver = avPlayer.addPeriodicTimeObserver(forInterval: interval, queue: DispatchQueue.main, using: { elapsedTime in
                self.updateSlider(elapsedTime: elapsedTime)     
            })
    }
    
    func updateSlider(elapsedTime: CMTime) {
        let playerDuration = playerItemDuration()
        if CMTIME_IS_INVALID(playerDuration) {
            seekSlider.minimumValue = 0.0
            return
        }
        let duration = Float(CMTimeGetSeconds(playerDuration))
        if duration.isFinite && duration > 0 {
            seekSlider.minimumValue = 0.0
            seekSlider.maximumValue = duration
            let time = Float(CMTimeGetSeconds(elapsedTime))
            seekSlider.setValue(time, animated: true)  
        }
    }
    
    private func playerItemDuration() -> CMTime {
        let thePlayerItem = avPlayer.currentItem
        if thePlayerItem?.status == .readyToPlay {
            return thePlayerItem!.duration
        }
        return kCMTimeInvalid
    }
    
    override func viewDidDisappear(_ animated: Bool) {
        super.viewDidDisappear(animated)
        avPlayer.removeTimeObserver(timeObserver!)   
    }
    

提交回复
热议问题