【问题标题】:converting kCVPixelFormatType_32BGRA sampleBuffer to kCVPixelFormatType_420YpCbCr8BiPlanarFullRange将 kCVPixelFormatType_32BGRA sampleBuffer 转换为 kCVPixelFormatType_420YpCbCr8BiPlanarFullRange
【发布时间】:2019-10-08 10:30:01
【问题描述】:

我正在为我的 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 样本缓冲区

【问题讨论】:

    标签: ios swift webrtc cmsamplebuffer janus-gateway


    【解决方案1】:

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

    let videoOutput = AVCaptureVideoDataOutput()
    videoOutput.setSampleBufferDelegate(self, queue: outputQueue)
    videoOutput.videoSettings = [
                kCVPixelBufferPixelFormatTypeKey as String: Int(kCVPixelFormatType_420YpCbCr8BiPlanarVideoRange)
            ]
    

    【讨论】:

      猜你喜欢
      • 2021-09-09
      • 2012-10-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-08-28
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多