【问题标题】:macOS swift AVCaptureSession sessionPreset doesn't workmacOS swift AVCaptureSession sessionPreset 不起作用
【发布时间】:2018-11-07 14:57:25
【问题描述】:

我正在使用 AVFoundation 来拍摄照片。但是无论我如何更改 sessionPreset,输出仍然是videoDevice.activeFormat Optional(<AVCaptureDeviceFormat: 0x608000001eb0> 'vide'/'2vuy' enc dims = 1280x720, pres dims = 1280x720 { 29.97 25.00 24.00 15.00 fps })

我想要的只是将输出更改为高质量。

我的整个代码是

    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)

【问题讨论】:

  • 您是否尝试过运行 canSetSessionPreset: 以查看是否支持预设?
  • 你解决过这个问题吗?

标签: ios swift macos avfoundation avcapturesession


【解决方案1】:

捕获输入和捕获输出格式可以不同。

尝试先检查输入设备的最大尺寸和fps。 我猜预设基本上适用于输出格式。

我的代码也可能对您有所帮助。 AVCaptureManager

【讨论】:

    猜你喜欢
    • 2018-09-10
    • 2019-08-11
    • 1970-01-01
    • 1970-01-01
    • 2017-06-16
    • 1970-01-01
    • 1970-01-01
    • 2021-10-29
    • 1970-01-01
    相关资源
    最近更新 更多