video缩略图图像不是从本地videoURL(资产URL)iOS生成的
我正在使用AVAssetImageGenerator生成video的缩略图。 当我通过本地video资产url生成图像时,它正在重新调整nil 。我使用下面的代码来生成图像。
NSURL *url = [NSURL fileURLWithPath:filepath]; AVAsset *asset = [AVAsset assetWithURL:url]; AVAssetImageGenerator *imageGenerator = [[AVAssetImageGenerator alloc]initWithAsset:asset]; CMTime time =CMTimeMake(1, 1); CGImageRef imageRef = [imageGenerator copyCGImageAtTime:time actualTime:NULL error:NULL]; UIImage *thumbnail = [UIImage imageWithCGImage:imageRef]; CGImageRelease(imageRef);
使用下面的代码
AVAsset *asset = [AVAsset assetWithURL:url]; // Get thumbnail at the very start of the video CMTime thumbnailTime = [asset duration]; thumbnailTime.value = 0; // Get image from the video at the given time AVAssetImageGenerator *imageGenerator = [[AVAssetImageGenerator alloc] initWithAsset:asset]; CGImageRef imageRef = [imageGenerator copyCGImageAtTime:thumbnailTime actualTime:NULL error:NULL]; UIImage *thumbnail = [UIImage imageWithCGImage:imageRef]; CGImageRelease(imageRef);
只需调用此方法即可创建video缩略图。
//Utilities.m
+(void)thumbnailImageForVideoURL:(NSString *)videoURL completionHandler:(void (^)(UIImage *))completionHandler{ dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_BACKGROUND, 0), ^{ NSURL *url = [NSURL URLWithString:videoURL]; AVURLAsset *asset=[[AVURLAsset alloc] initWithURL:url options:nil]; AVAssetImageGenerator *generator = [[AVAssetImageGenerator alloc] initWithAsset:asset]; generator.appliesPreferredTrackTransform=TRUE; CMTime thumbTime = CMTimeMakeWithSeconds(30,30); AVAssetImageGeneratorCompletionHandler handler = ^(CMTime requestedTime, CGImageRef im, CMTime actualTime, AVAssetImageGeneratorResult result, NSError *error){ if (result != AVAssetImageGeneratorSucceeded) { NSLog(@"couldn't generate thumbnail, error:%@", error); } UIImage *image; if(im){ image = [UIImage imageWithCGImage:im]; }else{ image = [UIImage imageNamed:@"videoPlaceholder"]; } completionHandler(image); }; CGSize maxSize = CGSizeMake(568, 426); generator.maximumSize = maxSize; [generator generateCGImagesAsynchronouslyForTimes:[NSArray arrayWithObject:[NSValue valueWithCMTime:thumbTime]] completionHandler:handler]; }); }
来自你class级的电话。
#import "Utilities.h" [Utilities thumbnailImageForVideoURL:moviePath completionHandler:^(UIImage *thumbImage) { dispatch_async(dispatch_get_main_queue(), ^{ self.imgViewContent.image = thumbImage; //self.objectDetail.videoThumbImage = UIImageJPEGRepresentation(thumbImage, 1.0); }); }];
试试这个代码
-(UIImage *)generateThumbImage : (NSString *)filepath{ NSURL *url = [NSURL fileURLWithPath:filepath]; UIImage *theImage = nil; AVURLAsset *asset = [[AVURLAsset alloc] initWithURL:url options:nil]; AVAssetImageGenerator *generator = [[AVAssetImageGenerator alloc] initWithAsset:asset]; generator.appliesPreferredTrackTransform = YES; NSError *err = NULL; CMTime time = CMTimeMake(1, 60); CGImageRef imgRef = [generator copyCGImageAtTime:time actualTime:NULL error:&err]; theImage = [[UIImage alloc] initWithCGImage:imgRef] ; CGImageRelease(imgRef); return theImage; }
- XMPPFramework – 如何创build一个MultiUserChat房间?
- 改变NavigationItem提示时奇怪的animation
- XCode代码信号错误XCTest
- 如何在iOS中使用自定义字体(例如:Helvetica CY.ttf)以编程方式使用Xcode
- iOS10 – ContentView在UITableView头中阻塞UIButton
- 我想在NSDateComponents类中获得四分之一的值
- 如何在UIMarkupTextPrintFormatter中添加图像?
- 我是否应该在一个对象中使用@property(nonatomic,copy)或@property(nonatomic,strong)作为我的(NSString *)attr?
- iOS版。 用USB麦克风以96kHzlogging