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

时间:2017-02-24 11:50:23

标签: ios swift video sdwebimage

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

2 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分:0)

不使用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
}