ios - 如何将 AVCaptureSession.sessionPreset 为 720x1280px(或任何 1/1.77 比例)

标签 ios swift avcapturesession

我使用的是 swift3,当我使用 AVCaptureSessionPresetMedium 等时,无法将分辨率更改为自定义值。它不适合屏幕比例(1/1.77)。

    let output = AVCaptureVideoDataOutput()

    output.setSampleBufferDelegate(self, queue: sampleQueue)

    let metaOutput = AVCaptureMetadataOutput()
    metaOutput.setMetadataObjectsDelegate(self, queue: faceQueue)

    session.beginConfiguration()

//所需分辨率:720x1280px //session.sessionPreset = AVCaptureSessionPresetMedium;

    if session.canAddInput(input) {
        session.addInput(input)
    }
    if session.canAddOutput(output) {
        output .alwaysDiscardsLateVideoFrames = true;
        session.addOutput(output)
        connection1 = output.connection(withMediaType: AVMediaTypeVideo)
        connection1?.preferredVideoStabilizationMode = AVCaptureVideoStabilizationMode.auto;
        connection1?.videoOrientation = .portrait
        connection1?.isVideoMirrored = true;
    }
    if session.canAddOutput(metaOutput) {
        output .alwaysDiscardsLateVideoFrames = true;
        session.addOutput(metaOutput)
        connection2 = metaOutput.connection(withMediaType: AVMediaTypeMetadata)
        connection2?.preferredVideoStabilizationMode = AVCaptureVideoStabilizationMode.auto;
        connection2?.videoOrientation = .portrait
        connection2?.isVideoMirrored = true
    }

最佳答案

您应该使用 AVCaptureSessionPreset1280x720 预设。预设以横向表示,但 1280x720 的拍摄设置与 720x1280 相同,唯一的区别是方向。例如,使用支持旋转的应用程序:

func captureOutput(_ captureOutput: AVCaptureOutput!, didOutputSampleBuffer sampleBuffer: CMSampleBuffer!, from connection: AVCaptureConnection!)
{
    guard let pixelBuffer = CMSampleBufferGetImageBuffer(sampleBuffer) else { return }
    cameraImage = CIImage(cvPixelBuffer: pixelBuffer)
    print(cameraImage?.extent ?? "")
}

横向时将打印 (0.0, 0.0, 1280.0, 720.0),纵向时将打印 (0.0, 0.0, 720.0, 1280.0)

关于ios - 如何将 AVCaptureSession.sessionPreset 为 720x1280px(或任何 1/1.77 比例),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45714886/

相关文章:

ios - Swift 编写一个带有返回值的 async/await 方法

macos - 在 Swift 中运行 shell 命令

Swift:使用闭包减少函数

ios - AVCaptureSession commitConfiguration() 耗时太长

ios - 如何在iOS中使用Objective C扫描AVCaptureVideoPreviewLayer特定区域的条形码?

ios - 两个应用共享相同的通用链接

objective-c - 如何让UIView的两个动画一一执行

ios - 如何将数组附加到当前索引处的数组?

ios - 即使出于软件包目的而卸载应用程序后也能唯一地识别 iOS 设备

ios - 如何在 iOS 9 中使用带有 Slide Over 和 Split View 的 AVCaptureSession?