AVFoundation摄像头使用(纯属娱乐)

原创 2016年08月30日 18:35:25

#import "ViewController.h"

#import <AVFoundation/AVFoundation.h>

@interface ViewController ()<AVCaptureVideoDataOutputSampleBufferDelegate>

@property(nonatomic,strong)AVCaptureSession *session;

@property(nonatomic,strong)AVCaptureVideoPreviewLayer *previewLayer;

@property(nonatomic,strong)UIView *preview;

@end


@implementation ViewController


- (void)viewDidLoad {

    [superviewDidLoad];

    self.preview=[[UIViewalloc]init];

    self.preview.frame=self.view.frame;

    [self.viewaddSubview:self.preview];

    [selfsetupCaptureSession];

}

-(void)setupCaptureSession{

    //建立Session

    self.session=[[AVCaptureSessionalloc]init];

    //设置采集的质量

    if([self.sessioncanSetSessionPreset:AVCaptureSessionPreset640x480]){

        self.session.sessionPreset=AVCaptureSessionPreset640x480;

    }else{

        self.session.sessionPreset=AVCaptureSessionPresetHigh;

    }

    

//    NSArray *devices=[AVCaptureDevice devices];

//    for (AVCaptureDevice *device in devices) {

//        NSLog(@"设备名称:%@",[device localizedName]);

//        //是否有Camera

//        if ([device hasMediaType:AVMediaTypeVideo]) {

//            //如果该设备的位置是后置的

//            if([device position]==AVCaptureDevicePositionBack){

//                NSLog(@"back%@",[device localizedName]);

//            }else{

//                //前置摄像头

//                NSLog(@"front%@",[device localizedName]);

//            }

//        }

//    }

    

    //获取摄像头设备

    AVCaptureDevice *device=[AVCaptureDevicedefaultDeviceWithMediaType:AVMediaTypeVideo];

    NSError *error;

    AVCaptureDeviceInput *input=[AVCaptureDeviceInputdeviceInputWithDevice:deviceerror:&error];

    if (!input) {

        NSLog(@"%@",error);

        return;

    }

    [self.sessionaddInput:input];

    

    AVCaptureVideoDataOutput *output=[[AVCaptureVideoDataOutputalloc]init];

    [self.sessionaddOutput:output];

    

    dispatch_queue_t queue=dispatch_queue_create("DLG",NULL);

    [output setSampleBufferDelegate:selfqueue:queue];

    

//    output.videoSettings=[NSDictionary dictionaryWithObject:[NSNumber numberWithInt:kCVPixelFormatType_32BGRA] forKey:(id)kCVPixelBufferPixelFormatTypeKey];

    

    [self.sessionstartRunning];

    AVCaptureVideoPreviewLayer *preViewLayer=[AVCaptureVideoPreviewLayerlayerWithSession:self.session];

    preViewLayer.frame=self.preview.bounds;

    preViewLayer.videoGravity=AVLayerVideoGravityResizeAspectFill;

    [self.preview.layeraddSublayer:preViewLayer];

    if (![self.sessionisRunning]) {

        [self.sessionstartRunning];

    }

}

-(void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event{

    NSLog(@"%s",__FUNCTION__);

    NSArray *inputs=self.session.inputs;

    for (AVCaptureDeviceInput *inputin inputs) {

        AVCaptureDevice *device=input.device;

        //是否有Camera

        if ([devicehasMediaType:AVMediaTypeVideo]) {

            AVCaptureDevicePosition position=device.position;

            AVCaptureDevice *newCamera=nil;

            AVCaptureDeviceInput *newInput=nil;

            if(position==AVCaptureDevicePositionBack){

                //后置摄像头

                newCamera = [selfcameraWithPosition:AVCaptureDevicePositionFront];

                

            }else{

                //前置摄像头

                newCamera = [selfcameraWithPosition:AVCaptureDevicePositionBack];

            }

            newInput=[AVCaptureDeviceInputdeviceInputWithDevice:newCameraerror:nil];

            [self.sessionbeginConfiguration];

            [self.sessionremoveInput:input];

            [self.sessionaddInput:newInput];

            [self.sessioncommitConfiguration];

            break;

            

        }

    }

    

}

//获取前置摄像头设备或者后置摄像头设备

-(AVCaptureDevice *)cameraWithPosition:(AVCaptureDevicePosition)position{

    NSArray *devices=[AVCaptureDevicedevicesWithMediaType:AVMediaTypeVideo];

    for (AVCaptureDevice *devicein devices) {

        if (device.position==position) {

            return device;

        }

    }

    returnnil;

}

- (void)captureOutput:(AVCaptureOutput *)captureOutput

didOutputSampleBuffer:(CMSampleBufferRef)sampleBuffer

       fromConnection:(AVCaptureConnection *)connection{

    

    

    return;

}

@end

备注:更深了解请到 https://github.com/DLG90/dlg_AVFoundation

版权声明:本文为博主原创文章,未经博主允许不得转载。 举报

相关文章推荐

Ubuntu安装使用yum(纯属娱乐)

转载自:http://www.lupaworld.com/article-221217-1.html 摘要: Ubuntu默认的包管理器为apt,而yum是fedora,redhat...

通过AVFoundation获取摄像头数据[Swift]

通过AVFoundation来捕捉视频数据

我是如何成为一名python大咖的?

人生苦短,都说必须python,那么我分享下我是如何从小白成为Python资深开发者的吧。2014年我大学刚毕业..

IOS使用AVFoundation在视频上添加字幕以及控制字幕时间

IOS在视频上添加字幕效果的基本思路是: 使用自定义的CATextLayer文字图层或者CAShapeLayer文字图层,添加到视频的Layer上创建用户自定义的字幕效果。这两者的区别是:CATe...

使用AVFoundation完成二维码扫描

其中有几点需要注意的 1.应该使用异步线程来配置那几个属性,这样可以防止阻塞主线程加载UI。 2.output的rectOfInterst是感应区域,就是说,在这个区域内才有扫描效果。但是由于摄像...

Swift:使用系统AVFoundation实现二维码扫描和生成

系统提供的AVCaptureSession只适用于iOS7.0以上的系统;之前的请用Zbar来替代 配置工程: 引入: import Foundation import AVFoundation 接受...

AVFoundation使用

设置获取device-(AVCaptureDevice *)getCameraDeviceWithPosition:(AVCaptureDevicePosition )position{ NS...

AVFoundation编程指南-使用 Assets

转载自:AVFoundation编程指南1-使用 AssetsAVFoundation Programming Guide创建assert对象为了创建一个由URL标识的代表任何资源的assert对象,...

KTV点歌系统 源码我奉献了吧!纯属娱乐,自已做的,

可以点歌,伴唱,上传,看电影,玩游戏!对了歌曲目录,最好是从后台上传, 电影目录呀,请看源码,数据库表看源码,

路由器的世界的背景——纯属娱乐请勿当真

就当玄幻小说看吧嘿嘿 ———————————— 在遥远的某星球上,有一块神奇的大陆,在这里建立起了文明。 我们的故事,就从这里开始。 魔法纪元元年,一位老人翻越了崇山峻岭,在最西面的山洞中探险,...

消息队列实现简单即时通信(纯属娱乐)

声明: 仅个人小记 前言:  进程间通信的方式之一,消息队列机制。消息队列就是存活在内核中(就是操作系统中)的由消息构成的链表。我们通过指定一个键值(键值由我们自己设定),键值可以映射成一...
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)