今天研究了一下使用app录制视频的功能,感觉还是挺简单的。使用了AVFoundation框架,代码比较死,按步骤调用就行。

分享一下今天做的Demo的步骤

一,初始化输入设备,这里涉及到前,后摄像头;麦克风(导入AVFoundation)

    //1.创建视频设备(摄像头前,后)
NSArray *devices = [AVCaptureDevice devicesWithMediaType:AVMediaTypeVideo];
//2.初始化一个摄像头输入设备(first是后置摄像头,last是前置摄像头)
AVCaptureDeviceInput *inputVideo = [AVCaptureDeviceInput deviceInputWithDevice:[devices firstObject] error:NULL]; //3.创建麦克风设备
AVCaptureDevice *deviceAudio = [AVCaptureDevice defaultDeviceWithMediaType:AVMediaTypeAudio];
//4.初始化麦克风输入设备
AVCaptureDeviceInput *inputAudio = [AVCaptureDeviceInput deviceInputWithDevice:deviceAudio error:NULL];

二,初始化视频文件输出

    //5.初始化一个movie的文件输出
AVCaptureMovieFileOutput *output = [[AVCaptureMovieFileOutput alloc] init];
self.output = output; //保存output,方便下面操作

三,初始化会话,并将输入输出设备添加到会话中

     //6.初始化一个会话
AVCaptureSession *session = [[AVCaptureSession alloc] init]; //7.将输入输出设备添加到会话中
if ([session canAddInput:inputVideo]) {
[session addInput:inputVideo];
}
if ([session canAddInput:inputAudio]) {
[session addInput:inputAudio];
}
if ([session canAddOutput:output]) {
[session addOutput:output];
}

四,添加一个视频预览图层,设置大小,添加到控制器view的图层上

     //8.创建一个预览涂层
AVCaptureVideoPreviewLayer *preLayer = [AVCaptureVideoPreviewLayer layerWithSession:session];
//设置图层的大小
preLayer.frame = self.view.bounds;
//添加到view上
[self.view.layer addSublayer:preLayer];

五,开始会话

//9.开始会话 [session startRunning];

六,添加一个按钮:点击开始,停止录制视频,并设置录制视频的代理

 - (IBAction)clickVideoBtn:(UIButton *)sender {
//判断是否在录制,如果在录制,就停止,并设置按钮title
if ([self.output isRecording]) {
[self.output stopRecording];
[sender setTitle:@"录制" forState:UIControlStateNormal];
return;
} //设置按钮的title
[sender setTitle:@"停止" forState:UIControlStateNormal]; //10.开始录制视频
//设置录制视频保存的路径
NSString *path = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES).lastObject stringByAppendingPathComponent:@"myVidio.mov"]; //转为视频保存的url
NSURL *url = [NSURL fileURLWithPath:path]; //开始录制,并设置控制器为录制的代理
[self.output startRecordingToOutputFileURL:url recordingDelegate:self]; }

七,实现代理方法(这里只实现一个完成代理方法吧,其他根据自己的需求再设置)

 #pragma  mark - AVCaptureFileOutputRecordingDelegate
//录制完成代理
- (void)captureOutput:(AVCaptureFileOutput *)captureOutput didFinishRecordingToOutputFileAtURL:(NSURL *)outputFileURL fromConnections:(NSArray *)connections error:(NSError *)error
{
NSLog(@"完成录制,可以自己做进一步的处理");
}

八,真机运行,嘿嘿

