我無法得到滿足的解決方案,爲我工作,但它讓我在正確的方向思考。
下面是我最終在我的項目中使用的代碼。方法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;
}
還請注意,人們可以使用(上的AVAssetImageGenerator
的實例)的方法generateCGImagesAsynchronouslyForTimes:completionHandler:
代替copyCGImageAtTime:actualTime:error:
異步地執行圖像生成。
此代碼示例在AVPlayer
的currentTime
處生成屏幕截圖,但可以使用任何時間代替。
我們能否看到調用該方法來創建圖像的代碼? – 2012-01-13 13:47:32