| | |
| | | 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 |
| | | |
| | | // 在相机配置代码中 |
| | | if let videoConnection = output.connection(with: .video) { |
| | | // 自动旋转(推荐) |
| | | videoConnection.automaticallyAdjustsVideoMirroring = false |
| | | videoConnection.videoOrientation = .portrait // 或根据UI方向设置 |
| | | |
| | | // 对于前置摄像头启用镜像 |
| | | /*if videoConnection.isVideoMirroringSupported { |
| | | videoConnection.isVideoMirrored = (cameraPosition == .front) |
| | | }*/ |
| | | } |
| | | session.commitConfiguration() |
| | | session.startRunning() |
| | | print("📷 相机已开启") |
| | |
| | | guard let buffer = CMSampleBufferGetImageBuffer(sampleBuffer) else { return } |
| | | let width = CVPixelBufferGetWidth(buffer) |
| | | let height = CVPixelBufferGetHeight(buffer) |
| | | //print("📷 当前帧尺寸: \(width)x\(height)") |
| | | //print("Buffer Size: \(CVPixelBufferGetWidth(buffer))x\(CVPixelBufferGetHeight(buffer))") |
| | | //print("Connection orientation: \(connection.videoOrientation.rawValue)") |
| | | //print("Rotation angle: \(connection.videoRotationAngle)") |
| | | onFrame?(buffer) |
| | | } |
| | | |