使用 SDWebImage 从视频 URL 中获取缩略图

Fetch Thumbnail from Video URL using SDWebImage

我需要从视频中获取缩略图 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 委托时都被提取。 如果我错了,请提出任何其他方法。

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

没有使用 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
}