异步获取视频某一帧图片

#import 
@implementation UIImageView (Video)
- (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)
           SLog(@"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 completion:nil];
           self.image = thumbnailImage;
       });
       
   });
}

@end

你可能感兴趣的:(异步获取视频某一帧图片)