AV Foundation,相机捕捉:像素格式或色彩空间之间的转换

Yel*_*Ray 6 macos video-capture objective-c avfoundation

我正在使用AV Foundation从我的webcamera中捕获视频.网络摄像头只能以有限数量的像素格式生成视频流,因此我希望AV Foundation能够将摄像机捕获的任何像素格式转换为所需的像素格式,相机可能不支持这种格式(即AV基金会)框架将需要做的转换从像素格式相机可以自己记录到所需的像素格式).我正在寻找YUV到RGB,RGB到YUV,YUv到YUV以及RGB到RGB的转换都很好,类似于Color Converter DSP在Windows的Media Foundation框架中提供的.

起初我尝试将我想要的类型设置为输出

-[AVCaptureVideoDataOutput setVideoSettings:@{(id)kCVPixelBufferPixelFormatTypeKey: @(constant)}]

这样框架就会转换为那种类型.

我尝试使用所有类型AVCaptureVideoDataOutput availableVideoCVPixelFormatTypes,但只有一半的工作和另一半错误的控制台中的消息,这是令人惊讶的,因为你会想象如果说像素格式可用 - 它会工作.

以下是AVCaptureVideoDataOutput availableVideoCVPixelFormatTypes我的工作格式:

  • kCVPixelFormatType_422YpCbCr8_yuvs
  • kCVPixelFormatType_422YpCbCr8
  • kCVPixelFormatType_24RGB
  • kCVPixelFormatType_32ARGB
  • kCVPixelFormatType_32BGRA

以下是错误:

  • kCVPixelFormatType_16LE555
  • kCVPixelFormatType_16BE565
  • kCVPixelFormatType_16LE565
  • kCVPixelFormatType_4444YpCbCrA8
  • kCVPixelFormatType_444YpCbCr8
  • kCVPixelFormatType_422YpCbCr16
  • kCVPixelFormatType_422YpCbCr10
  • kCVPixelFormatType_444YpCbCr10

我得到的错误是

"AVCaptureSession警告:会话在解压缩视频时收到以下错误:错误域= NSOSStatusErrorDomain代码= -6680"操作无法完成.(OSStatus错误-6680.)".确保正确配置所有视频输出的格式."

AVCaptureSession警告:会话在解压缩视频时收到以下错误:错误域= NSOSStatusErrorDomain代码= -12905"操作无法完成.(OSStatus error -12905.)".确保正确配置所有视频输出的格式."

所以我在这里有点无能为力.有没有办法知道哪些像素格式可以正常工作?它只是在没有实际返回任何错误值的情况下向控制台输出错误,因此很难推断出这种转换是否可行.我也不太确定这是否是请求AV Media框架进行像素格式转换的正确方法,也许我应该只使用网络摄像头支持的像素格式,并使用其他一些AV基础类进行像素格式转换(我发现没有这样的课程)?