我是靠谱客的博主 炙热学姐,最近开发中收集的这篇文章主要介绍获取AVCaptureMovieFileOutput录制的视频的第一祯作为封面图,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

完整项目下载链接:https://github.com/SSYSSK/camera2

@property (strong, nonatomic) AVCaptureMovieFileOutput *movieOutput;

[self.movieOutput startRecordingToOutputFileURL: self.outputURL  recordingDelegate:self];  

这句代码时开始录制,然后就会执行代理回调

 

#pragma AVCaptureFileOutputRecordingDelegate - 视频输出代理

//录制完成
- (void)captureOutput:(AVCaptureFileOutput *)captureOutput
didFinishRecordingToOutputFileAtURL:(NSURL *)outputFileURL
      fromConnections:(NSArray *)connections
                error:(NSError *)error {
     NSLog(@"录制完成");
    UISaveVideoAtPathToSavedPhotosAlbum([outputFileURL path], nil, nil, nil);
    
    //在videoQueue 上,
    dispatch_async(self.videoQueue, ^{
        
        //建立新的AVAsset & AVAssetImageGenerator
        AVAsset *asset = [AVAsset assetWithURL:outputFileURL];
        
        AVAssetImageGenerator *imageGenerator = [AVAssetImageGenerator assetImageGeneratorWithAsset:asset];
        
        //设置maximumSize 宽为100,高为0 根据视频的宽高比来计算图片的高度
        imageGenerator.maximumSize = CGSizeMake(100.0f, 0.0f);
        
        //捕捉视频缩略图会考虑视频的变化(如视频的方向变化),如果不设置,缩略图的方向可能出错
        imageGenerator.appliesPreferredTrackTransform = YES;
        
        //获取CGImageRef图片 注意需要自己管理它的创建和释放
        CGImageRef imageRef = [imageGenerator copyCGImageAtTime:kCMTimeZero actualTime:NULL error:nil];
        
        //将图片转化为UIImage
        UIImage *image = [UIImage imageWithCGImage:imageRef];
        
        //释放CGImageRef imageRef 防止内存泄漏
        CGImageRelease(imageRef);
        
        //回到主线程
        dispatch_async(dispatch_get_main_queue(), ^{
            
            //发送请求
            NSNotificationCenter *nc = [NSNotificationCenter defaultCenter];
            [nc postNotificationName:@"showVideoImage" object:image];
            
        });
        
    });
}

 

 

这个是获取图片的代理回调(录制视频的可以忽略这里,纯粹记录一下而已)

#pragma mark AVCapturePhotoCaptureDelegate
- (void)captureOutput:(AVCapturePhotoOutput *)output didFinishProcessingPhoto:(AVCapturePhoto *)photo error:(NSError *)error {
    if (error) {
        NSLog(@"获取图片错误 --- %@",error.localizedDescription);
    }
    if (photo) {
        if (@available(iOS 11.0, *)) {
            
            CGImageRef cgImage = [photo CGImageRepresentation];
           
            UIImage * image = [UIImage imageWithCGImage:cgImage];
            NSLog(@"获取图片成功 --- %@",image);
            
            //前置摄像头拍照会旋转180解决办法
            if (self.activeVideoInput.device.position == AVCaptureDevicePositionFront) {
                UIImageOrientation imgOrientation = UIImageOrientationLeftMirrored;
                image = [[UIImage alloc]initWithCGImage:cgImage scale:1.0f orientation:imgOrientation];
            }else {
                UIImageOrientation imgOrientation = UIImageOrientationRight;
                image = [[UIImage alloc]initWithCGImage:cgImage scale:1.0f orientation:imgOrientation];
            }
            //发送请求显示缩略图
            NSNotificationCenter *nc = [NSNotificationCenter defaultCenter];
            [nc postNotificationName:@"showVideoImage" object:image];
            
            UIImageWriteToSavedPhotosAlbum(image, nil, nil, nil);
        } else {
            NSLog(@"不是走这个代理方法");
        }
    }
}

 

最后

以上就是炙热学姐为你收集整理的获取AVCaptureMovieFileOutput录制的视频的第一祯作为封面图的全部内容,希望文章能够帮你解决获取AVCaptureMovieFileOutput录制的视频的第一祯作为封面图所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(57)

评论列表共有 0 条评论

立即
投稿
返回
顶部