import UIKit import AVFoundation class ViewController: UIViewController { var captureSession = AVCaptureSession() var mainCamera: AVCaptureDevice? var innerCamera: AVCaptureDevice? var currentDevice: AVCaptureDevice? var photoOutput : AVCapturePhotoOutput? var cameraPreviewLayer : AVCaptureVideoPreviewLayer? override func viewDidLoad() { super.viewDidLoad() setupCaptureSession() setupDevice() setupInputOutput() setupPreviewLayer() captureSession.startRunning() // Do any additional setup after loading the view, typically from a nib. } override func didReceiveMemoryWarning() { super.didReceiveMemoryWarning() // Dispose of any resources that can be recreated. } } extension ViewController { func setupCaptureSession(){ captureSession.sessionPreset = AVCaptureSession.Preset.photo } func setupDevice(){ let deviceDiscoverySession = AVCaptureDevice.DiscoverySession(deviceTypes: [AVCaptureDevice.DeviceType.builtInWideAngleCamera], mediaType: AVMediaType.video, position: AVCaptureDevice.Position.unspecified) let devices = deviceDiscoverySession.devices for device in devices { if device.position == AVCaptureDevice.Position.back { mainCamera = device } else if device.position == AVCaptureDevice.Position.front { innerCamera = device } } currentDevice = mainCamera } func setupInputOutput(){ do { let captureDeviceInput = try AVCaptureDeviceInput(device: currentDevice!) captureSession.addInput(captureDeviceInput) photoOutput = AVCapturePhotoOutput() photoOutput!.setPreparedPhotoSettingsArray([AVCapturePhotoSettings(format: [AVVideoCodecKey : AVVideoCodecType.jpeg])], completionHandler: nil) captureSession.addOutput(photoOutput!) } catch { print(error) } } func setupPreviewLayer(){ self.cameraPreviewLayer = AVCaptureVideoPreviewLayer(session: captureSession) self.cameraPreviewLayer?.videoGravity = AVLayerVideoGravity.resizeAspectFill self.cameraPreviewLayer?.connection?.videoOrientation = AVCaptureVideoOrientation.portrait self.cameraPreviewLayer?.frame = view.frame self.view.layer.insertSublayer(self.cameraPreviewLayer!, at: 0) } }