iOS版;不支持的像素格式

时间:2017-08-21 09:06:36

标签: ios unity3d camera format arkit

我的Unity应用程序将相机Feed用于应用程序使用的多个系统;例如Vuforia,ARKit,以及一般的Camera Feed输入。

我遇到的问题是每个请求都有不同的像素格式,这似乎会导致ARKit出现问题。这需要YUV,我不知道如何原生地将相机像素格式切换回来。所以当我尝试在其他人之后启动ARKit时,我得到了这个错误;

  

2017-08-21 08:51:38.749452 + 0100 ar_app [399:105849] [传感器]   不支持的像素格式:875704438

     

2017-08-21 08:51:38.749876 + 0100   ar_app [399:105849] [会话]会话确实失败并出现错误:错误   Domain = com.apple.arkit.error Code = 104“不支持的捕获会话   配置。“

     

的UserInfo = {       NSLocalizedRecoverySuggestion =确保正在使用正确的设备和格式进行捕获。

     

NSLocalizedDescription =不支持的捕获会话配置。

     

NSLocalizedFailureReason =指定的捕获会话的输入设备和/或格式不受支持   组态。 }

至少,这就是我认为的问题;它没有获得YUV中的格式。任何帮助将非常感激。 。 感谢。

2 个答案:

答案 0 :(得分:3)

YUV是一个色彩空间,有多种格式。

  

ar_app [399:105849] [传感器]不支持的像素格式:875704438

875704438转换为420vNV12)或kCVPixelFormatType_420YpCbCr8BiPlanarVideoRange

kCVPixelFormatType_420YpCbCr8BiPlanarVideoRange = '420v'

所以你实际上有一个YUV像素格式,特别是具有视频范围的双平面。

ARKit docs确实提到了双平面YUV格式,但没有提到范围的类型:

  

像素缓冲区的内容以双平面YCbCr(也称为YUV)数据格式编码

但是,Unity ARKit插件会检查kCVPixelFormatType_420YpCbCr8BiPlanarFullRange中的didUpdateFrame

 if (CVPixelBufferGetPlaneCount(pixelBuffer) < 2 || CVPixelBufferGetPixelFormatType(pixelBuffer) != kCVPixelFormatType_420YpCbCr8BiPlanarFullRange) {
        return;
    }

总而言之,它可能不喜欢它不是全范围的事实,但我没有简单的方法来测试它。如果相机和其他模块支持它,也许你可以尝试强制全范围。

答案 1 :(得分:0)

确保不再使用.jpg图像。 iOS希望您使用.png图像。我在Swift 4和XCode 9 Beta中遇到了同样的警告/错误。