我知道在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;
}
答案 0 :(得分:3)
如果您要从图片库加载视频,它应该已经包含视频的嵌入式缩略图。可以使用thumbnail
类的aspectRatioThumnail
或ALAsset
方法访问此内容。
因此,在您的情况下,缩略图可以像:
一样加载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
。
希望它有所帮助。