프로그래밍/iOS,macOS
CaptureSession 카메라, 마이크
chance
2020. 7. 10. 13:02
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()