2017-03-16 20 views
0

我有一個AVCaptureVideoPreviewLayerin在我的應用程序中運行良好,並且顯示與相機應用程序相同的預覽視頻。我想實現相機應用程序的2倍變焦功能。我該怎麼做呢?如何使用AVCaptureVideoPreviewLayer實現相機應用程序的兩倍變焦

基本上我希望我的預覽圖層將視頻輸入更改爲您在相機應用程序中看到的相同比例,當您點擊1x圖標將其更改爲2x時。

設置預覽層

func startSession(){ 
    captureSession = AVCaptureSession() 
    captureSession?.sessionPreset = AVCaptureSessionPresetPhoto 

    let backCamera = AVCaptureDevice.defaultDevice(withMediaType: AVMediaTypeVideo) 

    // Catch error using the do catch block 
    do { 
     let input = try AVCaptureDeviceInput(device: backCamera) 
     if (captureSession?.canAddInput(input) != nil){ 
      captureSession?.addInput(input) 

      // Setup the preview layer 
      previewLayer = AVCaptureVideoPreviewLayer(session: captureSession) 
      previewLayer?.videoGravity = AVLayerVideoGravityResizeAspectFill 
      previewLayer?.connection.videoOrientation = AVCaptureVideoOrientation.portrait 
      tempImageView.layer.addSublayer(previewLayer!) 
      captureSession?.startRunning() 

      // Set up AVCaptureVideoDataOutput 
      let dataOutput = AVCaptureVideoDataOutput() 
      dataOutput.videoSettings = [(kCVPixelBufferPixelFormatTypeKey as NSString) : NSNumber(value: kCVPixelFormatType_32BGRA as UInt32)] 
      dataOutput.alwaysDiscardsLateVideoFrames = true 

      if (captureSession?.canAddOutput(dataOutput) == true) { 
       captureSession?.addOutput(dataOutput) 
      } 
      let queue = DispatchQueue(label: "edu.hawaii.yuep.videoQueue") 
      dataOutput.setSampleBufferDelegate(self, queue: queue) 
     } 
    } catch _ { 
     print("Error setting up camera!") 
    } 

回答

1

設置AVCapture設備的變焦性能與以下和預覽層的變焦將步其後塵。

do { 
    try backCamera?.lockForConfiguration() 
    let zoomFactor:CGFloat = 2 
    backCamera?.videoZoomFactor = zoomFactor 
    backCamera?.unlockForConfiguration() 
} catch { 
     //Catch error from lockForConfiguration 
}