您的位置:首页 > 移动开发 > IOS开发

iOS视频采集(一)

2016-11-12 16:29 218 查看
//
//  ViewController.swift
//  videocapture
//
//  Created by targetcloud on 2016/11/12.
//  Copyright © 2016年 targetcloud. All rights reserved.
//

import UIKit
import AVFoundation

class ViewController: UIViewController {
fileprivate lazy var videoQueue = DispatchQueue.global()
//    fileprivate var session : AVCaptureSession?
fileprivate lazy var session : AVCaptureSession = AVCaptureSession()
fileprivate lazy var previewLayer : AVCaptureVideoPreviewLayer = AVCaptureVideoPreviewLayer(session: self.session)

override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view, typically from a nib.
}

//    @IBOutlet weak var a: UIButton!

override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}

@IBAction func startCapture(_ sender: Any) {
//        let session = AVCaptureSession()
//        self.session = session
guard let devices = AVCaptureDevice.devices(withMediaType: AVMediaTypeVideo) as? [AVCaptureDevice] else {
print("摄像头不可用");
print("------>>>>>>>>>>>><<<<<<<<<<<<<<<------")
return
}
//        let device = devices.filter(<#T##isIncluded: (AVCaptureDevice) throws -> Bool##(AVCaptureDevice) throws -> Bool#>)
guard let device = devices.filter({$0.position == .front}).first else {return}//$0表示闭包的第一个参数
/*
let device = devices.filter { (device : AVCaptureDevice) -> Bool in
return device.position == .front
}.first
*/
/*
var device : AVCaptureDevice!
for d in devices{
if d.position == .front{
device = d
break
}
}
*/
guard let videoInput = try? AVCaptureDeviceInput(device: device) else {return}
session.addInput(videoInput)

let videoOutput = AVCaptureVideoDataOutput()

videoOutput.setSampleBufferDelegate(self, queue:videoQueue)
session.addOutput(videoOutput)

//        let previewLayer = AVCaptureVideoPreviewLayer(session: session)
//        previewLayer?.frame = view.bounds
//        view.layer.addSublayer(previewLayer!)
previewLayer.frame = view.bounds
//        view.layer.addSublayer(previewLayer)
view.layer.insertSublayer(previewLayer, at: 0)
session.startRunning()
}

@IBAction func endCapture(_ sender: Any) {
session.stopRunning()
previewLayer.removeFromSuperlayer()
}
}

extension ViewController : AVCaptureVideoDataOutputSampleBufferDelegate{
func captureOutput(_ captureOutput: AVCaptureOutput!, didOutputSampleBuffer sampleBuffer: CMSampleBuffer!, from connection: AVCaptureConnection!) {
print("采集画面");
print("------>>>>>>>>>>>><<<<<<<<<<<<<<<------")
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  iOS 视频采集 swift