My Unity 应用程序将相机源用于应用程序使用的多个系统;例如 Vuforia、ARKit 和常规摄像机源输入。
我遇到的问题是,其中每个都请求不同的像素格式,这似乎会导致 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] [会话] 会话失败,出现错误:错误 域=com.apple.arkit.error 代码=104"不支持的捕获会话 配置。
用户信息={ NSLocalizedRecoverySuggestion=确保使用正确的设备和格式进行捕获。
NSLocalizedDescription=不支持的捕获会话配置。,
NSLocalizedFailureReason=给定的捕获会话不支持输入设备和/或提供的捕获会话的格式 配置。}
至少,这就是我认为的问题所在;它没有获得YUV的格式。任何帮助将不胜感激。 . 谢谢。
> YUV 是一个色彩空间,有多种格式。
ar_app[399:105849] [传感器] 不支持的像素格式:875704438
875704438
转换为420v
(NV12(或kCVPixelFormatType_420YpCbCr8BiPlanarVideoRange:
kCVPixelFormatType_420YpCbCr8BiPlanarVideoRange = '420v'
所以你实际上有一个YUV像素格式,特别是具有视频范围的双平面。
ARKit 文档确实提到了双平面 YUV 格式,但没有提到范围类型:
像素缓冲区的内容以双平面 YCbCr(也称为 YUV(数据格式编码
但是,Unity ARKit 插件会检查 didUpdateFrame 中的kCVPixelFormatType_420YpCbCr8BiPlanarFullRange:
if (CVPixelBufferGetPlaneCount(pixelBuffer) < 2 || CVPixelBufferGetPixelFormatType(pixelBuffer) != kCVPixelFormatType_420YpCbCr8BiPlanarFullRange) {
return;
}
所以总而言之,它可能不喜欢它不是全范围的事实,但我没有简单的方法来测试它。如果相机和其他模块支持,也许您可以尝试强制全范围。
确保不再使用.jpg图像。 iOS 希望您使用.png图像。我在 Swift 4 和 XCode 9 Beta 中遇到了同样的警告/错误。