123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100 |
- //
- // KSVideoHelper.m
- // KulexiuForTeacher
- //
- // Created by 王智 on 2022/4/12.
- //
- #import "KSVideoHelper.h"
- #import <AVFoundation/AVAsset.h>
- #import <AVFoundation/AVAssetImageGenerator.h>
- #import <AVFoundation/AVTime.h>
- #import <SDWebImage/SDImageCache.h>
- @implementation KSVideoHelper
- + (void)getVideoPreviewImageUrl:(NSString *)videoUrl forImageView:(UIImageView *)imageView placeholder:(UIImage *)placeHolder {
- videoUrl = [videoUrl getUrlEndcodeString];
- [[SDImageCache sharedImageCache] queryCacheOperationForKey:videoUrl done:^(UIImage * _Nullable image, NSData * _Nullable data, SDImageCacheType cacheType) {
- //是否有缓存图片
- if(image){
- imageView.image = image;
- }else{
- //获取视频第一帧
- [self getVideoFirstViewImage:videoUrl forImageView:imageView placeHolderImage:placeHolder];
- }
- }];
- }
- // 获取视频第一帧
- + (void)getVideoFirstViewImage:(NSString *)videoURL forImageView:(UIImageView *)imageView placeHolderImage:(UIImage *)placeHolder {
-
- NSString *url = [videoURL getUrlEndcodeString];
- __block UIImage *videoImage;
- dispatch_async(dispatch_get_global_queue(0, 0), ^{
- AVURLAsset *asset = [[AVURLAsset alloc] initWithURL:[NSURL URLWithString:url] options:nil];
- NSParameterAssert(asset);
- AVAssetImageGenerator *assetImageGenerator =[[AVAssetImageGenerator alloc] initWithAsset:asset];
- assetImageGenerator.appliesPreferredTrackTransform = YES;
- assetImageGenerator.apertureMode =AVAssetImageGeneratorApertureModeEncodedPixels;
- CGImageRef thumbnailImageRef = NULL;
- NSError *thumbnailImageGenerationError = nil;
- thumbnailImageRef = [assetImageGenerator copyCGImageAtTime:CMTimeMake(0, 60)actualTime:NULL error:&thumbnailImageGenerationError];
- if(!thumbnailImageRef)
- NSLog(@"thumbnailImageGenerationError %@",thumbnailImageGenerationError);
- videoImage = thumbnailImageRef ? [[UIImage alloc]initWithCGImage:thumbnailImageRef]: nil;
-
- dispatch_async(dispatch_get_main_queue(), ^{
- //主线程更新UI
- if(videoImage){
- imageView.image = videoImage;
- //缓存图片
- [[SDImageCache sharedImageCache] storeImage:videoImage forKey:videoURL toDisk:NO completion:^{
-
- }];
-
- }else{
- //如果不是视频就设置图片
- [imageView sd_setImageWithURL:[NSURL URLWithString:[videoURL getUrlEndcodeString]] placeholderImage:placeHolder];
- }
- });
-
- });
- }
- + (void)getVideoDuration:(NSString *)videoUrl displayInLabel:(UILabel *)displayLabel {
- dispatch_async(dispatch_get_global_queue(0, 0), ^{
- AVURLAsset *asset = [[AVURLAsset alloc] initWithURL:[NSURL URLWithString:videoUrl] options:nil];
- float second = asset.duration.value / asset.duration.timescale;
- NSString *durationString = [NSString stringWithFormat:@"%.0f",second];
- NSInteger duration = [durationString integerValue];
- NSString *timeDesc = @"00:00";
- if (duration / 60 > 0) {
- NSInteger secondTime = duration % 60;
- NSString *secondStr = @"";
- if (secondTime < 10) {
- secondStr = [NSString stringWithFormat:@"0%zd",secondTime];
- } else {
- secondStr = [NSString stringWithFormat:@"%zd",secondTime];
- }
- timeDesc = [NSString stringWithFormat:@"%2ld:%@", duration / 60, secondStr];
- }
- else {
- NSInteger secondTime = duration % 60;
- NSString *secondStr = @"";
- if (secondTime < 10) {
- secondStr = [NSString stringWithFormat:@"0%zd",secondTime];
- } else {
- secondStr = [NSString stringWithFormat:@"%zd",secondTime];
- }
- timeDesc = [NSString stringWithFormat:@"00:%@", secondStr];
- }
- dispatch_async(dispatch_get_main_queue(), ^{
- displayLabel.text = timeDesc;
- });
- });
- }
- @end
|