在Swift中无法使用缓存生成视频缩略图

时间:2018-09-03 22:54:42

标签: ios swift swift3 avfoundation nscache

一直在努力使其发挥作用。我正在生成视频缩略图,但是在收藏夹视图中它的负载确实很大。我想缓存它们,但找不到解决方案。

这是我正在使用的代码:

range(0, N)

我把它们做的很小,但每次都仍连接到服务器。请帮忙。

1 个答案:

答案 0 :(得分:3)

您可以使用URLCache

func previewImageFromVideo(url: NSURL) -> UIImage? {
    let url = url as URL
    let request = URLRequest(url: url)
    let cache = URLCache.shared

    if
        let cachedResponse = cache.cachedResponse(for: request),
        let image = UIImage(data: cachedResponse.data)
    {
        return image
    }

    let asset = AVAsset(url: url)
    let imageGenerator = AVAssetImageGenerator(asset: asset)
    imageGenerator.appliesPreferredTrackTransform = true
    imageGenerator.maximumSize = CGSize(width: 250, height: 120)

    var time = asset.duration
    time.value = min(time.value, 2)

    var image: UIImage?

    do {
        let cgImage = try imageGenerator.copyCGImage(at: time, actualTime: nil)
        image = UIImage(cgImage: cgImage)
    } catch { }

    if
        let image = image,
        let data = UIImagePNGRepresentation(image),
        let response = HTTPURLResponse(url: url, statusCode: 200, httpVersion: nil, headerFields: nil)
    {
        let cachedResponse = CachedURLResponse(response: response, data: data)

        cache.storeCachedResponse(cachedResponse, for: request)
    }

    return image
}