맥용 페이스타임 카메라 삽질기 - AVFoundation

맥용 페이스타임 카메라를 컨트롤 해 보려고 하는 삽질을 어제 저녁부터 밤까지 했는데,
그 기록을 남겨봅니다.

배경

온라인 개학 때문에 웹캠 대란. 가격이 뛰고 그마저도 재고가 없음.
맥용 페이스타임 카메라 있긴 한데, 사용해 보니 불만족.
노출 고정이 안되고 무엇보다 화이트 밸련스가 계속 바뀌어서 보기가 풀편함.

자료조사

유료 앱이 맥앱스토어에 있긴한데, $8. 거의 만원.
각종 필터가 제공되지만, 필터가 필요했던 건 아님.
저 가격의 앱이면 차라리 저가형 웹캠을 사는 게 낫다는 판단.
AVFoundation을 통해 페이스타임 카메라에 접근하면 가능하지 않을까? 막연히 생각.

발단

그냥 웹 캠을 구매하려고 했는데, 알리에도 재고가 없다는 걸 확인.
BRIO 급의 웹캠은 30만원 호가.
일단 웹 캠 가격이 안정화 되기 전까지는 페이스타임 카메라로 버텨야 하나??
AVFoundation 샘플 코드를 보면서 일단 진행

전개

 func setUpCam(){
    captureSession = AVCaptureSession()
     captureSession.sessionPreset = AVCaptureSession.Preset.high
            
     cameraDevice = AVCaptureDevice.default(for: .video)
            
    //unlock here
            
     guard let videoDeviceInput = try? AVCaptureDeviceInput(device: cameraDevice) else {return}
                
     try? cameraDevice.lockForConfiguration()
     if cameraDevice.isWhiteBalanceModeSupported(.locked) {
     cameraDevice.whiteBalanceMode = .locked
    }
     if cameraDevice.isExposureModeSupported(.locked) {
     cameraDevice.exposureMode = .locked
    }
            
     cameraDevice.unlockForConfiguration()
    
                
     if captureSession.canAddInput(videoDeviceInput) {
     captureSession.addInput(videoDeviceInput)
    }
            
     captureSession.commitConfiguration()
            
            
     captureVideoLayer = AVCaptureVideoPreviewLayer(session: captureSession)
            
     captureVideoLayer.frame = self.view.bounds
     captureVideoLayer.videoGravity = AVLayerVideoGravity.resizeAspect
     self.view.layer?.addSublayer(captureVideoLayer)

     captureSession.startRunning()
    }

코드는 엄청 단순. 하지만 맥 앱 개발 환경을 다 까먹음.

난관 1

레이어가 표시되지 않음. 이유를 모르겠음.
1시간동안 삽질을 하다가 발견한 설정

iOS의 UIView 와 달리 macOS의 NSView 는 저 옵셥을 켜 줘야 레이어 사용 가능.
카탈리스트는 저 옵션 필요 없음.

난관 2

cameraDevice.whiteBalanceMode = .locked

가 mac의 페이스타임 카메라에서는 안 먹는 상황.
lock을 했을 때, 에러는 안 나지만 화이트 밸련스는 계속 바뀜.

cameraDevice.whiteBalanceMode = .autoWhiteBalance

로 하면 앱이 크래시 남. 저 설정은 최초 자동으로 WB 맞춘뒤 고정시키는 옵션.
참고로 디폴트 값은

cameraDevice.whiteBalanceMode = .continuousAutoWhiteBalance

예상 해결방법

앱 만들어 올린 놈이 있는 걸 보면 어떻게든 해결방법은 있을 것임.
단지 AVFoundation은 비교적 high level API 이고,
저 메소드는 iOS 용으로 만든 걸 mac에서 코드 호환성을 위해 그냥 남겨둔 듯.
맥 페탐 카메라는 초점 조절을 위한 UI가 없으니 기능도 구현하지 말라는 건가?

IOKit등을 통해 페이스타임 카메라에 보다 low level 한 접근을 해서
레지스트리 값 변경을 하면 가능할 것으로 예상되나…

먹고사니즘 때문에 이대로덮을 것인가?
아니면 걍 파고 들어서 앱 스토어에 $2 정도에 올릴까? 고민 중

나중에 또 필 받아 달리게 되면 업뎃 하겠음돠.

좋아요 6

오! 재미 있어보이네요~~ 후기 기다리겠습니다!
그럼 skyoon님이 만드실려고 하는 프로그램은 특정 프로그램을 사용해서 영상통화를 할 시에 화이트밸런스를 조정해주는 프로그램인가요?

좋아요 1

재밌네요~~저도 후기가 기대됩니다.!!

좋아요 1

ㅎㅎ 네, OBS 같은 프로그램으로 실시간 방송이나 녹화물을 만들 때
맥의 페탐 카메라를 제어할 수 있는 프로그램을 만들어 볼까? 싶었는데,

로우레벨 지하실 문을 언제 열고 내려갈지는 모르겠네요.

그냥 웹캠 사서 돈으로 해결할지도요. ㅎ