0

我正在为我的 webrtc 应用程序使用 janus 网关,并从我的相机捕获 samplebuffer 作为 kCVPixelFormatType_32BGRA,因为我正在处理 samplebuffer 并且不能直接使用 kCVPixelFormatType_420YpCbCr8BiPlanarFullRange 将其直接发送到 janus。所以我的问题是,如何将样本缓冲区的 RGBA 像素格式转换为 420YpCbCr8BiPlanarFullRange 样本缓冲区

我没有找到任何执行这种转换形式的脚本,我知道有一个代码可以将 420Y 转换为 RGBA,而不是相反。

func captureOutput(_ output: AVCaptureOutput, didOutput sampleBuffer: CMSampleBuffer, from connection: AVCaptureConnection) {

//WebRTC delegate
externalVideoBufferDelegate?.captureOutput!(output, didOutput: sampleBuffer, from: connection)

 if i % 40 == 0 {
  let visionImage = VisionImage(buffer: sampleBuffer)
  let metadata = VisionImageMetadata()
  metadata.orientation = .rightTop
  visionImage.metadata = metadata
  faceDetector.process(visionImage) { features, error in
  for feature in faces {

  print("detected")
  }
   if faces.isEmpty  {

   print("Scan Failed: Found nothing to scan :")
  }
  }

}
}

我期望来自默认 32RGBA 样本缓冲区的 Y420 样本缓冲区

4

1 回答 1

0

您必须为捕获会话设置视频输出设置:

let videoOutput = AVCaptureVideoDataOutput()
videoOutput.setSampleBufferDelegate(self, queue: outputQueue)
videoOutput.videoSettings = [
            kCVPixelBufferPixelFormatTypeKey as String: Int(kCVPixelFormatType_420YpCbCr8BiPlanarVideoRange)
        ]
于 2020-03-03T23:57:37.073 回答