我正在视图中使用 AVPlayerLayer 播放视频。我需要将视图转换为图像,我尝试过
[myview.layer renderInContext:context];
但这只给出黑色图像。我想将当时的视图转换为带有视频的图像。这个转换会同时发生0.05s。
我尝试使用 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;
}
MPMoviePlayerController 可以轻松地从电影中的某个点获取图像。
- (UIImage*)imageFromVideoAtPath:(NSString *)path atTime:(NSTimeInterval)time {
NSURL *videoURL = [NSURL fileURLWithPath:path];
MPMoviePlayerController *moviePlayer = [[MPMoviePlayerController alloc] initWithContentURL:videoURL];
[moviePlayer prepareToPlay];
UIImage *thumbnail = [moviePlayer thumbnailImageAtTime:time timeOption:MPMovieTimeOptionNearestKeyFrame];
[moviePlayer stop];
return thumbnail;
}
只要用视频的路径来调用它,然后在你想要获取图像的时候就可以了。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)