iOS-原生扫码登录

AVCaptureDevice

An AVCaptureDevice represents a physical device that provides realtime input media data, such as video and audio.
翻译:一个AVCaptureDevice代表一个物理设备,它提供一个实时的输入媒体数据,例如:视频,音频;

Each instance of AVCaptureDevice corresponds to a device, such as a camera or microphone. Instances of AVCaptureDevice cannot be created directly. An array of all currently available devices can also be obtained using the AVCaptureDeviceDiscoverySession. Devices can provide one or more streams of a given media type. Applications can search for devices matching desired criteria by using AVCaptureDeviceDiscoverySession, or may obtain a reference to the default device matching desired criteria by using +[AVCaptureDevice defaultDeviceWithDeviceType:mediaType:position:].
翻译:每个AVCaptureDevice实例对象都代表着一个设备,如:相机,麦克风;一个AVCaptureDevice实例对象不能被直接创建,可以通过AVCaptureDeviceDiscoverySession获取当前所有可使用的设备;设备可以提供一个或者多个给定的的媒体类型的流;应用程序可以搜索获取设备通过使用AVCaptureDeviceDiscoverySession匹配所需的标准,或可能获得一个引用默认设备通过使用匹配所需的标准通过+[AVCaptureDevice defaultDeviceWithDeviceType:mediaType:position:

AVCaptureSession

AVCaptureSessionAVFoundation的核心类,用于捕捉视频和音频,协调视频和音频的输入和输出流;
To perform a real-time capture, a client may instantiate AVCaptureSession and add appropriate AVCaptureInputs, such as AVCaptureDeviceInput, and outputs, such as AVCaptureMovieFileOutput. [AVCaptureSession startRunning] starts the flow of data from the inputs to the outputs, and [AVCaptureSession stopRunning] stops the flow. A client may set the sessionPreset property to customize the quality level or bitrate of the output.
翻译:执行实时捕获,一个客户可以实例化AVCaptureSession并添加适当AVCaptureInputs,如AVCaptureDeviceInput和输出,如AVCaptureMovieFileOutput[AVCaptureSession startRunning]启动从输入到输出的数据流,[AVCaptureSession stopRunning]停止流。客户端可以设置sessionPreset属性来定制输出的质量级别或比特率。

AVCaptureInput

AVCaptureInput它是一个抽象类,提供一个实例对象将捕获到的输入源链接到AVCaptureSession上。既然是抽象类我们显然是无法直接使用的,所以我们只能用其子类AVCaptureDeviceInputAVCaptureScreenInputAVCaptureMetadataInput来创建;

  • AVCaptureDeviceInput:使用该对象从AVCaptureDevice设备获取媒体数据,该对象将会被添加给AVCaptureSession管理。
  • AVCaptureScreenInput:使用该对象从屏幕获取数据(用于录制屏幕).该对象将会被添加给AVCaptureSeesion管理。
  • AVCaptureMetaDataInput:获取元数据(很少使用).

AVCaptureOutput

AVCaptureOutput:相对应于AVCaptureInput,它也是一个抽象类,用来接收各种输出数据,为AVCaptureSession提供一个输出目标接口。所以我们还是只能使用其子类

      AVCaptureStillImageOutput    //使用AVCapturePhotoOutput替代了
      AVCaptureVideoDataOutput     //可以用来处理被捕获的视频中未压缩或压缩的帧。
      AVCaptureAudioDataOutput     //可以用来处理从音频捕获的未压缩或压缩的样本
      AVCaptureMetadataOutput      //可以用来处理附加连接中的元数据对象
      AVCaptureFileOutput          //文件输出可以开始记录到一个新的文件使用startRecordingToOutputFileURL:recordingDelegate:方法
      AVCapturePhotoOutput         //它支持照片捕捉生活,preview-sized图像传递,广泛的颜色,原生,原生+JPG和 原生+ DNG格式

AVCaptureVideoPreviewLayer

AVCaptureVideoPreviewLayer视频预览层,其实可以把它想象成一个画布,我们通过摄像头拍摄到的画面就显示在这个画布上。AVCaptureVideoPreviewLayer所呈现的画面是连续的,并非单张的静态影像,当然你也可以略过设定 AVCaptureVideoPreviewLayer 的步骤,不显示摄影机所拍摄到的画面,这并不会有任何影响。它是CALayer的子类,它可以实时查看拍照或视频录制效果,需要指定对应的 AVCaptureSession对象;

基础使用

//获取摄像机
    AVCaptureDevice *device = [AVCaptureDevice defaultDeviceWithMediaType:AVMediaTypeVideo];
    //创建会话对象
    self.session = [[AVCaptureSession alloc] init];
    //设置会话采集率
    self.session.sessionPreset = AVCaptureSessionPresetHigh;
    //创建设备输入流
    AVCaptureDeviceInput *deviceInput = [AVCaptureDeviceInput deviceInputWithDevice:device error:nil];
//    AVCaptureScreenInput
    //创建数据输出流
    AVCaptureMetadataOutput *metadataOuput = [[AVCaptureMetadataOutput alloc] init];
//    AVCaptureStillImageOutput
//    AVCaptureVideoDataOutput
//    AVCaptureAudioDataOutput
//    AVCaptureMetadataOutput
//    AVCaptureFileOutput
//    AVCapturePhotoOutput
    [metadataOuput setMetadataObjectsDelegate:self queue:dispatch_get_main_queue()];
    //创建设备输出流
//    AVCaptureVideoDataOutput *videoDataOutput = [[AVCaptureVideoDataOutput alloc] init];
//    [videoDataOutput setSampleBufferDelegate:self queue:dispatch_get_main_queue()];
    //设置扫描范围(每一个取值0~1,以屏幕右上角为坐标原点)
    metadataOuput.rectOfInterest = CGRectMake(0.05, 0.2, 0.7, 0.6);
    //添加设备输入流到会话对象
    if ([self.session canAddInput:deviceInput]) {
        [self.session addInput:deviceInput];
    }
    //添加设备输出流到会话对象
    if ([self.session canAddOutput:metadataOuput]) {
        [self.session addOutput:metadataOuput];
    }
//    [self.session addOutput:videoDataOutput];
    //设置设备输出类型;此处为只支持二维码,需要支持条形码的再添加AVMetadataObjectTypeCode128Code
    metadataOuput.metadataObjectTypes = @[AVMetadataObjectTypeQRCode];
    //实例化预览图层, 传递_session是为了告诉图层将来显示什么内容
    self.videoPreviewLayer = [AVCaptureVideoPreviewLayer layerWithSession:self.session];
    // 保持纵横比;填充层边界
    self.videoPreviewLayer.videoGravity = AVLayerVideoGravityResizeAspectFill;
    self.videoPreviewLayer.frame = CGRectMake(0, 0, K_Screen_Width, K_Screen_Height);
    [self.view.layer insertSublayer:self.videoPreviewLayer atIndex:0];
    
    // 启动会话
    [self.session startRunning];

//此代理方法为扫码之后获取的二维码信息,在这里可以请求登录
- (void)captureOutput:(AVCaptureOutput *)captureOutput didOutputMetadataObjects:(NSArray *)metadataObjects fromConnection:(AVCaptureConnection *)connection {

}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 162,306评论 4 370
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 68,657评论 2 307
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 111,928评论 0 254
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 44,688评论 0 220
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 53,105评论 3 295
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 41,024评论 1 225
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 32,159评论 2 318
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,937评论 0 212
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,689评论 1 250
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,851评论 2 254
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,325评论 1 265
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,651评论 3 263
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,364评论 3 244
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,192评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,985评论 0 201
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 36,154评论 2 285
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,955评论 2 279

推荐阅读更多精彩内容