USB 摄像头适配iPadOS17+ios端的配置

This commit is contained in:
2026-10-22 12:54:08 +08:00
parent 58a23ef218
commit 615d76a8ce
4 changed files with 401 additions and 0 deletions

View File

@@ -0,0 +1,51 @@
//
// UsbCameraView.swift
// usb_camera_android
//
// iOS 原生预览 PlatformView:用 AVCaptureVideoPreviewLayer 直接渲染 session。
//
import AVFoundation
import Flutter
import UIKit
/// 以 AVCaptureVideoPreviewLayer 作为 backing layer 的 UIView。
final class UsbCameraPreviewUIView: UIView {
override class var layerClass: AnyClass { AVCaptureVideoPreviewLayer.self }
var previewLayer: AVCaptureVideoPreviewLayer {
return layer as! AVCaptureVideoPreviewLayer
}
}
final class UsbCameraView: NSObject, FlutterPlatformView {
private let previewView: UsbCameraPreviewUIView
init(engine: UsbCameraEngine, frame: CGRect) {
self.previewView = UsbCameraPreviewUIView(frame: frame)
super.init()
previewView.previewLayer.session = engine.captureSession
previewView.previewLayer.videoGravity = .resizeAspect
}
func view() -> UIView {
return previewView
}
}
final class UsbCameraViewFactory: NSObject, FlutterPlatformViewFactory {
private let engine: UsbCameraEngine
init(engine: UsbCameraEngine) {
self.engine = engine
super.init()
}
func createArgsCodec() -> FlutterMessageCodec & NSObjectProtocol {
return FlutterStandardMessageCodec.sharedInstance()
}
func create(withFrame frame: CGRect, viewIdentifier viewId: Int64,
arguments args: Any?) -> FlutterPlatformView {
return UsbCameraView(engine: engine, frame: frame)
}
}