IOS开发---视频录制的更多相关文章

  1. IOS开发-视频,音频,录音简单总结

    /***** * 1. 视频播放 * *  @格式:mp4 mov m4v m2v 3gp 3g2 * *  @系统框架使用:#import <MediaPlayer/MediaPlayer.h ...

  2. 自学 iOS 开发的一些经验 - 转自无网不剩的博客

    不知不觉作为 iOS 开发也有两年多的时间了,记得当初看到 OC 的语法时,愣是被吓了回去,隔了好久才重新耐下心去啃一啃.啃了一阵,觉得大概有了点概念,看到 Cocoa 那么多的 Class,又懵了, ...

  3. (转)Limboy:自学 iOS 开发的一些经验

    不知不觉作为 iOS 开发也有两年多的时间了,记得当初看到 OC 的语法时,愣是被吓了回去,隔了好久才重新耐下心去啃一啃.啃了一阵,觉得大概有了点概念,看到 Cocoa 那么多的 Class,又懵了, ...

  4. Limboy:自学 iOS 开发的一些经验

    不知不觉作为 iOS 开发也有两年多的时间了,记得当初看到 OC 的语法时,愣是被吓了回去,隔了好久才重新耐下心去啃一啃.啃了一阵,觉得大概有了点概念,看到 Cocoa 那么多的 Class,又懵了, ...

  5. iOS开发系列--音频播放、录音、视频播放、拍照、视频录制

    --iOS多媒体 概览 随着移动互联网的发展,如今的手机早已不是打电话.发短信那么简单了,播放音乐.视频.录音.拍照等都是很常用的功能.在iOS中对于多媒体的支持是非常强大的,无论是音视频播放.录制, ...

  6. iOS开发----音频播放、录音、视频播放、拍照、视频录制

    随着移动互联网的发展,如今的手机早已不是打电话.发短信那么简单了,播放音乐.视频.录音.拍照等都是很常用的功能.在iOS中对于多媒体的支持是非常强大的,无论是音视频播放.录制,还是对麦克风.摄像头的操 ...

  7. IOS开发之小实例--创建一个简单的用于视频录制和回放的应用程序

    前言:还是看了一下国外的入门IOS文章:<Create a Simple App for Video Recording and Playback>,主要涉及视频录制和回放的功能的基本实现 ...

  8. 《转》iOS音频视频初级开发

    代码改变世界 Posts - 73, Articles - 0, Comments - 1539 Cnblogs Dashboard Logout HOME CONTACT GALLERY RSS   ...

  9. iOS音频播放、录音、视频播放、拍照、视频录制

    随着移动互联网的发展,如今的手机早已不是打电话.发短信那么简单了,播放音乐.视频.录音.拍照等都是很常用的功能.在iOS中对于多媒体的支持是非常强大的,无论是音视频播放.录制,还是对麦克风.摄像头的操 ...

随机推荐

  1. Android中文API (109) —— SimpleCursorTreeAdapter

    前言 本章内容是android.widget.SimpleCursorTreeAdapter,版本为Android 3.0 r1,翻译来自"深夜未眠",含示例代码,欢迎访问它的博客 ...

  2. SSH三大框架整合案例

    SSH三大框架的整合   SSH三个框架的知识点 一.Hibernate框架 1. Hibernate的核心配置文件 1.1 数据库信息.连接池配置 1.2 Hibernate信息 1.3 映射配置 ...

  3. Java基础学习笔记十七 集合框架(三)之Map

    Map接口 通过查看Map接口描述,发现Map接口下的集合与Collection接口下的集合,它们存储数据的形式不同,如下图. Collection中的集合,元素是孤立存在的(理解为单身),向集合中存 ...

  4. Alpha冲刺Day3

    Alpha冲刺Day3 一:站立式会议 今日安排: 我们把项目大体分为四个模块:数据管理员.企业人员.第三方机构.政府人员.数据管理员这一模块,数据管理员又可细分为两个模块:基础数据管理和风险信息管理 ...

  5. Flask 应用最佳实践

    一个好的应用目录结构可以方便代码的管理和维护,一个好的应用管理维护方式也可以强化程序的可扩展性 应用目录结构 假定我们的应用主目录是"flask-demo",首先我们建议每个应用都 ...

  6. 前端双引号单引号,正则反向引用,js比较jq

    1.js,jq,css,html属性必须双,如果同时出现需要嵌套使用,属性的规范是双但是也可以用单测试有效 单引号现象举例:jq中获取元素标签是单引号:$('input').click:弹出也是单引号 ...

  7. DNS搜索过程

    以www.renyi.com为例 一:客户端首先检查本地HOST文件,是否有对应的IP地址,如果有,客户端直接访问,如果没有,则执行下一步. 二:客户端查看本地缓存信息,是否有对应的IP地址,如果有, ...

  8. Vue.js和jQuery混合使用的一点注意事项

    首先,Vue 的官方是不建议直接操作 DOM 的,其优势在于视图和数据的双向绑定,而且所有DOM操作都可以用Vue实现,反而使用jQuery来操作DOM的话,会造成不必要的麻烦,DOM未渲染完成之前事 ...

  9. proxymysql的安装与应用

    具体的资料我们可以查看官方的文档:https://github.com/sysown/proxysql/wiki/ProxySQL-Configuration 推荐下载最新的Proxysql. 下面跟 ...

  10. 原生JS封装时间运动函数

    /*讲时间运动之前先给大家复习一下运动函数 通常大家都会写运动框架,一个定时器(Timer),一个步长(step 就是每次运动的距离),一个当前位置(current)一个目标位置(target),然后 ...