ARSession 无限期停留在 ARTrackingStateLimited 上,原因为 ARTrackingStateReasonInitializing
ARSession stuck indefinitely on ARTrackingStateLimited, with reason as ARTrackingStateReasonInitializing
我正在使用 ARKit ARSession;我第一次使用 ARSession 时,一切正常。它是完全响应的。然后我暂停 ARSession;将它设置为 NULL 以便它被释放并在稍后的某个时间创建第二次。
它第二次卡在 trackingState 作为 ARTrackingStateLimited,原因是 ARTrackingStateReasonInitializing。所以 currentFrame 不会改变,无论我等多久,它都会保持不变。如果我再次使用 runWithConfiguration 重置,它 returns 我一个新帧,但随后 currentFrame 被冻结,trackingState 再次为 ARTrackingStateLimited,原因为 ARTrackingStateReasonInitializing。
ARSession 第二次无法完成初始化有什么原因吗?与第一遍完全相同的光照条件;所以它应该能够检测到相同的特征。这不是资源问题,因为如果存在资源问题,ARKit 通常会显示 "Resource Constraints" 诊断消息。
First Run...
[ 53 ] allocARSession 0x13fe50900
[ 54 ] assignARDelegate <DropPodStage: 0x13ff34450>
[ 55 ] runARSession 0x13fe50900
-- perfect run here ; ARKit is fully responsive;
[ 86 ] pauseARSession 0x13fe50900
[ 87 ] assignARDelegate (null)
[ 88 ] releaseARSession 0x13fe50900
Second Run...
[ 150 ] allocARSession 0x13fd7a3c0
[ 151 ] assignARDelegate <DropPodStage: 0x13fe63fa0>
[ 152 ] runARSession 0x13fd7a3c0
[ 161 ] ARSession: cameraDidChangeTrackingState
[ 162 ] cameraDidChangeTrackingState: ARTrackingStateLimited
[ 163 ] cameraDidChangeTrackingState: trackingStateReason: ARTrackingStateReasonInitializing
[ 164 ] AR frames frozen for 10 seconds, resetting
[ 165 ] resetARSession
[ 166 ] ARTrackingStateLimited
[ 167 ] trackingStateReason: ARTrackingStateReasonInitializing
[ 168 ] AR frames frozen for 10 seconds, resetting
[ 169 ] resetARSession
[ 170 ] ARTrackingStateLimited
[ 171 ] trackingStateReason: ARTrackingStateReasonInitializing
感谢对此的任何回复;
经过大量诊断后,我能够确定问题所在。我正在使用当前帧的 captureImage 中的 YUV 缓冲区。该缓冲区用于生成 RGB 纹理,然后将其作为 cameraImage 渲染到屏幕上。问题是我没有跟进 glFlush() 调用,这是使用 CVOpenGLESTextureCacheCreateTextureFromImage 时建议的行为。这不知何故导致 ARKit 下次被锁定。目前尚不清楚为什么这些是如何相关的,但我会在其他人遇到类似情况的情况下提供这个答案。
我正在使用 ARKit ARSession;我第一次使用 ARSession 时,一切正常。它是完全响应的。然后我暂停 ARSession;将它设置为 NULL 以便它被释放并在稍后的某个时间创建第二次。
它第二次卡在 trackingState 作为 ARTrackingStateLimited,原因是 ARTrackingStateReasonInitializing。所以 currentFrame 不会改变,无论我等多久,它都会保持不变。如果我再次使用 runWithConfiguration 重置,它 returns 我一个新帧,但随后 currentFrame 被冻结,trackingState 再次为 ARTrackingStateLimited,原因为 ARTrackingStateReasonInitializing。
ARSession 第二次无法完成初始化有什么原因吗?与第一遍完全相同的光照条件;所以它应该能够检测到相同的特征。这不是资源问题,因为如果存在资源问题,ARKit 通常会显示 "Resource Constraints" 诊断消息。
First Run...
[ 53 ] allocARSession 0x13fe50900
[ 54 ] assignARDelegate <DropPodStage: 0x13ff34450>
[ 55 ] runARSession 0x13fe50900
-- perfect run here ; ARKit is fully responsive;
[ 86 ] pauseARSession 0x13fe50900
[ 87 ] assignARDelegate (null)
[ 88 ] releaseARSession 0x13fe50900
Second Run...
[ 150 ] allocARSession 0x13fd7a3c0
[ 151 ] assignARDelegate <DropPodStage: 0x13fe63fa0>
[ 152 ] runARSession 0x13fd7a3c0
[ 161 ] ARSession: cameraDidChangeTrackingState
[ 162 ] cameraDidChangeTrackingState: ARTrackingStateLimited
[ 163 ] cameraDidChangeTrackingState: trackingStateReason: ARTrackingStateReasonInitializing
[ 164 ] AR frames frozen for 10 seconds, resetting
[ 165 ] resetARSession
[ 166 ] ARTrackingStateLimited
[ 167 ] trackingStateReason: ARTrackingStateReasonInitializing
[ 168 ] AR frames frozen for 10 seconds, resetting
[ 169 ] resetARSession
[ 170 ] ARTrackingStateLimited
[ 171 ] trackingStateReason: ARTrackingStateReasonInitializing
感谢对此的任何回复;
经过大量诊断后,我能够确定问题所在。我正在使用当前帧的 captureImage 中的 YUV 缓冲区。该缓冲区用于生成 RGB 纹理,然后将其作为 cameraImage 渲染到屏幕上。问题是我没有跟进 glFlush() 调用,这是使用 CVOpenGLESTextureCacheCreateTextureFromImage 时建议的行为。这不知何故导致 ARKit 下次被锁定。目前尚不清楚为什么这些是如何相关的,但我会在其他人遇到类似情况的情况下提供这个答案。