之前已经有一篇博客讲过怎么开启摄像头并完成对摄像头的图像的滤镜化了,现在就说说怎么录像,并把这个添加滤镜的录像文件写到Path

原理是GPUImage给出了GPUImageMovieWriter这么个类,专门用于记录摄像头的录像。设定了路径和声音视频参数以后,把GPUImageMovieWriter的对象委托给滤镜对象,再把滤镜对象委托给VideoCamera就可以开始录制了。

首先定义:

    GPUImageMovieWriter * movieWriter;

    GPUImageVideoCamera * videoCamera;

    NSMutableDictionary * videoSettings;

    NSDictionary * audioSettings;

    NSString * pathToMovie;

这些都是录像必备的属性

接下来是初始化的工作

首先初始化声音和视频参数:

    //init Video Setting

    videoSettings = [[NSMutableDictionaryalloc] init];;

    [videoSettingssetObject:AVVideoCodecH264forKey:AVVideoCodecKey];

] forKey:AVVideoWidthKey];

] forKey:AVVideoHeightKey];

    

    //init audio setting

    AudioChannelLayout channelLayout;

    , sizeof(AudioChannelLayout));

    channelLayout.mChannelLayoutTag = kAudioChannelLayoutTag_Stereo;

    

    audioSettings = [NSDictionarydictionaryWithObjectsAndKeys:

                                   [ NSNumber numberWithInt: kAudioFormatMPEG4AAC], AVFormatIDKey,

                                   [ ], AVNumberOfChannelsKey,

                                   [ NSNumber numberWithFloat: 16000.0 ], AVSampleRateKey,

                                   [ NSData dataWithBytes:&channelLayout length: sizeof( AudioChannelLayout ) ], AVChannelLayoutKey,

                                   [ ], AVEncoderBitRateKey,

                                   nil];

然后是初始化文件路径和视频写入对象

    //init Movie path

    pathToMovie = [NSHomeDirectory() stringByAppendingPathComponent:thePath];

    unlink([pathToMovieUTF8String]); // If a file already exists, AVAssetWriter won't let you record new frames, so delete the old movie

    NSURL *movieURL = [NSURL fileURLWithPath:pathToMovie];

    

    //init movieWriter

    movieWriter = [[GPUImageMovieWriteralloc] initWithMovieURL:movieURL size:CGSizeMake(480.0, 640.0) fileType:AVFileTypeMPEG4outputSettings:videoSettings];

    

    [movieWritersetHasAudioTrack:YESaudioSettings:audioSettings];

接下来是GPUImageVideoCamera和滤镜效果的初始化,我就不写了,看我另外一篇博客

初始化的最后动作就是赋予委托:

    //把滤镜效果加给摄像头

    [videoCameraaddTarget:testFilter];

    //把摄像头上的图像给GPUImageView显示出来

    [testFilteraddTarget:imageView];

    [testFilteraddTarget:movieWriter];

这样初始化的工作就全部做完了,要开始录制只要开启以下代码:

        videoCamera.audioEncodingTarget = movieWriter;

        [movieWriterstartRecording];

就可以开始录制了,结束录制也很简单:

        //stop recording

        [testFilterremoveTarget:movieWriter];

        [movieWriterfinishRecording];

录制完的视频将会保存在路径里

 

还有两个小设置:

开启和关闭闪光灯:

        [videoCamera.inputCamerasetTorchMode:AVCaptureTorchModeOn];

        [videoCamera.inputCameraunlockForConfiguration];

        [videoCamera.inputCameralockForConfiguration:nil];

        [videoCamera.inputCamerasetTorchMode:AVCaptureTorchModeOff];

        [videoCamera.inputCameraunlockForConfiguration];

