Ios 设置'device.activeVideoMinFrameDuration'和'device.activeVideoMaxFrameDuration'不';我什么也不做
我正在制作一个定制的摄像头应用程序,我想以60fps的速度获取摄像头输入(我不太关心质量),并在UIView中显示 到目前为止,我掌握的情况如下:Ios 设置'device.activeVideoMinFrameDuration'和'device.activeVideoMaxFrameDuration'不';我什么也不做,ios,swift,iphone,swiftui,Ios,Swift,Iphone,Swiftui,我正在制作一个定制的摄像头应用程序,我想以60fps的速度获取摄像头输入(我不太关心质量),并在UIView中显示 到目前为止,我掌握的情况如下: struct CustomCameraView: UIViewRepresentable { func makeUIView(context: Context) -> some UIView { let previewView = UIImageView() func configureCameraFor
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) {}
}
非常简单,我访问相机,设置其activeVideoMinFrameDuration
和activeVideoMaxFrameDuration
s,然后使用AVCaptureVideoPreviewLayer
替换UIImageView
的CALayer
我尝试将CMTime
的时间刻度更改为30
,20
,10
,甚至1
,但没有任何效果。我该怎么办
我没有收到任何错误,以下是我的系统信息:
- iPhone11Pro
- XCode版本12.0.1(12A7300)
- iOS 14.0.1
结果是错误的:
直接配置捕获设备的activeFormat属性会将捕获会话的预设更改为inputPriority
这不是真的,我必须将捕获会话的预设设置为.inputPriority
,才能进行捕获设备的配置。因此,添加这一行解决了问题:
captureSession.sessionPreset = .inputPriority
我在苹果开发者论坛上发表了一篇文章,希望他们能看一看