0

我正在使用 ARKit ARSession;我第一次使用 ARSession 时,一切正常。它是完全响应的。然后我暂停 ARSession;将其设置为 NULL 以便它被释放并在稍后的某个时间再次创建。

第二次因为 ARTrackingStateLimited 而被跟踪状态卡住,原因是 ARTrackingStateReasonInitializing。所以 currentFrame 不会改变,不管我等多久,它都会保持不变。如果我再次使用 runWithConfiguration 重置,它会返回一个新帧,但 currentFrame 被冻结,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

感谢您对此的任何回复;

4

1 回答 1

0

经过大量诊断后,我能够隔离问题。我正在使用当前帧的 captureImage 中的 YUV 缓冲区。此缓冲区用于生成 RGB 纹理,然后将其作为 cameraImage 渲染到屏幕上。问题是我没有使用 glFlush() 调用来跟进它,这是使用 CVOpenGLESTextureCacheCreateTextureFromImage 时建议的行为。这不知何故导致 ARKit 下次被锁定。目前尚不清楚为什么这些是如何相关的,但如果其他人陷入类似情况,我会提供这个答案。

于 2018-01-19T06:58:45.710 回答