1

我试图显示视频的一系列帧,就像照片应用程序中的滑动条一样。

这是代码

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 中的错误还是我的代码中的问题?

4

0 回答 0