博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
ios实现视频录制功能 一
阅读量:6215 次
发布时间:2019-06-21

本文共 2242 字,大约阅读时间需要 7 分钟。

hot3.png

再上代码前先简单的了解下视频录制中的几个重要的类和其作用是什么。

讲一个笑话:

今天早上上班,发现自行车不见了,于是问我老婆,我老婆大怒“你TM还有脸说,你昨天喝多了骑个树杈子回来还TM让我给你锁好,别问我,你自己去找去”

1、捕捉会话

AVCaptureSession是AVFoundation捕捉栈的核心类。一个会话在整个捕捉过程中相当于一个调度器,起到连接输入设备(摄像头)和输出资源的作用。其从物理设备上得到数据流输出到目的地。它还给我们提供了一个控制视频质量的接口(session preset)可以对视频进行一些设置。

2、捕捉连接

捕捉的连接由AVCaptrueConnection提供。它的作用为给捕捉设备输入渲染的媒体类型(通俗讲就是输入数据流的类型)自动建立能够接受此格式媒体类型的捕捉输出端连接,设备的媒体流是什么格式它就找到对应能够接受此格式的输出端。如AVCapureMovieFileOutput可以接受音频和视频数据,它提供桥梁将捕捉设备的媒体流导向此处。就像一根电线一样。

3、捕捉设备

AVCapureDeice控制着设备。为摄像头、麦克风或外接设备提供了一个接口。它提供了许多对设备控制的方法,比如闪光灯、对焦等等。

4、捕捉设备的输入

捕捉设备不能直接与捕捉会话进行联系。但是要完成摄像过程,两者缺一不可。所以,AVCaptureDeviceInput就应运而生。实例化的后建立联系的过程中,最好一个NSError的指针,当出现问题的时候可以迅速的定位到。

5、捕捉输出

捕捉输出使用到的是AVCaptureOutput,它是一个抽象类。所以使用过程中我们使用的都是它的扩展类。此类致力于为捕捉到的会话寻找输出目的地。和捕捉连接区分一下,捕捉会话、捕捉连接、捕捉输出他们三个之间的关系就像男女和媒婆。捕捉设备是男(输入数据),捕捉输出是女(能对应接受数据,输出数据),那捕捉连接就是媒婆,给他们配对。一般在保存捕捉到的数据的时候使用到捕捉输出。

6、捕捉预览

它作用单纯,就是能让我们看到我们在录制什么,要不然屏幕黑的,录到不该录得我们都不知道。它叫做AVCaptureVideoPreviewLayer,它还可以进行缩放和拉伸。

框架搭建

AVCaptureSession *session    = [[AVCaptureSession alloc]init];       //创建会话    session.sessionPreset    = AVCaptureSessionPresetHigh;    AVCaptureDevice  *device = [AVCaptureDevice defaultDeviceWithMediaType:AVMediaTypeVideo];  //设备    NSError *error;    //捕捉设备输入    AVCaptureDeviceInput *input = [AVCaptureDeviceInput deviceInputWithDevice:device error:&error];     if ([session canAddInput:input]) {//canAddInput是一个用于判断能否添加的方法,能返回yes不能返回No                [session addInput:input];     //添加给会话    }    AVCaptureStillImageOutput *imageOutput = [[AVCaptureStillImageOutput alloc] init]; //捕捉输出    imageOutput.outputSettings             = @{AVVideoCodecKey : AVVideoCodecJPEG};    //配置格式    AVCaptureMovieFileOutput *videoOutpur  = [[AVCaptureMovieFileOutput alloc]init];   //配置一个视频的输出    if ([session canAddOutput:imageOutput]) {                [session addOutput:imageOutput];  //添加给会话        [session addOutput: videoOutpur];    }        //设置捕捉预览并添加到view的layer上    AVCaptureVideoPreviewLayer *layer = [[AVCaptureVideoPreviewLayer alloc]initWithSession:session];    [layer setSession:session];    layer.frame = self.view.frame;    [self.view.layer addSublayer:layer];    [session startRunning];

将以上代码加到相关方法中调用就可以实现视频录制,注意得真机调试才可以。第一次运行会出现个弹框,一定要选择允许。

转载于:https://my.oschina.net/zhengjianhua/blog/690197

你可能感兴趣的文章
对于新手来说,Python 中有哪些难以理解的概念?
查看>>
去周庄吃鱼
查看>>
python 字符串,列表,字典常用方法
查看>>
红帽mysql5.6源码编译安装过程
查看>>
mysql数据库密码重置
查看>>
面试中与HR的对决
查看>>
ClientProtocol协议之上定义的方法
查看>>
【hibernate】实体类创建的两种方式
查看>>
php源代码安装常见错误与解决办法
查看>>
linux-ldap的安装
查看>>
编译内核时bad register name `%dil'错误
查看>>
企业身份认证:风雨之后需绸缪
查看>>
实验:构建Samba共享服务器
查看>>
右击桌面反应慢
查看>>
Zabbix 3.2.6通过ODBC监控MySQL&Oracle
查看>>
mysql5.7的配置文件优化参考
查看>>
函数的调用
查看>>
线程常用操作方法
查看>>
超简单c语言小程序
查看>>
break跳出循环、continue结束本次循环、exit退出整个脚本
查看>>