获取从照片库中挑选的视频的缩略图

时间:2014-09-15 13:59:57

标签: ios video thumbnails

我知道在stackoverflow上已经多次询问过这个问题。但我的问题不同了。 我正在迭代照片库的相册以获取所有视频及其缩略图。 现在,问题是,我的代码获取每个视频的缩略图非常慢。例如,我的相机胶卷中有14个视频,生成缩略图所需的总时间约为3-4秒。我正在使用此代码。

+(UIImage*)imageFromVideoAtURL:(NSURL*)contentURL {
   UIImage* theImage = nil;
   AVURLAsset* asset = [[AVURLAsset alloc] initWithURL:contentURL options:nil];
   AVAssetImageGenerator* generator = [[AVAssetImageGenerator alloc] initWithAsset:asset];
   generator.appliesPreferredTrackTransform = YES;
   NSError* err = NULL;
   CMTime time = CMTimeMake(1, 60);
   CGImageRef imgRef = [generator copyCGImageAtTime:time actualTime:NULL error:&err];

   theImage = [[[UIImage alloc] initWithCGImage:imgRef] autorelease];

   CGImageRelease(imgRef);
   [asset release];
   [generator release];

   return theImage;
}

我正在寻找一种方法来快速获取所有视频的缩略图,以便用户不必等待。我在苹果商店看到的应用程序只需微秒即可完成相同的操作。请帮忙。

我也尝试过这段代码来生成缩略图,它也很慢。

+(UIImage*)imageFromVideoAtURL:(NSURL*)contentURL {
   UIImage* theImage = nil;
   AVURLAsset* asset = [[AVURLAsset alloc] initWithURL:contentURL options:nil];
   AVAssetImageGenerator* generator = [[AVAssetImageGenerator alloc] initWithAsset:asset];
   generator.appliesPreferredTrackTransform = YES;
   NSError* err = NULL;
   CMTime time = CMTimeMake(1, 60);
   CGImageRef imgRef = [generator copyCGImageAtTime:time actualTime:NULL error:&err];

   theImage = [[[UIImage alloc] initWithCGImage:imgRef] autorelease];

   CGImageRelease(imgRef);
   [asset release];
   [generator release];

   return theImage;
}

1 个答案:

答案 0 :(得分:3)

如果您要从图片库加载视频,它应该已经包含视频的嵌入式缩略图。可以使用thumbnail类的aspectRatioThumnailALAsset方法访问此内容。

因此,在您的情况下,缩略图可以像:

一样加载
ALAssetLibrary* lib = [ALAssetLibrary new];
[lib assetForURL:contentURL resultBlock:^(ALAsset* asset) {
    CGImageRef thumb = [asset thumbnail];

    dispatch_async(dispatch_get_main_queue(), ^{
        //do any UI operation here with thumb
    });
}];

请确保在主队列中进行任何UIKit调用,因为assetForURL::方法可能会在某个后台线程中调用resultBlock

希望它有所帮助。