iOS截取视频某一帧图片(关键帧,AVAssetImageGenerator)
获取第一帧图片
导入 AVFoundation.Framework、CoreMedia.Framework
实现代码如下:
+ (UIImage*) thumbnailImageForVideo:(NSURL *)videoURL atTime:(NSTimeInterval)time { AVURLAsset *asset = [[[AVURLAsset alloc] initWithURL:videoURL options:nil] autorelease]; NSParameterAssert(asset); AVAssetImageGenerator *assetImageGenerator = [[[AVAssetImageGenerator alloc] initWithAsset:asset] autorelease]; assetImageGenerator.appliesPreferredTrackTransform = YES; assetImageGenerator.apertureMode = AVAssetImageGeneratorApertureModeEncodedPixels; CGImageRef thumbnailImageRef = NULL; CFTimeInterval thumbnailImageTime = time; NSError *thumbnailImageGenerationError = nil; thumbnailImageRef = [assetImageGenerator copyCGImageAtTime:CMTimeMake(thumbnailImageTime, 60) actualTime:NULL error:&thumbnailImageGenerationError]; if (!thumbnailImageRef) NSLog(@"thumbnailImageGenerationError %@", thumbnailImageGenerationError); UIImage *thumbnailImage = thumbnailImageRef ? [[[UIImage alloc] initWithCGImage:thumbnailImageRef] autorelease] : nil; return thumbnailImage; }
获取多帧图片的办法
[mImageGenerator generateCGImagesAsynchronouslyForTimes:[NSArray arrayWithObject:[NSValue valueWithCMTime:CMTimeMakeWithSeconds(time, NSEC_PER_SEC)]] completionHandler: ^(CMTime requestedTime, CGImageRef image, CMTime actualTime, AVAssetImageGeneratorResult result, NSError *error) { NSLog(@"actual got image at time:%f", CMTimeGetSeconds(actualTime)); if (image) { [CATransaction begin]; [CATransaction setDisableActions:YES]; [layer setContents:(id)image]; //UIImage *img = [UIImage imageWithCGImage:image]; //UIImageWriteToSavedPhotosAlbum(img, self, nil, nil); [CATransaction commit]; } }];
郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。