ios实现视频录制功能 一

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

讲一个笑话:

今天早上上班,发现自行车不见了,于是问我老婆,我老婆大怒“你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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值