我有一个UICollectionViewCell
,其中包含一个AVPlayer
。在cellForItemAtIndexpath
上,我需要检查分配给URL
的{{1}}是否可播放。我使用以下代码:
AVPlayer
但是,当我滚动guard AVAsset(url: url).isPlayable else {
...
}
时,它会冻结一秒钟,同时检查网址是否可播放。我该如何异步进行此操作?
答案 0 :(得分:0)
我在Apple文档中找到了this article。尝试这样的事情:
func isPlayable(url: URL, completion: @escaping (Bool) -> ()) {
let asset = AVAsset(url: url)
let playableKey = "playable"
asset.loadValuesAsynchronously(forKeys: [playableKey]) {
var error: NSError? = nil
let status = asset.statusOfValue(forKey: playableKey, error: &error)
let isPlayable = status == .loaded
DispatchQueue.main.async {
completion(isPlayable)
}
}
}