iOS 根据视频url获取某一帧图片并实现三级缓存

来源:互联网 发布:在这网络里认识你铃声 编辑:程序博客网 时间:2024/05/18 07:44

该代码实现借助SDImageCache缓存机制实现三级缓存

创建一个UIImageView 的Category 导入 SDImageCache

#import <SDWebImage/SDImageCache.h>
- (void)videoImageWithvideoURL:(NSURL *)videoURL atTime:(NSTimeInterval)time {        //先从缓存中找是否有图片    SDImageCache *cache =  [SDImageCache sharedImageCache];    UIImage *memoryImage =  [cache imageFromMemoryCacheForKey:videoURL.absoluteString];    if (memoryImage) {        self.image = memoryImage;        return;    }else{        UIImage *diskImage =  [cache imageFromDiskCacheForKey:videoURL.absoluteString];        if (diskImage) {            self.image = diskImage;            return;        }    }        if (!time) {        time = 1;    }        dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{        AVURLAsset *asset = [[AVURLAsset alloc] initWithURL:videoURL options:nil];        NSParameterAssert(asset);        AVAssetImageGenerator *assetImageGenerator =[[AVAssetImageGenerator alloc] initWithAsset:asset];        assetImageGenerator.appliesPreferredTrackTransform = YES;        assetImageGenerator.apertureMode = AVAssetImageGeneratorApertureModeEncodedPixels;        CGImageRef thumbnailImageRef = NULL;        CFTimeInterval thumbnailImageTime = time;        NSError *thumbnailImageGenerationError = nil;        thumbnailImageRef = [assetImageGenerator copyCGImageAtTime:CMTimeMake(thumbnailImageTime, 60)actualTime:NULL error:&thumbnailImageGenerationError];        if(!thumbnailImageRef)            NSLog(@"thumbnailImageGenerationError %@",thumbnailImageGenerationError);        UIImage*thumbnailImage = thumbnailImageRef ? [[UIImage alloc]initWithCGImage: thumbnailImageRef] : nil;                dispatch_async(dispatch_get_main_queue(), ^{            SDImageCache *cache =  [SDImageCache sharedImageCache];            [cache storeImage:thumbnailImage forKey:videoURL.absoluteString toDisk:YES];            self.image = thumbnailImage;        });            });   }
原创粉丝点击