设置 `device.activeVideoMinFrameDuration` 和 `device.activeVideoMaxFrameDuration` 没有任何作用

Setting `device.activeVideoMinFrameDuration` and `device.activeVideoMaxFrameDuration` doesn't do anything

我正在制作一个自定义的相机应用程序,我想以 60fps 的速度获取相机输入(我不太关心质量)并在 UIView 中显示它。

到目前为止我有以下内容:

struct CustomCameraView: UIViewRepresentable {
    func makeUIView(context: Context) -> some UIView {
        let previewView = UIImageView()
        func configureCameraForHighestFrameRate(device: AVCaptureDevice) {
            do {
                try device.lockForConfiguration()                
                let fr = CMTimeMake(value: 1, timescale: 60)
                device.activeVideoMinFrameDuration = fr
                device.activeVideoMaxFrameDuration = fr                
                device.unlockForConfiguration()
            } catch {
                print("error setting frame rate")
            }
        }
        
        func setupLivePreview() {
            videoPreviewLayer = AVCaptureVideoPreviewLayer(session: captureSession)
            videoPreviewLayer.videoGravity = .resizeAspect
            videoPreviewLayer.connection?.videoOrientation = .portrait
            previewView.layer.addSublayer(videoPreviewLayer)
            captureSession.commitConfiguration()
            DispatchQueue.global(qos: .userInitiated).async {
                captureSession.startRunning()
                DispatchQueue.main.async {
                    videoPreviewLayer.frame = previewView.bounds
                }
            }
        }
                
        var captureSession: AVCaptureSession!
        var videoPreviewLayer: AVCaptureVideoPreviewLayer!
        
        captureSession = AVCaptureSession()
        captureSession.beginConfiguration()        
        guard let backCamera = AVCaptureDevice.default(for: AVMediaType.video) else {
            print("Unable to access back camera!")
            return UIImageView()
        }        
        configureCameraForHighestFrameRate(device: backCamera)
        do {
            let input = try AVCaptureDeviceInput(device: backCamera)
            print("max frame duration on input",
input.device.activeVideoMaxFrameDuration)
            
            if captureSession.canAddInput(input) {
                captureSession.addInput(input)
                setupLivePreview()
            }
        }
        catch let error  {
            print("Error Unable to initialize back camera:  \(error.localizedDescription)")
        }
        
        return previewView
    }

    func updateUIView(_ uiView: UIViewType, context: Context) {}
}

很简单,我访问相机,设置它的 activeVideoMinFrameDurationactiveVideoMaxFrameDuration,然后我使用 AVCaptureVideoPreviewLayer 替换 UIImageViewCALayer.

我尝试将 CMTimetimescale 更改为 302010,甚至 1,但它没有有什么作用。我该怎么办?

我没有收到任何错误,这是我的系统信息:

原来Apple's documentation是错误的:

Directly configuring a capture device’s activeFormat property changes the capture session’s preset to inputPriority.

这不是真的,我必须将捕获会话的预设设置为 .inputPriority 才能对捕获的设备进行配置。所以添加这一行解决了问题:

captureSession.sessionPreset = .inputPriority

我在 Apple 开发者论坛上做了 a post,希望他们能看一看。