Я воспроизвожу видео, используя AVPlayerLayer в представлении. Мне нужно преобразовать View to 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;
}