AVPlayer play() 在 currentItem 可用之前调用 - swift - 以编程方式

问题描述

我像这样使用 AvPlayer 异步加载视频:

init(videoUrl: String){
    super.init(nibName: nil,bundle: nil)
    
    
    
    guard let url = URL(string: videoUrl) else { return }
    
    let asset = AVAsset(url: url)
    let playableKey = "playable"
    let playerItem = AVPlayerItem(asset: asset)

    // Load the "playable" property
    asset.loadValuesAsynchronously(forKeys: [playableKey]) {
        var error: NSError? = nil

        let status = asset.statusOfValue(forKey: playableKey,error: &error)
        switch status {
        case .loaded:
            // Sucessfully loaded. Continue processing.
            dispatchQueue.main.async {
                self.progressHud.dismiss()
            }
            
            
            self.player = AVPlayer(playerItem: playerItem)
            self.player.isMuted = self.isVideoMuted
            self.playerLayer.player = self.player
            
        case .Failed:
            // Handle error
            
            dispatchQueue.main.async{
                self.progressHud.indicatorView = .none
                self.progressHud.textLabel.text = "Can't load \nvideo"
                self.progressHud.textLabel.font = UIFont(name: "avenir-black",size: 16)
            }
            break
        

        default:
            // Handle all other cases
            break
        }
    }
}

我注意到当我在另一个控制器中调用 AVPlayer 函数 .play() 时,current itemnil 并且播放器不播放。

由于 player 是异步设置的,因此我调用 .play() 的时刻和 AVPlayer 的设置时刻之间存在差距。

如何在当前项目加载后立即播放视频?

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)