iPhone Camera

Horus-iOS·2022년 6월 1일
0

이 글은 Swift로 카메라 구현 시 기기별 렌즈에 따라 카메라 작동 여부를 파악하기 위한 글이며, 이제 막 카메라 구현을 시작하시는 분들에게 조금이라도 도움이 될 수 있기를 바라는 글입니다. 이미 능숙하게 카메라 구현을 하시는 분들은 큰 의미가 없을 수 있습니다. 내용에 관계없이 기기에 따라 급하게 AVCaptureDevice.DeviceType을 구현하시는 경우 이 글의 가장 아래에 있는 표를 참고하시기 바랍니다. 부족한 부분이 있다면 댓글 부탁드립니다.

카메라 구현 시 렌즈 설정

아이폰은 기기에 따라 작동하는 카메라가 다르기 때문에 앱이 실행되는 기기에 따라 그에 맞는 카메라를 사용할 수 있도록 해야 합니다. 아래 메소드를 통해서 카메라의 종류를 설정하는 것 같습니다.

class func `default`(AVCaptureDevice.DeviceType, for: AVMediaType?, position: AVCaptureDevice.Position) -> AVCaptureDevice?

AVCaptureDevice.DeviceType 인자에 기기 타입을 입력할 수 있습니다. 아래 코드를 보면 AVCaptureDevice 옵셔널 타입의 변수를 정의하고 있으며, 이후에는 어떤 카메라를 사용할 것인지 구현하는 내용이 담겨 있습니다.

private var captureDevice: AVCaptureDevice?

if let cameraDevice = AVCaptureDevice.default(.builtInDualCamera, for: .video, position: .back) {
    self.captureDevice = cameraDevice
}

.builtInDualCamera위치에서 카메라를 설정합니다. 시뮬레이터에서 카메라가 작동하는지 확인할 수 없으므로 실제 기기를 통해서 확인해야 합니다. 앞서 살펴본 .builtInDualCamera를 통해 구현하면 아이폰 XS 맥스의 후면 카메라가 작동합니다. 그러나 아이폰 13은 .builtInDualCamera로 구현한 경우 후면 카메라가 작동하지 않습니다. .builtInDualWideCamera로 구현하면 아이폰 13에서 후면 카메라를 사용할 수 있습니다. 이 글은 아이폰 기기의 카메라 및 앱에서 구현하는 카메라의 종류를 이해하고자 하는 목적으로 쓰는 글입니다.

카메라 렌즈 조합

2022년 6월 1일 기준 XCode에서 선택할 수 있는 카메라는 아래 링크에서 확인할 수 있습니다.

https://developer.apple.com/documentation/avfoundation/avcapturedevice/devicetype

아래와 같습니다.

  • static let builtInDualCamera: AVCaptureDevice.DeviceType
    A combination of wide-angle and telephoto cameras that creates a capture device.

  • static let builtInDualWideCamera: AVCaptureDevice.DeviceType
    A device that consists of two cameras of fixed focal length, one ultrawide angle and one wide angle.

  • static let builtInTripleCamera: AVCaptureDevice.DeviceType
    A device that consists of three cameras of fixed focal length, one ultrawide angle, one wide angle, and one telephoto.

  • static let builtInWideAngleCamera: AVCaptureDevice.DeviceType
    A built-in wide-angle camera.

  • static let builtInUltraWideCamera: AVCaptureDevice.DeviceType
    A built-in camera with a shorter focal length than that of a wide-angle camera.

  • static let builtInTelephotoCamera: AVCaptureDevice.DeviceType
    A built-in camera device with a longer focal length than a wide-angle camera.

  • static let builtInLiDARDepthCamera: AVCaptureDevice.DeviceType
    A device that consists of two cameras, one LiDAR and one YUV.

  • static let builtInTrueDepthCamera: AVCaptureDevice.DeviceType
    A combination of cameras and other sensors that creates a capture device capable of photo, video, and depth capture.

  • static let builtInMicrophone: AVCaptureDevice.DeviceType
    A built-in microphone.

  • static let externalUnknown: AVCaptureDevice.DeviceType
    An unknown external device type.

