From acf8e83cbf106b4350536d54eb46379dd86a623c Mon Sep 17 00:00:00 2001 From: Runt <qingingrunt2010@qq.com> Date: Fri, 04 Jul 2025 17:05:00 +0000 Subject: [PATCH] 输入弹框 图标修改 相机调整 --- LiveProject/controller/CameraCapture.swift | 76 ++++++++++++++++++++++++++++++++++++++ 1 files changed, 76 insertions(+), 0 deletions(-) diff --git a/LiveProject/controller/CameraCapture.swift b/LiveProject/controller/CameraCapture.swift index e69de29..3345602 100644 --- a/LiveProject/controller/CameraCapture.swift +++ b/LiveProject/controller/CameraCapture.swift @@ -0,0 +1,76 @@ +// +// CameraCapture.swift +// LiveProject +// +// Created by 倪路朋 on 6/27/25. +// +import AVFoundation + +class CameraCapture: NSObject, AVCaptureVideoDataOutputSampleBufferDelegate { + private let session = AVCaptureSession() + private var videoOutput: AVCaptureVideoDataOutput? + private var input: AVCaptureDeviceInput? + var onFrame: ((CVPixelBuffer) -> Void)? + + func start() { + guard let device = AVCaptureDevice.default(for: .video), + let input = try? AVCaptureDeviceInput(device: device) else { + print("❌ 相机设备无法创建") + return + } + + self.input = input + + session.beginConfiguration() + session.sessionPreset = .hd1920x1080 + + if session.canAddInput(input) { + session.addInput(input) + } + + let output = AVCaptureVideoDataOutput() + output.videoSettings = [ + kCVPixelBufferPixelFormatTypeKey as String: kCVPixelFormatType_32BGRA + ] + output.setSampleBufferDelegate(self, queue: DispatchQueue(label: "camera.queue")) + + if session.canAddOutput(output) { + session.addOutput(output) + } + + self.videoOutput = output + + session.commitConfiguration() + session.startRunning() + print("📷 相机已开启") + } + + func captureOutput(_ output: AVCaptureOutput, + didOutput sampleBuffer: CMSampleBuffer, + from connection: AVCaptureConnection) { + guard let buffer = CMSampleBufferGetImageBuffer(sampleBuffer) else { return } + let width = CVPixelBufferGetWidth(buffer) + let height = CVPixelBufferGetHeight(buffer) + //print("📷 当前帧尺寸: \(width)x\(height)") + onFrame?(buffer) + } + + func stop(){ + session.stopRunning() + session.beginConfiguration() + + if let input = input { + session.removeInput(input) + } + + if let output = videoOutput { + session.removeOutput(output) + } + + session.commitConfiguration() + + input = nil + videoOutput = nil + print("📷 相机已关闭") + } +} -- Gitblit v1.9.1