2016-03-08 49 views
1

我想在UIView中顯示攝像頭的飼料。後來我需要能夠分析視頻幀,所以我需要使用AVFoundation來做到這一點,據我所知。使用AVFoundation在UIView中顯示攝像頭飼料

我有什麼至今:

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() 
    } 
} 

camView是可見的,但它並沒有顯示任何東西。

該應用程序要求在第一次運行時使用相機的權限,並且已被授予該權限。

設置斷點並檢查captureSession,videoPreviewLayer,videoCaptureDeviceinput確認它們已全部設置。

+0

什麼ü指由camView是可見的,但它並沒有顯示任何東西。 ?相機沒有顯示在camView中?在viewDidAppear中啓動相機不在viewDidload中。 –

+0

將captureSession?.startRunning()行移入viewDidAppear。 –

+0

@TejaNandamuri在'camView'上設置背景色可以確認該視圖實際上是在屏幕上 - 它只是不顯示攝像頭供稿。將'captureSession?.starRunning()'移動到'viewDidAppear'沒有區別。 – henrikstroem

回答

4

視頻預覽圖層未添加到camView。因此,您無法在camView中看到相機會話正在運行。

加入這一行:

camView.layer.addSublayer(videoPreviewLayer) 
+0

是的,它做到了。感謝你的幫助,我幾個小時一直在這裏瞎了眼。 – henrikstroem

相關問題