Sto riproducendo video usando AVPlayerLayer in una vista. Ho bisogno di convertire View to Image, ho provatoConverti UIView Layer in UIImage
[myview.layer renderInContext:context];
ma questo dà solo l'immagine nera. Voglio convertire quella vista in immagine con video in quel momento. Questa conversione avverrà simultaneamente a 0,05 s.
Ho provato con AVAssetImageGenerator. Che mi dà l'immagine giusta usando Asset. Ma ci vuole un po 'più di tempo, il che rende qualche problema di prestazioni sulla mia applicazione. Qualcuno può aiutarmi a ridurre il processo di conversione di video in immagine per particolari CMTime.
Di seguito sono riportati i miei codici.
- (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;
}
Vedere la mia risposta da questo link http://stackoverflow.com/questions/14049796/howe-to-capture-uiview-top-uiview/14049828#14049862 –
Nel mio caso sto usando AVPlayerLayer su quel Visualizza, ho bisogno del frame video su quella vista – Ganesh
http://stackoverflow.com/q/5388226/1378447 –