gpt4 book ai didi

ios - 使用 AVCaptureSession 录制视频

转载 作者:行者123 更新时间:2023-11-28 08:02:36 25 4
gpt4 key购买 nike

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

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

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

在开始 session 中,我在 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)
}
}

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

最佳答案

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)

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

关于ios - 使用 AVCaptureSession 录制视频,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46194304/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com