问题描述
我像这样使用 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 (将#修改为@)