简体   繁体   English

macOS快速AVCaptureSession sessionPreset不起作用

[英]macOS swift AVCaptureSession sessionPreset doesn't work

I'm using AVFoundation to capture photo. 我正在使用AVFoundation捕获照片。 But no matter however I changed sessionPreset, the output remains videoDevice.activeFormat Optional(<AVCaptureDeviceFormat: 0x608000001eb0> 'vide'/'2vuy' enc dims = 1280x720, pres dims = 1280x720 { 29.97 25.00 24.00 15.00 fps }) 但是无论我如何更改sessionPreset,输出仍为videoDevice.activeFormat Optional(<AVCaptureDeviceFormat: 0x608000001eb0> 'vide'/'2vuy' enc dims = 1280x720, pres dims = 1280x720 { 29.97 25.00 24.00 15.00 fps })

All I want is to change the output to high quality. 我想要的只是将输出更改为高质量。

My whole code is 我的整个代码是

    self.avCaptureSession = AVCaptureSession()

    let devices = AVCaptureDevice.devices()
    self.avCurrentCaptureDevice = devices!.last as? AVCaptureDevice
    do {
        self.avCaptureInput = try AVCaptureDeviceInput(device: self.avCurrentCaptureDevice)
    } catch {
    }

    do {
        try self.avCurrentCaptureDevice?.lockForConfiguration()
    } catch {
        return
    }

    self.avCaptureSession?.beginConfiguration()
    self.avCaptureSession?.addInput(self.avCaptureInput)

    self.avCaptureSession?.sessionPreset = AVCaptureSessionPreset320x240

    self.avOutput = AVCaptureVideoDataOutput()
    if (self.avCaptureSession?.canAddOutput(self.avOutput) != nil) {
        self.avCaptureSession?.addOutput(self.avOutput)
    }
    self.avOutput?.videoSettings = [(kCVPixelBufferPixelFormatTypeKey as NSString) : NSNumber(value: kCVPixelFormatType_32BGRA as UInt32)]
    self.avOutput?.alwaysDiscardsLateVideoFrames = true

    let queue: DispatchQueue = DispatchQueue(label: "myqueue",  attributes: [])
    self.avOutput?.setSampleBufferDelegate(self, queue: queue)

    self.avCaptureSession?.commitConfiguration()

    print("videoDevice.activeFormat", self.avCurrentCaptureDevice?.activeFormat! as Any)

Capture input and capture output format can be different. 捕获输入和捕获输出格式可以不同。

Try check input device's largest dimension and fps first. 请先检查输入设备的最大尺寸和fps。 I guess the preset is basiccaly applied to output format. 我想预设基本上是应用于输出格式的。

Also My code may be your help. 另外,我的代码可能会对您有所帮助。 AVCaptureManager AVCaptureManager

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM