Konwertuj warstwę UIView na UIImage
Gram w wideo za pomocą AVPlayerLayer w widoku. Próbowałem przekonwertować widok na obraz
[myview.layer renderInContext:context];
ale to daje tylko czarny obraz. Chcę przekonwertować ten widok na obraz z wideo w tym czasie. Ta konwersja nastąpi jednocześnie 0,05 s.
Próbowałem z AVAssetImageGenerator. Co daje mi właściwy obraz przy użyciu Zasobów. Ale to zajmuje trochę więcej czasu, co powoduje pewne problemy z wydajnością w mojej aplikacji. Czy ktoś może mi pomóc w zmniejszeniu procesu konwersji wideo na obraz dla konkretnego CMTime.
Poniżej moje kodowanie.
- (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;
}