我试图显示视频的一系列帧,就像照片应用程序中的滑动条一样。
这是代码
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 中的错误还是我的代码中的问题?