【问题标题】:Video Recording using AVCaptureSession使用 AVCaptureSession 录制视频
【发布时间】:2017-09-13 09:51:07
【问题描述】:

我正在使用Swift 中的AVCaptureSession 录制视频,它工作正常,但我的客户要求是用transform animation 删除Camera 是否有可能实现这一点。

请检查我尝试过的以下代码:

var captureDevice : AVCaptureDevice!
var captureSession: AVCaptureSession?
var stillImageOutput: AVCaptureStillImageOutput?
var previewLayer: AVCaptureVideoPreviewLayer?

captureSession = AVCaptureSession()

captureSession?.sessionPreset = AVCaptureSessionPresetPhoto
if  let availbleDevices = AVCaptureDeviceDiscoverySession.init(deviceTypes: [.builtInWideAngleCamera], mediaType: AVMediaTypeVideo, position: .front).devices {
    captureDevice = availbleDevices.first    

    captureSession?.beginConfiguration()
    configureVideoPreset()
    addVideoInput()

    configureVideoOutput()
    configurePhotoOutput()
    captureSession?.commitConfiguration()

    beginSession()
    ...
}

在开始会话中,我在view.layer 中添加了预览层

func beginSession(){        
    do {    
        let input =  try  AVCaptureDeviceInput(device: captureDevice)

        captureSession!.addInput(input)    
    } catch{
        print(error.localizedDescription)
    }
    if let previewLayer =  AVCaptureVideoPreviewLayer(session:captureSession){
        self.previewLayer = previewLayer
        self.previewLayer?.frame = view.bounds

        self.previewLayer?.videoGravity = AVLayerVideoGravityResizeAspectFill
        let dataOutput = AVCaptureVideoDataOutput()
        dataOutput.videoSettings = [kCVPixelBufferPixelFormatTypeKey as NSString:kCVPixelFormatType_32BGRA]
        dataOutput.alwaysDiscardsLateVideoFrames = true

        if captureDevice.hasFlash == true {
            do {
                try captureDevice.lockForConfiguration()
                captureDevice.flashMode = AVCaptureFlashMode.on
                captureDevice.unlockForConfiguration()
            } catch {
                print("[SwiftyCam]: \(error)")
            }
        }    

        self.view.layer.addSublayer(self.previewLayer!)
        captureSession?.commitConfiguration()

        captureSession!.startRunning()
        captureSession?.beginConfiguration()

        if (captureSession?.canAddOutput(dataOutput))!{
            captureSession?.addOutput(dataOutput)
        }
        captureSession?.commitConfiguration()

        let output = AVCaptureMetadataOutput()
        output.setMetadataObjectsDelegate(self, queue: DispatchQueue.main)
        captureSession?.addOutput(output)

        output.metadataObjectTypes = [AVMetadataObjectTypeFace]

        print("array \(output.metadataObjectTypes)")

        let queue = DispatchQueue.init(label: "com.UOO.captureQueue")
        dataOutput.setSampleBufferDelegate(self , queue: queue)
    }
}

一切正常,我也可以录制视频,但我无法用动画隐藏相机。

【问题讨论】:

  • 请展示您的代码,展示您迄今为止所做的工作。

标签: ios iphone swift ipad avcapturesession


【解决方案1】:
func setView(view: UIView, hidden: Bool) {
    UIView.transition(with: view, duration: 0.5, options: .transitionCrossDissolve, animations: {() -> Void in
        view.isHidden = hidden
    }, completion: nil)
}

像这样使用这个方法

  self.setView(view: previewLayer as! UIView, hidden:true)

我从你的问题中假设,预览层是从视图中移除的没有动画的层

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-05-08
    • 1970-01-01
    • 2023-03-05
    • 1970-01-01
    • 2012-03-19
    • 2012-02-28
    相关资源
    最近更新 更多