xcode 内置双摄像头和内置双广角摄像头的区别

lrl1mhuk  于 2023-01-21  发布在  其他
关注(0)|答案(1)|浏览(298)

我对iPhone的摄像头知之甚少,而且我对builtInDualCamerabuiltInDualWideCamera之间的区别有点困惑。(builtInWideAngleCamerabuiltInUltraWideCamera也是如此)
内置双摄像头
一种由广角和远摄照相机组成的装置。
内置广角摄像头
一种由两个固定焦距的照相机组成的装置,一个是超广角照相机,另一个是广角照相机。
我猜builtInDualCamera就像iPhone 11的摄像头,builtInDualCamera就像iPhone X的摄像头......对吗?
我在开发一个摄像头应用(基本上是使用视频),我尝试在用户打开应用的摄像头屏幕时配置摄像头。我尝试了this article中的代码,基本上是选择要使用的摄像头。所以我下面的代码只是检查设备是否有3个摄像头〉2个摄像头〉1个摄像头,并在配置捕捉会话时使用其中一个。然而,device types具有两个类似的属性,如builtInDualCamerabuiltInDualWideCamera(还有builtInWideAngleCamerabuiltInUltraWideCamera)。我想知道iPhone的摄像头是builtInWideAngleCamera还是builtInUltraWideCamera。我还加了截图,但这就像iPhone X的摄像头和iPhone 11的摄像头之间的区别吗?(我的意思是...... iPhone 11的摄像头有两个独立的摄像头,而iPhone X有两个摄像头,但形状不同。

import AVFoundation

class CameraManager {
    
    static let shared = CameraManager()
    let discoverySession = AVCaptureDevice.DiscoverySession(deviceTypes: [.builtInTripleCamera, .builtInDualCamera, .builtInWideAngleCamera], mediaType: .video, position: .back)
    
    func getBestDevice() -> AVCaptureDevice? {
        let devices = discoverySession.devices
        guard !devices.isEmpty else { fatalError("Missing capture devices.")}
        return devices.first
    }
}

并使用类似

CameraManager.shared.getBestDevice()

如果我在discoverySession属性中有三个摄像头(.builtInTripleCamera,.builtInDualCamera,.builtInWideAngleCamera)来检查要使用哪个摄像头,每个iPhone摄像头都会被归类为其中之一?如果设备的摄像头是builtInWideAngleCamera,我是否需要将.builtInWideAngleCamera添加到discoverySession属性中才能使用builtInWideAngleCamera?

rggaifut

rggaifut1#

如果您查看DeviceType page,您会发现摄像头从最基本到最先进的排列如下:

  • builtInWideAngleCamera存在于所有iOS设备上,因为很久以前,
  • builtInDualCamera存在于iPhone 7中,
  • builtInTripleCamera是iPhone 11

但是你似乎根本不需要一个发现会话,你似乎想选择“拍摄视频的最佳后置摄像头”,所以你的案例福尔斯你引用的页面上的"Quickly Choose a Default Device"用例。
在您的情况下,您需要:.video,位置:.back,而第一个参数实际上取决于您要拍摄的视频类型。例如,您可以要求builtInTripleCamera(如果可用),然后要求builtInDualCamera,最后将builtInWideAngleCamera作为最低选项。或者,您可以决定没有builtInTripleCamera的用户无法使用您的应用:

if let device = AVCaptureDevice.default(.builtInTripleCamera,
                                        for: .video, position: .back) {
    return device
} else if let device = AVCaptureDevice.default(.builtInDualCamera,
                                               for: .video, position: .back) {
    return device
} else if let device = AVCaptureDevice.default(.builtInWideAngleCamera,
                                               for: .video, position: .back) {
    return device
} else {
    fatalError("Missing expected back camera device.")
}

相关问题