我尝试显示视频的一系列帧,就像照片应用中的滑块一样。
这是代码
self.imageGenerator = [AVAssetImageGenerator assetImageGeneratorWithAsset:self.videoAsset];
self.imageGenerator.maximumSize = CGSizeMake(frameDisplaySize.width,
frameDisplaySize.height);
self.imageGenerator.appliesPreferredTrackTransform = YES;
self.imageGenerator.requestedTimeToleranceBefore = kCMTimePositiveInfinity;
self.imageGenerator.requestedTimeToleranceAfter = kCMTimePositiveInfinity;
NSMutableArray *videoFrames = [NSMutableArray array];
[self.imageGenerator generateCGImagesAsynchronouslyForTimes:times
completionHandler:^(CMTime requestedTime, CGImageRef image, CMTime actualTime,
AVAssetImageGeneratorResult result, NSError *error) {
if (result == AVAssetImageGeneratorSucceeded)
{
UIImage *frame = [[UIImage alloc] initWithCGImage:image];
[videoFrames addObject:frame];
}
else if (result == AVAssetImageGeneratorFailed)
{
NSLog(@"Failed with error: %@", [error localizedDescription]);
}
else
{
NSLog(@"Canceled");
}
}];
问题是当我运行代码时,这给了我具有最高精度的帧,这与容差设置为kCMTimeZero时相同。事实上,无论我尝试什么样的公差值,我总是得到相同的框架。由于精度高,生成过程有4秒的滞后。照片的应用程序只需1.5秒即可显示帧,而且帧的精确度很低,几乎只有视频的iframe。 那么,这是AVAssetImageGenerator中的一个错误,还是我的代码中的问题?