代码之家  ›  专栏  ›  技术社区  ›  Tometoyou

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

  •  0
  • Tometoyou  · 技术社区  · 6 年前

    我有一个 UICollectionViewCell AVPlayer . 在 cellForItemAtIndexpath URL 我要分配到 AVP播放器 是可玩的。我使用以下代码:

    guard AVAsset(url: url).isPlayable else {
       ...
    }
    

    UICollectionView 它会冻结一秒钟,同时检查url是否可播放。如何异步实现这一点?

    1 回复  |  直到 6 年前
        1
  •  0
  •   Tometoyou    6 年前

    我发现 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)
            }
        }
    }