기기에 있는 마이크도 포함되어 있습니다. 그러나 카메라에 중점을 두고 글을 작성하겠습니다.

  • builtInDualCamera: 캡처 기기를 생성하는 와이드 앵글 및 텔레포토 카메라의 조합입니다.

  • builtInDualWideCamera: 하나는 울트라 와이드 앵글, 하나는 와이드 앵글인 고정된 초점 길이의 두 카메라로 구성되는 기기입니다.

  • builtInTripleCamera: 울트라 와이드 앵글, 와이드 앵글, 텔레포토 세 가지 카메라의 고정된 초점 길이 구성 기기입니다.

  • builtInWideAngleCamera: 내장된 와이드 앵글 카메라입니다.

  • builtInUltraWideCamera: 와이드 앵글 카메라보다 더 짧은 초점 길이를 갖는 내장된 카메라입니다.

  • builtInTelephotoCamera: 와이드 앵글 카메라보다 더 긴 초점 길이를 갖는 내장된 카메라 기기입니다.

  • builtInLiDARDepthCamera: 하나는 LiDAR, 하나는 YUV인 두 카메라로 구성된 기기입니다.

  • builtInTrueDepthCamera: 사진, 비디오, depth 캡처를 생성하는 카메라 및 다른 센서의 조합입니다.

아래 다섯 가지로 정리할 수 있습니다.

  • 와이드 앵글
  • 울트라 와이드 앵글
  • 텔레포토
  • LiDAR(Light Detection and Ranging)
  • YUV

제품사양과 비교하며 구현

아래 링크의 내용을 보면 아이폰 XS 맥스의 제품사양을 알 수 있습니다. 카메라를 사양을 보면 '듀얼 12MP 와이드 앵글 및 망원 카메라'라고 쓰여진 것을 볼 수 있습니다.

https://support.apple.com/kb/SP780?locale=ko_KR

.builtInDualWideCamera는 두 개의 와이드 렌즈를 사용하겠다는 것으로 보이는데, 아이폰 XS 맥스는 듀얼 와이드 앵글과 망원 카메라의 조합이므로 .builtInDualWideCamera로는 작동하지 않을 것으로 예상했습니다. 그리고 실제로 기기에서 카메라로 보이는 화면은 없습니다. 또한, 듀얼 와이드 앵글을 하나 갖고 있으므로 .builtInWideAngleCamera로 구현 시 카메라가 작동할 것이라 예상했는데, 실제 기기에서 카메라가 작동합니다.

정리하면 아이폰 XS 맥스는 듀얼 와이드 앵글 한 가지와 망원 카메라 한 가지를 갖고 있으며, 둘 모두 와이드는 아니고 내장된 듀얼 와이드 한 가지로는 작동함을 알 수 있습니다. 그 외에 .builtInUltraWideCamera, .builtInLiDARDepthCamera 모두 아이폰 XS 맥스에서 카메라로 보이는 화면은 없습니다. 반면에 아이폰 13은 울트라 와이드 카메라를 갖추고 있으므로 .builtInUltraWideCamera 구현 시 카메라가 작동합니다.

.builtInTelephotoCamera로 설정하고 아이폰 XS 맥스에서 테스트한 경우 카메라로 보이는 화면이 있습니다. 찾아보니 위키백과를 통해 망원 렌즈가 telephoto lens임을 알 수 있습니다. 아이폰 XS 맥스는 망원 카메라를 갖추고 있으므로 당연한 결과입니다. 제가 사용하고 있는 아이폰 13은 와이드, 울트라 와이드 만을 갖고 있고 망원 렌즈는 없으므로 .builtInTelephotoCamera로 빌드 시 카메라 화면이 나타나지 않아야 함을 예상할 수 있으며 실제로도 그렇습니다.

아이폰 XS 맥스의 카메라 사양은 앞서 적어놓은 것처럼 '듀얼 12MP 와이드 앵글 및 망원 카메라'입니다. 아이폰 13의 카메라 사양은 '듀얼 12MP 카메라 시스템: 와이드, 울트라 와이드 카메라'라고 나와있으며, 아래 링크에서 확인이 가능합니다.

https://support.apple.com/kb/SP851?locale=ko_KR

그런데 아이폰 13은 .builtInDualCamera 설정으로 빌드 시 카메라가 작동하지 않습니다. 앞서 공식문서 카메라 렌즈 조합을 보면 .builtInDualCamera는 와이드와 망원의 조합입니다. 아이폰 13은 망원 카메라가 없으므로 작동하지 않는 것입니다.

이와 같은 내용을 바탕으로 아래 표처럼 정리할 수 있습니다.

표: 기기 사양에 따라 구현할 수 있는 AVCaptureDevice.DeviceType

기기에서 필수적으로 가지고 있어야 하는 렌즈의 기준입니다.

builtInDualCamerabuiltInDualWideCamerabuiltInTripleCamerabuiltInWideAngleCamerabuiltInUltraWideCamerabuiltInTelephotoCamerabuiltInLiDARDepthCamerabuiltInTrueDepthCamera
와이드+망원와이드+와이드세 개의 카메라와이드 하나울트라 와이드 하나망원LiDAR 센서 존재센서 존재

0개의 댓글