我正在使用ARKit ARSession;我第一次使用ARSession,一切都很完美。它完全响应。然后我暂停了ARSession;将其设置为NULL,以便它被解除分配并在稍后的某个时间创建第二次。
第二次使用trackingState作为ARTrackingStateLimited,其原因是ARTrackingStateReasonInitializing。因此,currentFrame不会改变,但是等待的时间长了它。如果我再次使用runWithConfiguration重置,它会返回一个新帧,但是当前帧被冻结,并且trackingState再次是ARTrackingStateLimited,而原因是ARTrackingStateReasonInitializing。
有没有理由说ARSession第二次无法完成初始化。它与第一次通过完全相同的照明条件;所以它应该能够检测到相同的功能。这不是资源问题,因为如果存在资源问题,ARKit通常会显示“资源约束”诊断消息。
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
感谢您对此的任何回复;
答案 0 :(得分:0)
经过大量的诊断后,我能够找出问题所在。我正在使用YUV缓冲区,它位于currentFrame的captureImage中。此缓冲区用于生成RGB纹理,然后将其作为cameraImage呈现到屏幕。问题是我没有用glFlush()调用来跟踪它,这是使用CVOpenGLESTextureCacheCreateTextureFromImage时的建议行为。这不知何故导致ARKit下次被锁定。目前尚不清楚为什么这些是如何相关的,但我提供了这个答案,以防其他人陷入类似的情况。