dcy123

 

.m文件

 

#import <AVFoundation/AVFoundation.h>

#import <AssetsLibrary/AssetsLibrary.h>

#import "UIImage+Extend.h"

 

#define MAX_THUMBNAIL_COUNT 5

 

@implementation RCSVideoProcessor

 

+(UIImage *)thumbnailForVideoAtPath:(NSString *)videoPath{

    

    NSURL *videoUrl = [NSURL fileURLWithPath:videoPath];

    return  [self thumbnailForVideoAtURL:videoUrl];

}

 

+(void)thumbnailForVideoAtPath:(NSString *)videoPath completeHandler:(RCSVideoGetThumbComletionHandler)handler{

    NSURL *videoUrl = [NSURL fileURLWithPath:videoPath];

    [self thumbnailForVideoAtURL:videoUrl completeHandler:handler];

}

 

//如何截取指定时间内的视频缩略图。

+(UIImage *)thumbnailForVideoAtURL:(NSURL *)videoURL{

    

    UIImage *resultImg = nil;

    NSDictionary *options = @{AVURLAssetPreferPreciseDurationAndTimingKey: @YES};

    AVURLAsset *avUrlAsserRead = [[AVURLAsset alloc] initWithURL:videoURL options:options];

    if ([avUrlAsserRead tracksWithMediaType:AVMediaTypeVideo].count > 0) {

        AVAssetImageGenerator *imageGenerator = [AVAssetImageGenerator assetImageGeneratorWithAsset:avUrlAsserRead];

        imageGenerator.appliesPreferredTrackTransform = YES;

        Float64 durations = CMTimeGetSeconds([avUrlAsserRead duration]);

        

        //预设5个时间点,如果取到的图片为纯色,则从下一个时间点取缩略图,如果5张图都是纯色,返回第五张图片

        for (int i = 0; i < MAX_THUMBNAIL_COUNT; i++) {

            CMTime time = CMTimeMake(durations * i/MAX_THUMBNAIL_COUNT, 600);//缩略图创建时间 CMTime是表示电影时间信息的结构体,第一个参数表示是视频第几秒,第二个参数表示每秒帧数.(如果要活的某一秒的第几帧可以使用CMTimeMake方法)

            NSError *error = nil;

            CMTime actualTime;//缩略图实际生成的时间

            CGImageRef cgImage = [imageGenerator copyCGImageAtTime:time actualTime:&actualTime error:&error];

            UIImage *result = [[UIImage alloc] initWithCGImage:cgImage];

            CGImageRelease(cgImage);

            if (![result isPureColor] || ((MAX_THUMBNAIL_COUNT - 1) == i)) {

                resultImg = result;

                break;

            }

        }

    }

    return resultImg;

    

}

 

 

 

#pragma mark -

#pragma mark - 压缩视频

 

+(void)compressVideoAtURL:(NSURL *)sourceURL toDestination:(NSURL *)destURL{

    

    [self lowQuailtyWithInputURL:sourceURL outputURL:destURL blockHandler:^(AVAssetExportSession *session){

        

        AVAssetExportSessionStatus status = session.status;

        

        if (AVAssetReaderStatusCompleted == status) {

            NSData *sourdeData = [NSData dataWithContentsOfURL:sourceURL];

            NSData *destData = [NSData dataWithContentsOfURL:destURL];

            if ([sourdeData isEqualToData:destData]) {

                

            }

            else{

                

            }

        }else{

            

        }

    }];

}

 

 

+ (void)lowQuailtyWithInputURL:(NSURL*)inputURL

                     outputURL:(NSURL*)outputURL

                  blockHandler:(void (^)(AVAssetExportSession*))handler

{

    AVURLAsset *asset = [AVURLAsset URLAssetWithURL:inputURL options:nil];

    AVAssetExportSession *session = [[AVAssetExportSession alloc] initWithAsset:asset presetName:AVAssetExportPresetMediumQuality];

    session.outputURL = outputURL;

    session.outputFileType = AVFileTypeQuickTimeMovie;

    [session exportAsynchronouslyWithCompletionHandler:^{

        handler(session);

    }];

}

 

分类:

技术点:

相关文章:

  • 2021-12-18
  • 2021-11-26
  • 2022-01-14
  • 2021-11-30
  • 2021-05-29
  • 2021-10-19
猜你喜欢
  • 2021-04-25
  • 2021-12-26
  • 2021-06-29
  • 2021-09-30
  • 2021-12-03
  • 2021-06-05
  • 2021-08-23
相关资源
相似解决方案