使用GPUImage开启的相机进行摄像,保存写入到Path的更多相关文章

  1. 在webapp上使用input:file, 指定capture属性调用默许相机,摄像,录音功能

    ## 在webapp上使用input:file, 指定capture属性调用默认相机,摄像,录音功能 在iOS6下开发webapp,使用inputz之file,很有用 <input type=& ...

  2. 用GPUImage开启相机并且开启滤镜效果

    GPUImage提供了GPUImageVideoCamera这么一个类,它的对象能够调用摄像头,并且加上滤镜的效果.     //init VideoCamera     //这里的两个参数可以设定拍 ...

  3. 导入GPUImage,实时滤镜相机,GUPImage遇到的问题解决,_OBJC_METACLASS_$_GBGPUImageView in GBGPUImageView.o

    导入方法转自:http://www.cnblogs.com/S2-huai/p/3881349.html.. (原文:http://www.cnblogs.com/YouXianMing/p/3709 ...

  4. RealSense R400系列深度相机的图像获取保存和格式转换

    关于RealSense的基础使用的博文用的库有点混杂,挺多博文都是早期maneger的那个库,对那个不是很了解,主要记录一下使用最新的函数库的基础使用. 相机型号:RealSense R435 使用函 ...

  5. 调用android系统相机拍照并保存

    [java] view plaincopyprint? <span style="font-size:18px;">package com.demo; import j ...

  6. android调用系统相机拍照并保存在本地

    import java.io.File; import java.io.FileNotFoundException; import java.io.FileOutputStream; import j ...

  7. ## 在webapp上使用input:file, 指定capture属性调用默认相机,摄像,录音功能

    在iOS6下开发webapp,使用inputz之file,很有用 <input type="file" accept="image/*" capture= ...

  8. DevExpress asp.net 导出Excel 自动开启迅雷问题,默认保存为aspx页面

    目前采取曲线救国策略: 利用MVC ..... <dx:ASPxGridView ID="ASPxGridView1" runat="server" Au ...

  9. Android下 调用原生相机拍照摄像

    1 http://www.cnblogs.com/franksunny/archive/2011/11/17/2252926.html 2 http://www.cnblogs.com/vir56k/ ...

随机推荐

  1. o] TortoiseGit错误 - Could not get all refs. libgit2 returned: corrupted loose reference file

    因无法追溯的同步操作错误或工程文件错误,造成Git 同步时报错: Could not get all refs. libgit2 returned: corrupted loose reference ...

  2. Android开发手记(17) 数据存储二 文件存储数据

    Android为数据存储提供了五种方式: 1.SharedPreferences 2.文件存储 3.SQLite数据库 4.ContentProvider 5.网络存储 本文主要介绍如何使用文件来存储 ...

  3. Eclipse 经验之谈(一):快速打war包

    如何快速打一个war包: 具体步骤:  单击右键[在项目名称上]——>Export -->War File . 完成war包的导出了.嘻嘻

  4. iOS截屏代码

    转载自:http://m.open-open.com/m/code/view/1420469506375 1.普通界面 /** *截图功能 */ -(void)screenShot{ UIGraphi ...

  5. ios专题 - Scrum

    什么是Scrum? Scrum是一个敏捷开发框架,是一个增量的.迭代的开发过程.在这个框架中,整个开发过程由若干个短的迭代周期组成,一个短的迭代周期称为一个 Sprint,每个Sprint的建议长度是 ...

  6. PHP常用数组函数

      一.数组操作的基本函数 数组的键名和值 array_values($arr);  获得数组的值 array_keys($arr);  获得数组的键名 array_flip($arr);  数组中的 ...

  7. 笔记一:Python的PyDev插件在eclipse上面安装(新的插件地址 location)

    注:部分内容参考网上的,若有侵权,请作者联系我,马上进行删改 安装PyDev: 首先需要去Eclipse官网下载:http://www.eclipse.org/,Eclipse需要JDK支持,如果Ec ...

  8. cmd 窗口的复制粘贴

    如下几种方法1.点击鼠标右键,选择标志,再点击左键拖动选择要复制的内容,然后回车即可复制被 选择的内容 2.点击鼠标右键,选择标志,再点击左键拖动选择要复制的内容,然后点击鼠标右键, 此时就把选择的内 ...

  9. 用frame实现最基本的上中下三层布局,中间又分左右两部分.

    用frame实现最基本的上中下三层布局,中间又分左右两部分. 用frame的好处在于不用象DIV一样要对浮动和大小进行精确控制,以及要考虑宽屏的时候怎么办.而且在导航的时候非常简单.比如说,左边是导航 ...

  10. pgsql与mysql 下 varchar类型的数字文本的排序 区别

    两者都有cast函数,但使用方法完全不同. 1.在mysql中,cast( value as type) 将value的数据类型转换成type类型,其type可以为 二进制,同带binary前缀的效果 ...