美文网首页日常收录
iOS获取网络视频第一帧图片 copyCGImageAtTime

iOS获取网络视频第一帧图片 copyCGImageAtTime

作者: Fancy_饭稀 | 来源:发表于2022-05-08 16:57 被阅读0次

网络获取第一帧图片网上代码千篇一律,首先必须得异步,否则像tableView这种会很卡顿,用户体验极差。一开始用的是copyCGImageAtTime发现有部分视频返回为nil。后来看官方api发现有个异步方法generateCGImagesAsynchronouslyForTimes挺好用
FTool.h文件

typedef void(^MyImageBlock)(UIImage * _Nullable image);
+(void)getScreenshotWithUrlAsyn:(NSURL *)url completion:(MyImageBlock)handler;

FTool.m文件

+(void)getScreenshotWithUrlAsyn:(NSURL *)url completion:(MyImageBlock)handler{
    dispatch_async(dispatch_get_global_queue(0, 0), ^{
        AVURLAsset *asset = [[AVURLAsset alloc] initWithURL:url options:nil];
        AVAssetImageGenerator *generator = [[AVAssetImageGenerator alloc] initWithAsset:asset];
        generator.appliesPreferredTrackTransform = YES;
        CMTime time = CMTimeMakeWithSeconds(0, 60);
        [generator generateCGImagesAsynchronouslyForTimes:@[[NSValue valueWithCMTime:time]] completionHandler:^(CMTime requestedTime, CGImageRef  _Nullable image, CMTime actualTime, AVAssetImageGeneratorResult result, NSError * _Nullable error) {
           UIImage *thumb = nil;
            if (error) {
                NSLog(@"获取视频第一帧错误 %@===%@",error,image);
            }else{
                thumb = [[UIImage alloc] initWithCGImage:image];
            }
            dispatch_async(dispatch_get_main_queue(), ^{
                handler(thumb);
            });
        }];
    });
}

使用

[FTool getScreenshotWithUrlAsyn:mediaUrl completion:^(UIImage * _Nullable image) {
 //image就是截取的第一帧      
 }];

相关文章

网友评论

    本文标题:iOS获取网络视频第一帧图片 copyCGImageAtTime

    本文链接:https://www.haomeiwen.com/subject/jouqurtx.html