使用 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
}
我需要从视频中获取缩略图 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
}