代码之家  ›  专栏  ›  技术社区  ›  mikro098

从avcapturepotelegate方法检索CVPixelBuffer

  •  0
  • mikro098  · 技术社区  · 6 年前

    我想从中获取像素缓冲区 didFinishProcessingPhoto 委托方法,但它是零。

    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)
        }
    }
    

    1 回复  |  直到 6 年前
        1
  •  0
  •   mikro098    6 年前

    我看了文件后自己想出来的。

    AVCaptureSession.Preset.photo 作为一个 sessionPreset : session.sessionPreset = .photo

    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是可选的。

    推荐文章