AVAsset(url:url).isPlayable减慢集合视图

时间:2018-09-21 16:02:48

标签: ios swift

我有一个UICollectionViewCell,其中包含一个AVPlayer。在cellForItemAtIndexpath上,我需要检查分配给URL的{​​{1}}是否可播放。我使用以下代码:

AVPlayer

但是,当我滚动guard AVAsset(url: url).isPlayable else { ... } 时,它会冻结一秒钟,同时检查网址是否可播放。我该如何异步进行此操作?

1 个答案:

答案 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)
        }
    }
}