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

网络获取第一帧图片网上代码千篇一律,首先必须得异步,否则像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就是截取的第一帧      
 }];
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容