私は私のために働くために満たすの解を得ることができませんでしたが、それは正しい方向に考えて私を得ました。
以下は私のプロジェクトで使用したコードです。メソッド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;
}
注また、1つの非同期画像生成を実行する(AVAssetImageGenerator
のインスタンスに)代わりcopyCGImageAtTime:actualTime:error:
方法generateCGImagesAsynchronouslyForTimes:completionHandler:
を使用することができます。
このコードサンプルでは、のcurrentTime
にスクリーンショットが生成されていますが、いつでも代わりに使用できます。
イメージを作成するメソッドを呼び出すコードを確認できますか? –