본문 바로가기

프로그래밍/iOS,macOS

CaptureSession 카메라, 마이크

var captureSession: AVCaptureSession!
var videoPreviewLayer: AVCaptureVideoPreviewLayer!

 

viewDidLoad

퍼미션 체크, 요청

switch AVCaptureDevice.authorizationStatus(for: .video) {
    case .notDetermined:
        break
    case .restricted:
        break
    case .denied:
        if let url = URL(string: UIApplication.openSettingsURLString) {
            if UIApplication.shared.canOpenURL(url) {
                UIApplication.shared.open(url, options: [:], completionHandler: nil)
            }
        }
        break
    case .authorized:
        break
    @unknown default:
        break
}

AVCaptureDevice.requestAccess(for: .video) {
    flag in

}

 

do {
    try AVAudioSession.sharedInstance().setCategory(.playAndRecord, options: [.allowBluetooth])
    try AVAudioSession.sharedInstance().setActive(true)
} catch {
    return
}



captureSession = AVCaptureSession()

let videoDevice = AVCaptureDevice.default(.builtInWideAngleCamera, for: .video, position: .front)
let audioDevice = AVCaptureDevice.default(.builtInMicrophone, for: .audio, position: .unspecified)
        
guard let videoDeviceInput = try? AVCaptureDeviceInput(device: videoDevice!),
      let audioDeviceInput = try? AVCaptureDeviceInput(device: audioDevice!),
      captureSession.canAddInput(videoDeviceInput),
      captureSession.canAddInput(audioDeviceInput) else {

   return
}


captureSession.addInput(videoDeviceInput)
captureSession.addInput(audioDeviceInput)

videoPreviewLayer = AVCaptureVideoPreviewLayer(session: captureSession)
videoPreviewLayer.videoGravity = .resizeAspect
videoPreviewLayer.connection?.videoOrientation = .portrait
videoPreviewLayer.frame = previewView.layer.bounds
previewView.layer.addSublayer(videoPreviewLayer)

captureSession.startRunning()

 

viewWillDisappear

self.captureSession.stopRunning()