gpt4 book ai didi

swift - 从 AVCapturePhotoDelegate 方法检索 CVPixelBuffer

转载 作者:行者123 更新时间:2023-11-30 11:07:16 32 4
gpt4 key购买 nike

我想从 didFinishProcessingPhoto 委托(delegate)方法获取 PixelBuffer,但它是零。

func capturePhoto() {
let format = [AVVideoCodecKey: AVVideoCodecType.jpeg]
let settings = AVCapturePhotoSettings(format: format)
output.capturePhoto(with: settings, delegate: self)
}

和扩展名:

extension CaptureSessionManager: AVCapturePhotoCaptureDelegate {
func photoOutput(_ output: AVCapturePhotoOutput, didFinishProcessingPhoto photo: AVCapturePhoto, error: Error?) {
guard let pixelBuffer = photo.pixelBuffer else {
return
}

bufferSubject.onNext(pixelBuffer)
}
}

在此之前,我显然已将输出添加到 session 中。我应该使用该委托(delegate)的一些不同方法吗?

最佳答案

阅读文档后我自己弄清楚了。

首先确保使用 AVCaptureSession.Preset.photo作为sessionPreset : session.sessionPreset = .photo .

然后使用 rawPixeFormatType 很重要,因为将其设置为 jpeg 或 hevc 不会生成 PixelBuffer。可以这样实现:

guard let availableRawFormat = self.output.availableRawPhotoPixelFormatTypes.first else {
return
}

let photoSettings = AVCapturePhotoSettings(rawPixelFormatType: availableRawFormat,
processedFormat: [AVVideoCodecKey : AVVideoCodecType.hevc])

output.capturePhoto(with: photoSettings, delegate: self)

processedFormat:AVCapturePhotoSettings init 是可选的。

关于swift - 从 AVCapturePhotoDelegate 方法检索 CVPixelBuffer,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52567294/

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