import Cocoa
import AVKit
import VideoToolbox
//全局
private var session: AVCaptureSession?
private var videoInput: AVCaptureDeviceInput?
private var videoOutput: AVCaptureVideoDataOutput?
// session
self.session = AVCaptureSession()
// 发现设备
let discoverySession = AVCaptureDevice.DiscoverySession(deviceTypes: [.externalUnknown], mediaType: .video, position: .unspecified)
// 设备列表
let devices = discoverySession.devices
if let device = self.devices.first {//改案例默认选中第一个
guard let input = try? AVCaptureDeviceInput(device: device) else { return }
self.videoInput = input
let output = AVCaptureVideoDataOutput()
output.setSampleBufferDelegate(self, queue: .main)
self.videoOutput = output
self.session?.addInput(input)
self.session?.addOutput(output)
}
// 开始运行
self.session?.startRunning()
// AVCaptureVideoDataOutputSampleBufferDelegate回调
func captureOutput(_ output: AVCaptureOutput, didOutput sampleBuffer: CMSampleBuffer, from connection: AVCaptureConnection) {
DispatchQueue.global().async {//处理图像
if let imageBuffer = CMSampleBufferGetImageBuffer(sampleBuffer) {
var cgImage: CGImage?
VTCreateCGImageFromCVPixelBuffer(imageBuffer, options: nil, imageOut: &cgImage)
// 这里将对cgImage进行处理
}
}
}
【MAC】外接摄像头
于 2023-05-06 10:51:17 首次发布