为什么AVCaptureVideoDataOutput没有给我支持的最高分辨率帧?

时间:2018-12-21 17:35:42

标签: ios swift avfoundation

我正在使用相机的iOS应用程序上工作。我正在使用AVCaptureVideoDataOutput委托方法来获取视频帧。无论我使用的设备是iPhone X,我总是使用1920 * 1080获取视频帧。

我正在使用AVCaptureSession.Preset.high

这是我的代码被剪掉

func captureOutput(_ captureOutput: AVCaptureOutput, didOutput sampleBuffer: CMSampleBuffer, from connection: AVCaptureConnection) {
    let ciImage = CIImage(cvPixelBuffer: CMSampleBufferGetImageBuffer(sampleBuffer))
    let image = UIImage(ciImage: ciImage)
   }

当我这样做

    let device = AVCaptureDevice.devices(for: AVMediaType.video).first {
        ($0 as AVCaptureDevice).position == AVCaptureDevice.Position.back
    }

    print("resolutions supported:: \(String(describing: device?.activeFormat.highResolutionStillImageDimensions)))")

这总是让我3840 * 2160买到拥有12兆像素的iPhone x

我希望通过AVCaptureVideoDataOutput获得同一种分辨率最高的视频帧。

我尝试使用AVCaptureSession.Preset.photo,但它也无法提供高分辨率。

我确实尝试过AVCaptureSession.Preset.hd4K3840x2160,该方法可以为我提供预期的帧分辨率,但可能不适用于旧版iPhone?

我知道AVCapturePhotoOutput可以为我提供更高分辨率的图像。但是对于我的用例,我想从视频帧创建图像。

我在这里做错了什么?

1 个答案:

答案 0 :(得分:0)

我同意@adamfowlerphoto。为什么需要检查然后应用4K视频预设的答案是该功能根据硬件规格而定。例如,如果您的旧手机没有足够好的高分辨率传感器或镜头,则无法使用它; hd4K3840x2160