我遇到的问题是从视频加载20张图片需要太长时间。我想要获得的缩略图越多,我就越需要等待。我使用的方法是generateCGImagesAsynchronouslyForTimes。有谁知道为什么我有这个问题?
AVAssetImageGenerator *generator = [[AVAssetImageGenerator alloc] initWithAsset:asset];
generator.appliesPreferredTrackTransform = YES;
generator.requestedTimeToleranceAfter = kCMTimeZero;
generator.requestedTimeToleranceBefore = kCMTimeZero;
CGSize maxSize = CGSizeMake(320, 180);
generator.maximumSize = maxSize;
AVAssetImageGeneratorCompletionHandler handler = ^(CMTime requestedTime, CGImageRef im, CMTime actualTime, AVAssetImageGeneratorResult result, NSError *error){
if (result != AVAssetImageGeneratorSucceeded) {
NSLog(@"couldn't generate thumbnail, error:%@", error);
}
UIImage *frameImage = [UIImage imageWithCGImage:im];
dispatch_async(dispatch_get_main_queue(), ^{
[_frameImageView setImage:frameImage];
});
};
[generator generateCGImagesAsynchronouslyForTimes:timeArray completionHandler:handler];
答案 0 :(得分:0)
我知道你的问题。
生成缩略图需要花费大量时间,因为您设置了requestedTimeToleranceAfter和requestedTimeToleranceBefore是kCMTimeZero。
长答案: 如果您具有特定的TimeTolerance,则会针对精度而非性能进行转换。如果您只是想要视频缩略图,那么您不需要生成具有高精度的缩略图。
与seekToTime类似,具有容差。参考https://developer.apple.com/library/ios/documentation/AudioVideo/Conceptual/AVFoundationPG/Articles/02_Playback.html#//apple_ref/doc/uid/TP40010188-CH3-SW3,寻找 - 重新定位播放头。
简答: 只需删除requestedTimeToleranceAfter和requestedTimeToleranceBefore。