微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

如何解决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 举报,一经查实,本站将立刻删除。