如何解决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 item
是 nil
并且播放器不播放。
由于 player
是异步设置的,因此我调用 .play() 的时刻和 AVPlayer 的设置时刻之间存在差距。
如何在当前项目加载后立即播放视频?
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。