获取第一帧图片
导入 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];
}
}];

本文介绍如何使用Objective-C通过AVFoundation和CoreMedia框架从视频中抓取第一帧图片及多帧图片的方法。利用AVURLAsset加载视频资源,并借助AVAssetImageGenerator生成指定时间点的图片。
&spm=1001.2101.3001.5002&articleId=24327929&d=1&t=3&u=371a51bfcf5d4b99bb85df67f52be883)
1361

被折叠的 条评论
为什么被折叠?



