Archive/패캠(올인원)

📸 ch 18 AVFoundation 카테고리 별로 탐구

lgvv 2021. 7. 5. 16:28

✅ 카메라 앱을 만들기 위한 개념들을 한번 볼까?

카메라 앱을 만들때 필요한 요소들을 가져와야하는데 이게 바로 AVFoundation 이다.

 

AVFoundation은 비디오, 오디오 등에 특화된 공구함이다. 쉽게 생각해서 멀티미디어 관련한 것은 이거 사용한다라고 생각하기!

AVFoundtaion으로 할 수 있는 일들

캡쳐링, 프로세싱, 합성, 추출 등... 을 제공하고 있다.

 

1. Playback and Editing : 미디어 파일의 실행과 편집을 제공. 

2. Media Capture : 사진을 찍거나 저장할 수 있게 해주는 기능을 갖고 있다.

3. Audio : 오디오 기능도 특화되서 Garage Band 같은 것들도 지원하고 있다.

4. Speech : 우리들의 목소리를 텍스트로 전환해주는 도구도 갖고 있어 (Speech to Text)

 

여기까지가 AVFoundation 프레임워크를 간략히 보았다.

 

 

✅ 그렇다면 이번에는 카메라 기능을 구현하는데 있어서 Media Capture 부분을 조금 더 집중해서 볼까?

(좌) 커스텀한 카메라, (우) 시스템에서 제공해주는 기본 카메라

1. 시스템에서도 기본적인 카메라 기능을 제공해주기도 하나 우리는 커스텀하고 싶을때 사용한다.

2. 포커스나 노출정보, 흔들림 정보 등을 직접 컨트롤 하고 싶을때 사용한다.

3. 사진과 비디오에 결과물을 우리가 커스텀 하고 싶을때 사용한다.

 - 예를 들면, 워터마크를 넣거나 자막을 넣거나 등을 할때는 카메라를 직접 만들어야 한다.

4. 카메라로 부터 들어오는 영상 데이터를 적용해서 직접 처리하고 싶을때 사용한다.

 - 예를 들면, 필터나 이모지 등을 넣고 싶을 때

 

이러한 목적이 아니라면 시스템에서 제공해주는 카메라를 그냥 사용해도 돼.

어떻게 사용하냐면

UIImagePickerController를 통해서 시스템 카메라를 가져다 사용할 수 있어.

우리는 이제 적어도 커스텀으로 만들고 싶다 보니 밑바닥 부터 카메라를 직접 만들어야 겠지?

밑바닥부터 만들려면 Media Capture를 알아야 하는데

 

✅ Media Capture와 관련하여 중요한 구조 3가지!!

1. AVCaptureSession

2. AVCatureDeviceInput

3. AVCatureOutput

 

이 세가지가 그럼 구성은 어떻게 될까?

Media Capture 구조

그렇다면 다시 돌아가서 각각의 구성요소가 어떻게 사용되는지 알아볼까?

1. AVCaptureSession : 카메라나 마이크 같은 인풋에서 들어오는 비디오 오디오 데이터를 아웃풋으로 연결해주는 중간역할을 해준다.

2. AVCatureDeviceInput  : 주로 미디어 소스를 제공해주는 카메라나 마이크 같은 것이 해당된다.

3. AVCatureOutput : 인풋에 들어오는 데이터를 디스크에 쓰던지 해야할탠데, 이때 여기에 있는 데이터를 이용해서 하면 돼.

 

✅ 그럼 이번에는 사용자 권한 요청에 대한 이해를 한번 해보도록 할까?

우리가 위에 말했듯이 AVCatureDeviceInput은 카메라와 마이크에 대응되는 것이라고 했는데, 애플 같은 경우는 우리가 잘 알다싶이 privacy에 민감한 회사이다 보니 사용자의 데이터가 들어오는 부분에 있어서 명시적으로 사용자에게 허락을 맡고 사용하라고 가이드를 주고 있어. 

사용자에게 허락을 맡고 써야하는데 Permission에 대해서 한번 보자.

 

Info.plist 안에 해당하는 메시지와 권한들을 추가해줘야 한다.

 

권한 추가의 예시

 

이렇게 해주면 사용자에게 권한을 요청하는 알럿이 뜨게 된다.

이후 아래의 코드는 권한에 따라 우리가 어떻게 처리할건지에 대한 코드인데, 자세히는 나중에 알아보고 이렇게 처리한다고 정도만 간략히 보고 넘어가자

권한 요청에 따른 처리 코드

사진 저장 전에더 photo library에 permission  권한을 요청해야 한다.

사진 찍기 전 권한 요청

또한 사진을 저장하는 것에 있어서도 권한을 요청해야 하는데

사진 저장에 있어서의 권한 요청

위의 사진 코드들은 애플 다큐먼트에서 제공해주는 코드들이다!

 

❗️그래서 중요한거는 Info.plist에 permission 관련한 것들을 꼭 넣어야 한다!!

Info.plist 에 권한을 넣는 예시

뒷 부분의 string이 사용자에게 권한을 얻기 위해 보여지는 문구