【问题标题】:iOS; Unsupported Pixel FormatIOS;不支持的像素格式
【发布时间】:2017-08-21 09:06:35
【问题描述】:

我的 Unity 应用将相机供稿用于该应用使用的多个系统;例如 Vuforia、ARKit 和一般的相机 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] [Session] 会话失败并出现错误:错误 Domain=com.apple.arkit.error Code=104 "不支持的捕获会话 配置。”

用户信息={ NSLocalizedRecoverySuggestion=确保使用正确的设备和格式进行捕获。,

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

NSLocalizedFailureReason=所提供的捕获会话的输入设备和/或格式不支持给定 配置。 }

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

【问题讨论】:

    标签: ios unity3d camera format arkit


    【解决方案1】:

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

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

    875704438 转换为420v (NV12) 或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;
        }
    

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

    【讨论】:

    • 感谢您的帮助。我将如何强制全范围?我不是本地 xcode 开发人员。
    • @OliverJones 对不起,我也没有。该设置似乎没有在 ARKit 中公开。 Vuforia 允许您设置YUV,但它没有说明它使用哪种 YUV 格式。这是假设根本问题是 ARKit 实际报告的内容,而不是其他东西的副作用(相机设备未发布,其他一些错误)。
    【解决方案2】:

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

    【讨论】:

    • 我该怎么做?它调用原生 ARKit。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多