贡献作者 -【XJDomain】
博客XJ: https://my.oschina.net/shengbingli/blog
GitHub: https://github.com/lishengbing/XJQRCodeToolDemo
第一讲:采集上
01-视频采集
//
// ViewController.swift
// 视频采集
//
// Created by 李胜兵 on 2015/11/23.
// Copyright © 2015年 付公司. All rights reserved.
//
import UIKit
import AVFoundation
class ViewController: UIViewController {
fileprivate lazy var vedioQueue = DispatchQueue.global()
fileprivate lazy var session : AVCaptureSession = AVCaptureSession()
fileprivate lazy var previewLayer : AVCaptureVideoPreviewLayer = AVCaptureVideoPreviewLayer(session: self.session)
override func viewDidLoad() {
super.viewDidLoad()
}
}
// MARK: - 视频的开始采集和停止采集
extension ViewController {
@IBAction func starCapture() {
stopCapture()
guard let devices = AVCaptureDevice.devices(withMediaType: AVMediaTypeVideo) as? [AVCaptureDevice] else {
return
}
/* 获取摄像头设备方式1
let device = devices.filter { (device : AVCaptureDevice) -> Bool in
return device.position == .front
}.first
*/
// 获取摄像头设备方式2
guard let device = devices.filter({$0.position == .back}).first else { return }
guard let vedioInput = try? AVCaptureDeviceInput(device: device) else { return }
if session.canAddInput(vedioInput) {
session.addInput(vedioInput)
}
let vedioOutput = AVCaptureVideoDataOutput()
vedioOutput.setSampleBufferDelegate(self, queue: vedioQueue)
if session.canAddOutput(vedioOutput) {
session.addOutput(vedioOutput)
}
previewLayer.frame = view.bounds
view.layer.insertSublayer(previewLayer, at: 0)
session.startRunning()
}
@IBAction func stopCapture() {
session.stopRunning()
previewLayer.removeFromSuperlayer()
}
}
extension ViewController : AVCaptureVideoDataOutputSampleBufferDelegate {
func captureOutput(_ captureOutput: AVCaptureOutput!, didOutputSampleBuffer sampleBuffer: CMSampleBuffer!, from connection: AVCaptureConnection!) {
print("已经采集到画面")
}
}