之前已经有一篇博客讲过怎么开启摄像头并完成对摄像头的图像的滤镜化了,现在就说说怎么录像,并把这个添加滤镜的录像文件写到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. 在C#中实现Socket端口复用

    转载:http://www.csharpwin.com/csharpspace/68.shtml 一.什么是端口复用:        因为在winsock的实现中,对于服务器的绑定是可以多重绑定的,在 ...

  2. CoreAnimation3-专用图层

    CAShapeLayer CAShapeLayer是一个通过矢量图形而不是bitmap来绘制的图层子类.你指定诸如颜色和线宽等属性,用CGPath来定义想要绘制的图形,最后CAShapeLayer就自 ...

  3. 读懂IL代码(四)

    这一篇是IL系列的最后一篇的,主要是要说一下IL中的流程控制.我相信,经过前面三篇的介绍,看IL代码应该不是什么大问题了吧.好吧,闲话不多说了,就来简单的说一下吧. 还是跟前几篇一样,以例子来解释说明 ...

  4. gif图简介

    多媒体教程 - GIF 图 GIF 是在 Web 上使用的主要图像格式之一. 本文详细讲解了 GIF 图像的特性和使用技巧. 理解图像格式 无论是 HTML 还是 XHTML 都没有规定图像的官方格式 ...

  5. HTML网页图片滚动代码

    <!--下面是向上滚动代码--> <div id=butong_net_top style=overflow:hidden;height:100;width:90;> < ...

  6. JDBC连接池以及动态SQL处理

    复习一下: 1.先创建一个properties配置文件 ClasssName=oracle.jdbc.driver.OracleDriver url=jdbc:oracle:thin:@服务器IP:端 ...

  7. Lucene初步搜索

    Lucene在创立索引后,要进行搜索查询 搜索大概需要5部, 1,读取索引. 2,查询索引. 3,匹配数据. 4,封装匹配结果. 5,获取需要的值. 语言表达能力不好,大概就是分着几部吧. /** * ...

  8. 《C++ Primer》P314中使用insert重写单词统计程序的扩展

    编写程序统计并输出所读入的单词出现的次数 想与习题10-1相结合,也就是先输入几组 map<string, int>类型,存入vector中. 再输入单词word,如果已经存在则在key对 ...

  9. ACM HDU 2674 N! Again(数论)

    继续数论.. Problem Description WhereIsHeroFrom:            Zty,what are you doing ? Zty:                 ...

  10. java设计模式——接口模式

    java将接口的概念提升为独立的结构,体现了接口与实现分离.java接口允许多个类提供相同的功能,也允许一个同时实现多个接口.java的接口与抽象类十分相似.java与抽象类中的区别: 1.一个类可以 ...