CPUImage 仪表 数据 动态展示

  1. 之前时候录屏的方法帧率的问题,行不通
  2. 把控件放在view 里生成图片放在GPUImageUIElement 水印上,这样可以把view的画面生成视频流(0.1s 生成一张图片)
-(void)setup{

 // 初始化GPUImage的相机功能,同时设置高清画设置,以及使用前置摄像头

    self.camera = [[GPUImageVideoCamera alloc] initWithSessionPreset:AVCaptureSessionPresetiFrame1280x720 cameraPosition:AVCaptureDevicePositionBack];

    // 设置镜头的方向,这里设的正常竖立的

    self.camera.outputImageOrientation = UIInterfaceOrientationPortrait;

    // 这两句是使用系统相机的设置,如何是否镜像之类

    self.camera.horizontallyMirrorRearFacingCamera = NO;

    self.camera.horizontallyMirrorFrontFacingCamera = NO;



    // 该句可防止允许声音通过的情况下,避免录制第一帧黑屏闪屏(====)

    [self.camera addAudioInputsAndOutputs];



    filter = [[GPUImageSepiaFilter alloc] init];

    [(GPUImageSepiaFilter *)filter setIntensity:0];

    // 创建摄像头预览视图,也可以在XiB拖个UIView,继承GPUImageView,也可以

    self.cameraScreen = [[GPUImageView alloc] initWithFrame:self.view.frame];

    // 添加到父视图上去

    [self.view addSubview:self.cameraScreen];



    _brightFilter = [[GPUImageBrightnessFilter alloc] init];

    _brightFilter.brightness =0.0f;

    _blendFliter = [[GPUImageAlphaBlendFilter alloc] init];

    _blendFliter.mix = 1.0;

    _uiElement = [[GPUImageUIElement alloc] initWithView:_preImgView2];

    [filter useNextFrameForImageCapture];

    [_brightFilter useNextFrameForImageCapture];

    [_blendFliter useNextFrameForImageCapture];

     [_uiElement useNextFrameForImageCapture];

    __weaktypeof(self) weakSelf =self;

    [_brightFilter setFrameProcessingCompletionBlock:^(GPUImageOutput *output, CMTime Time) {

        [weakSelf.uiElementupdate];

    }];

    [self.camera addTarget:filter];

    [filter addTarget:_brightFilter];

    [_brightFilter addTarget:_blendFliter];

    [_uiElement addTarget:_blendFliter];

    [_blendFliter addTarget:self.cameraScreen];

    // 相机开始预览啦

    [self.camera startCameraCapture];

    NSString*timeStr = @"123333";//

//    NSString *documents = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) firstObject];

    NSFileManager * manager = [NSFileManager defaultManager];

//VIDEOPath 储存视频沙盒地址

    if(![managerfileExistsAtPath:VIDEOPath]) {

        [managercreateDirectoryAtPath:VIDEOPath withIntermediateDirectories:YES attributes:nil error:NULL];

    }

    _videoName=[NSStringstringWithFormat:@"%@.mp4",timeStr];

    _videoPath = [VIDEOPath stringByAppendingPathComponent:_videoName];

    // 初始化这个地址,不能UrlWithString的方法

    NSURL*willSaveURL = [NSURLfileURLWithPath:_videoPath];

    // 初始化视频制作操作,传入视频保存的url,以及显示范围的大小

    self.movieWriter= [[GPUImageMovieWriteralloc]initWithMovieURL:willSaveURLsize:CGSizeMake(720,1280)];

    // 自动控制声音与图像一致

    self.movieWriter.encodingLiveVideo = YES;

    self.movieWriter.shouldPassthroughAudio = YES;

    self.movieWriter.hasAudioTrack = YES;

    // 把这个视频的操作放进相机里面

    self.camera.audioEncodingTarget = self.movieWriter;

}

#pragma mark 生成image

- (UIImage*)makeImageWithView:(UIView*)view

{

      CGFloatscale = [[UIScreenmainScreen]scale];

        UIGraphicsBeginImageContextWithOptions(view.frame.size, NO, scale);

        CGContextRef context =UIGraphicsGetCurrentContext();

        [view.layerrenderInContext:context];

        UIImage *targetImage =UIGraphicsGetImageFromCurrentImageContext();



//        targetImage = [targetImage rotate:UIImageOrientationLeft];

        UIGraphicsEndImageContext();

        return targetImage;

}

/** 开始录制 */

- (void)Start

{

    [_blendFliter addTarget:self.movieWriter];



    [self.movieWriter startRecordingInOrientation:CGAffineTransformMakeRotation((angle2Rad(-90)))];

}

/** 停止录制 */

- (void)Close

{

    _backView.hidden=NO;

    // 美颜效果里移除掉录制操作

    [filter removeTarget:self.movieWriter];

    [_blendFliter removeTarget:self.movieWriter];



    // 移除相机里的录制

    self.camera.audioEncodingTarget = nil;



    // 录制操作设为完成

    [self.movieWriter finishRecording];



}

// 视频保存完毕回调

- (void)video:(NSString*)videoPath didFinishSavingWithError:(NSError*)error contextInfo: (void*)contextInfo

{

    NSLog(@"视频保存的地址:%@",videoPath);

}
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • Swift1> Swift和OC的区别1.1> Swift没有地址/指针的概念1.2> 泛型1.3> 类型严谨 对...
    cosWriter阅读 13,917评论 1 32
  • 美国社会心理学家费斯汀格有一个很出名的行为理论,被人们称为“费斯汀格法则”: 生活中的10%是由发生在你身上的事情...
    冯萌萌阅读 1,481评论 0 0
  • 晚清一代大儒曾国藩有过一段戒烟的经历。曾国藩十七岁时染上了吸烟的坏习惯,他在学校读书时吸烟,被老师发现了,将曾国...
    苑泽宇阅读 3,666评论 0 0
  • 一、Mac下Jmeter的安装运行 1.下载mac下载地址:http://jmeter.apache.org/do...
    by小杰阅读 7,865评论 0 1
  • 当下, 多数房企都开始了突破盈利瓶颈的尝试。 这边厢,“带头大哥”万达要告别房地产,走上轻资产之路,接着,20家上...
    费兮阳阅读 1,877评论 0 0

友情链接更多精彩内容