AVCaptureDevice.DeviceType
有一组摄像头选项,允许我们列出可用的设备并从中挑选一个。
例如,下面的代码块列出了我的iPhone上的可用设备。
let discoverySession = AVCaptureDevice.DiscoverySession(deviceTypes:
[.builtInTrueDepthCamera, .builtInDualCamera, .builtInWideAngleCamera, .builtInDualWideCamera, .builtInTripleCamera, .builtInTelephotoCamera, .builtInUltraWideCamera],
mediaType: .video, position: .back)
let devices = discoverySession.devices
guard !devices.isEmpty else { fatalError("Missing capture devices.")}
devices.forEach({
print($0.deviceType)
})
当我在我的iPhone上运行这个代码片段时,我得到了下面的结果。
AVCaptureDeviceType(_rawValue: AVCaptureDeviceTypeBuiltInWideAngleCamera)
AVCaptureDeviceType(_rawValue: AVCaptureDeviceTypeBuiltInDualWideCamera)
AVCaptureDeviceType(_rawValue: AVCaptureDeviceTypeBuiltInUltraWideCamera)
我的设备上有3个设备可用。我如何知道哪一个是最好的选项,或者哪个设备具有最高的质量?当然,我想在用户的设备上选择质量最好的设备。这些选项之间的区别在哪里?我如何在运行时知道如何选择最好的选项?
发布于 2021-06-18 13:42:46
设置摄像头
//MARK: Setup Camera
private func setUpCamera(){
let session = AVCaptureSession()
if let device = AVCaptureDevice.default(AVCaptureDevice.DeviceType.builtInWideAngleCamera, for: .video, position: .front) {
do {
let input = try AVCaptureDeviceInput(device: device)
if session.canAddInput(input) {
session.addInput(input)
}
if session.canAddOutput(output) {
session.addOutput(output)
}
previewLayer.videoGravity = .resizeAspectFill
previewLayer.connection?.videoOrientation = .portrait
previewLayer.session = session
cameraView.layer.addSublayer(previewLayer)
previewLayer.position = CGPoint(x: self.cameraView.frame.width/2, y: self.cameraView.frame.height/2)
session.startRunning()
self.session = session
}
catch let error {
print("Error Unable to initialize back camera: \(error.localizedDescription)")
}
}
}
https://stackoverflow.com/questions/62333699
复制相似问题