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

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

通过AVFoundation框架获取摄像头数据

一、概述 从iOS4开始,AVFoundation框架增加了几个类,AVCaptureDevice、AVCaptureSession等,可以获取摄像头的数据,而不会弹出类似于Imag...
  • jingcheng345413
  • jingcheng345413
  • 2017年02月10日 14:10
  • 1162

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

通过AVFoundation来捕捉视频数据
  • qinhui13
  • qinhui13
  • 2015年11月25日 19:49
  • 2797

纯属娱乐

#include #include using namespace std; class Node { public: int para; int exp; No...
  • wyx13109395842
  • wyx13109395842
  • 2016年05月01日 16:41
  • 306

swift 中通过AVFoundation来定制拍摄窗口

let devices = AVCaptureDevice.devices().filter{ $0.hasMediaType(AVMediaTypeVideo) && $0.position == ...
  • remote_roamer
  • remote_roamer
  • 2016年03月18日 21:09
  • 2010

电脑性能测试(纯属娱乐)

第100篇博文,留给我买了1个半月的装了N多游戏N多软件的电脑,以下是最新的电脑性能测试(纯属娱乐),YY下,留作纪念~ 电脑...
  • evangel_z
  • evangel_z
  • 2012年06月21日 20:40
  • 1987

iOS AVFoundation实现相机功能

首先导入头文件 #import  导入头文件后创建几个相机必须实现的对象 /** * AVCaptureSession对象来执行输入设备和输出设备之间的数据传递 */...
  • qq_33140415
  • qq_33140415
  • 2016年05月04日 09:53
  • 1172

【FFMPEG】FFMPEG程序捕获Mac设备流媒体

1. 从ffmpeg官网下载ffmpeg版本,选择Mac版本,其中static版本的程序包含了所有的库,先用这个版本。这个版本只有一个执行程序文件ffmpeg 2. 运行 ./ffmpeg -de...
  • arctan90
  • arctan90
  • 2016年03月08日 18:28
  • 2657

AVFoundation的介绍

一、简述 AVFoundation是一个OC媒体数据的高级框架。AVFoundation的构建考虑到了目前的硬件环境和应用程序,其设计过程高度依赖多线程机制。充分利用了多核硬件的优势并大量使用blo...
  • Smiling8866
  • Smiling8866
  • 2016年06月22日 10:40
  • 1267

利用AVFoundation实现二维码扫描以及其中的问题

二维码扫描中的问题
  • rxl_dhf
  • rxl_dhf
  • 2016年04月18日 23:05
  • 559

AVFoundation理解及开发步骤

一.概述 在做图片和视频方面处理时有两种方法,一种是UIImagePickerController,另外一种方法是AVFoundation框架。 UIImagePickerController...
  • Smiling8866
  • Smiling8866
  • 2015年07月22日 13:23
  • 4079
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:AVFoundation摄像头使用(纯属娱乐)
举报原因:
原因补充:

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