首页 > 解决方案 > 想要从 avplayer 获取视频当前播放时间和视频总时间

问题描述

我正在实现AVPlayer在我的应用程序中播放视频并且我完全播放视频现在我想要视频总时间和当前播放时间连续所以我尝试了一些方法让我告诉你

我尝试过使用NotificationCenter,但为此我每次都得到 0.0,过了一段时间我崩溃了,让我给你看我的代码

这是我的视频播放代码

 func videoPlay(){
        player = AVPlayer(url: videoURL!)
        let playerController = AVPlayerViewController()
        playerController.player = player
        self.addChild(playerController)
        self.view.addSubview(playerController.view)
        playerController.view.frame = CGRect(x: 0, y: 20, width: 375, height: 207)
        player.play()
        if player.rate != 0 && player.error == nil {
            print("video player is playing.................")
              NotificationCenter.default.addObserver(self,selector: #selector(gettime(_:)),name: nil,object: nil)
        } else {
            print("video player is NOT playing.")
        }
    }

在这里我试图从下面的视频中获取时间

@objc func gettime(_ notification: Notification){
        let currentTime = Float(player.currentTime().value)
        print(currentTime)
    }

但我仍然没有得到当前的播放时间我正在崩溃并给出以下错误

错误

Thread 8: EXC_BAD_ACCESS (code=1, address=0xfffffffff7ac4eef)

标签: iosswiftuitableviewavplayer

解决方案


在您的视图中定义标签currentTimeLable并使用此代码

 let interval = CMTime(value: 1, timescale: 2)
            player?.addPeriodicTimeObserver(forInterval: interval, queue: DispatchQueue.main, using: { (progressTime) in

                let seconds = CMTimeGetSeconds(progressTime)
                let secondString = String(format: "%02d", Int(seconds) % 60)
                let minutString = String(format: "%02d", Int(seconds) / 60)
                self.currentTimeLabel.text = "\(minutString):\(secondString)"


推荐阅读