【问题标题】:Fetch Thumbnail from Video URL using SDWebImage使用 SDWebImage 从视频 URL 中获取缩略图
【发布时间】:2020-07-02 15:12:32
【问题描述】:

我需要从视频 URL 中获取缩略图以显示在 UITableViewCell 中的 ImageView 中。

我可以使用此方法获取缩略图,但它会占用大量资源,因此在调用 cellForRowAtIndexPath 时,tableview 滚动会滞后并停止。

这就是方法。

func createThumbnailOfVideoFromFileURL(videoURL: String) -> UIImage? {
    let asset = AVAsset(url: URL(string: videoURL)!)
    let assetImgGenerate = AVAssetImageGenerator(asset: asset)
    assetImgGenerate.appliesPreferredTrackTransform = true
    let time = CMTimeMakeWithSeconds(Float64(1), 100)
    do {
        let img = try assetImgGenerate.copyCGImage(at: time, actualTime: nil)
        let thumbnail = UIImage(cgImage: img)
        return thumbnail
    } catch {
        return UIImage(named: "ico_placeholder")
    }
}

任何人都可以建议我使用 SDWebImage 的替代方法,以便图像进入缓存并且不会在每次调用 UITableView 委托时获取。 如果我错了,请提出任何其他方法。

【问题讨论】:

  • 有人帮忙吗?
  • 你有得到任何帮助吗?
  • 嘿,你有得到任何帮助吗?我面临同样的问题。谢谢

标签: ios swift video sdwebimage


【解决方案1】:

我按原样使用上述方法并将图像缓存在 UIImage 数组中,并在cellForRowAtIndexPath 中进行检查,如果图像存在于该特定索引处,则使用其他在后台获取图像。

【讨论】:

    【解决方案2】:

    不使用 SDWebImage,但这段代码就像一个魅力

    func getThumbnailFromUrl(_ url: String?, _ completion: @escaping ((_ image: UIImage?)->Void)) {
            
            guard let url = URL(string: (url ?? "")) else { return }
            DispatchQueue.main.async {
                let asset = AVAsset(url: url)
                let assetImgGenerate = AVAssetImageGenerator(asset: asset)
                assetImgGenerate.appliesPreferredTrackTransform = true
                
                let time = CMTimeMake(value: 2, timescale: 1)
                do {
                    let img = try assetImgGenerate.copyCGImage(at: time, actualTime: nil)
                    let thumbnail = UIImage(cgImage: img)
                    completion(thumbnail)
                } catch let error{
                    print("Error :: ", error)
                    completion(nil)
                }
            }
        }
    

    用法

    self.getThumbnailFromUrl(video.url.description) { (image) in
         //Use image where you want to use
    }
    

    【讨论】:

      猜你喜欢
      • 2011-05-25
      • 2011-10-12
      • 2020-05-16
      • 2011-06-18
      • 2020-06-26
      • 2013-08-31
      • 2017-10-21
      • 2018-03-25
      • 2010-11-23
      相关资源
      最近更新 更多