iOS/Swift 어플 따라하기

[Swift] Camera App 2(captureSession 구성)

Chafle 2022. 4. 12. 11:18
반응형
오늘의 할 일

1. setupSession 메서드 작성
2. startSession 메서드 작성
3. stopSession메서드 작성

 

 

1. setupSession메서드 작성
CaptureSession구성

- presetSetting 하기

        //프리셋 - 미디어캡쳐(사진,영상촬영 할 때 먼저 맞춰주는 설정값)

- beginConfiguration

- Add Video Input

- Add Photo Output

- commitConfiguration

 

 

- presetSetting, beginConfiguration, commitConfiguration

아래 사진과 같이 프리셋을 설정하고

begin과 commit configuration 사이에 videoInput과 photoOut구성을 작성해줍니다.

 

 

 

\

- add video input

        var defaultVideoDvice: AVCaptureDevice?

//videodiscoverysession을 이용해서 기기 찾기, 지난시간에 작성한 videodiscoversession 중에서 찾습니다.

        guard let camera = videoDeviceDiscoverySession.devices.first else {

            captureSession.commitConfiguration()

        return

        }        //디바이스 없으면 sessionconfiguration 마무리해라

        

        do {

        let videoDeviceInput = try AVCaptureDeviceInput(device: camera)

 //device인풋 만들기(객체 만들어 놔야 CaptureSession과 연결 할 수 있기 때문에)(될수도 있고 안될수도 있기 떄문에 do -try - catch문을 작성해줍니다.)

 

            if captureSession.canAddInput(videoDeviceInput) {

 //deviceinput을 session에 막 넣으면 안되고 if문을 통하여 넣을 수 있냐고 물어보고 넣어야합니다.             

     captureSession.addInput(videoDeviceInput)

     self.videoDeviceInput = videoDeviceInput

            } else {

                captureSession.commitConfiguration()

                return

            }

        } catch let error {

            captureSession.commitConfiguration()

            return

        }

 

 

 

- add photo output

 

 photoOutput.setPreparedPhotoSettingsArray([AVCapturePhotoSettings(format: [AVVideoCodecKey: AVVideoCodecType.jpeg])], completionHandler: nil)

// 어떤 세팅으로 저장할 것인지 설정해줍니다.

 

        if captureSession.canAddOutput(photoOutput) {

            captureSession.addOutput(photoOutput)

        } else {

            captureSession.commitConfiguration()

            return

        }

        captureSession.commitConfiguration()

    }

 // photo output도 역시 if문으로 물어보고 저장해야합니다

 

 

반응형

 

2. startSession 메서드 작성

func startSession() {

        sessionQueue.async {

            if !self.captureSession.isRunning {

                self.captureSession.startRunning()

//captureSession이 진행중이면 계속 러닝할 필요가 없으니까 아닌경우에만 시작하라고 명령해줍니다.

            }

        }

    }

    

 

3. stopSession 메서드 작성

 func stopSession() {

      sessionQueue.async {

            if self.captureSession.isRunning {

            self.captureSession.stopRunning()

            }

//지금진행중이면 멈추라고 멈춰있는데 멈추라고 할 필요 없으니깐 if문으로 설정 해줍니다.

        }

    }

 

 

 

설정하고 앱을 실행해보면

지난 시간 info를 이용한 사용자 권한 받는 알림이 먼저 뜨게 됩니다.

 

https://accompani-i.tistory.com/168?category=1002351 

 

 

[Swift] info를 이용한 사용자 권한 받기

Info에서 +를 누릅니다. 1. Privacy - Camera Usage Description을 추가합니다. 2. + 하나를 더 추가해서 Privacy - Photo Libarary Additions Usage Description을 추가합니다. 아래와 같이 메시지를 추가해..

accompani-i.tistory.com

 

 

확인을 눌러주면 카메라가 잘 작동되는 것을 알 수 있습니다.

지난시간에 UI도 잘 들어가있는 것을 확인해 볼 수 있었습니다.

 

https://accompani-i.tistory.com/170?category=1002351 

 

[Swift] Camera App 1(captureSession설정)

-CaptureSession -AVCaptureDeviceInput -AVCapturePhotoOutput -Queue(비디로 관련 프로세싱은 해당하는 큐에서 작동할 수 있도록) -AVCaptureDevice(디바이스에서카메라를 가져올 때, discoverysession) 기본 S..

accompani-i.tistory.com

 

 

반응형