henrikstroem
henrikstroem

Reputation: 3088

Show camera feed in UIView using AVFoundation

I am trying to show the camera's feed in a UIView. Later I need to be able to analyze video frames, so I need to do this using AVFoundation, as I understand.

What I have so far:

import UIKit
import AVFoundation

class ViewController: UIViewController {

    @IBOutlet weak var camView: UIView!

    var captureSession:AVCaptureSession?
    var videoPreviewLayer:AVCaptureVideoPreviewLayer?
    var videoCaptureDevice: AVCaptureDevice?
    var input: AnyObject?

    override func viewDidLoad() {
        super.viewDidLoad()

        videoCaptureDevice = AVCaptureDevice.defaultDeviceWithMediaType(AVMediaTypeVideo)
        do {
            input = try AVCaptureDeviceInput(device: videoCaptureDevice)
        } catch {
            print("video device error")
        }
        captureSession = AVCaptureSession()
        captureSession?.addInput(input as! AVCaptureInput)
        videoPreviewLayer = AVCaptureVideoPreviewLayer(session: captureSession)
        videoPreviewLayer?.videoGravity = AVLayerVideoGravityResizeAspectFill
        videoPreviewLayer?.frame = camView.layer.bounds
        captureSession?.startRunning()
    }
}

The camView is visible, but it doesn't show anything.

The app asked for permission to use the camera at first run, and have been granted that permission.

Setting a breakpoint and inspecting captureSession, videoPreviewLayer, videoCaptureDevice and input confirms they have all been set.

Upvotes: 3

Views: 1478

Answers (1)

Teja Nandamuri
Teja Nandamuri

Reputation: 11201

The video preview layer is not added to the camView. Hence you cannot see the camera session running in the camView.

Add this line:

    camView.layer.addSublayer(videoPreviewLayer) 

Upvotes: 8

Related Questions