ビューで AVPlayerLayer を使用してビデオを再生しています。View を Image に変換する必要があります。試してみました
[myview.layer renderInContext:context];
しかし、これは黒い画像しか与えません。その時の景色を動画で画像に変換したい。この変換は 0.05 秒同時に発生します。
AVAssetImageGenerator で試してみました。これにより、Asset を使用して適切なイメージが得られます。しかし、もう少し時間がかかるため、アプリケーションでパフォーマンスの問題が発生します。特定のCMTimeのビデオを画像に変換するプロセスを減らす方法を教えてください。
以下は私のコーディングです。
- (UIImage *)currentItemScreenShot
{
AVPlayer *abovePlayer = [objVC player];
if(imageGenerator == nil)
{
AVAsset *asset = [[[objVC player] currentItem] asset];
imageGenerator = [[AVAssetImageGenerator alloc] initWithAsset:asset];
}
CMTime time = [[abovePlayer currentItem] currentTime];
if ([imageGenerator respondsToSelector:@selector(setRequestedTimeToleranceBefore:)] && [imageGenerator respondsToSelector:@selector(setRequestedTimeToleranceAfter:)]) {
[imageGenerator setRequestedTimeToleranceBefore:kCMTimeZero];
[imageGenerator setRequestedTimeToleranceAfter:kCMTimeZero];
}
CGImageRef imgRef = [imageGenerator copyCGImageAtTime:time
actualTime:NULL
error:NULL];
if (imgRef == nil) {
if ([imageGenerator respondsToSelector:@selector(setRequestedTimeToleranceBefore:)] && [imageGenerator respondsToSelector:@selector(setRequestedTimeToleranceAfter:)]) {
[imageGenerator setRequestedTimeToleranceBefore:kCMTimePositiveInfinity];
[imageGenerator setRequestedTimeToleranceAfter:kCMTimePositiveInfinity];
}
imgRef = [imageGenerator copyCGImageAtTime:time actualTime:NULL error:NULL];
}
UIImage *image = [UIImage imageWithCGImage:imgRef];
CGImageRelease(imgRef);
image = [self reverseImageByScalingToSize:image.size :image];
return image;
}