我无法让 Meet 的解决方案为我工作,但它让我朝着正确的方向思考。
下面是我最终在我的项目中使用的代码。该方法screenshotFromPlayer:maximumSize:
接受一个AVPlayer
用于截取屏幕截图的实例,以及一个CGSize
将是返回图像的最大尺寸的实例。
- (UIImage *)screenshotFromPlayer:(AVPlayer *)player maximumSize:(CGSize)maxSize {
CMTime actualTime;
NSError *error;
AVAssetImageGenerator *generator = [[AVAssetImageGenerator alloc] initWithAsset:player.currentItem.asset];
// Setting a maximum size is not necessary for this code to
// successfully get a screenshot, but it was useful for my project.
generator.maximumSize = maxSize;
CGImageRef cgIm = [generator copyCGImageAtTime:player.currentTime
actualTime:&actualTime
error:&error];
UIImage *image = [UIImage imageWithCGImage:cgIm];
CFRelease(cgIm);
if (nil != error) {
NSLog(@"Error making screenshot: %@", [error localizedDescription]);
NSLog(@"Actual screenshot time: %f Requested screenshot time: %f", CMTimeGetSeconds(actualTime),
CMTimeGetSeconds(self.recordPlayer.currentTime));
return nil;
}
return image;
}
另请注意,可以使用该方法generateCGImagesAsynchronouslyForTimes:completionHandler:
而不是copyCGImageAtTime:actualTime:error:
(在 的实例上AVAssetImageGenerator
)异步执行图像生成。
AVPlayer
此代码示例在's处生成屏幕截图currentTime
,但可以随时使用。