While using the VIVE Facial Tracker for extended periods, I occasionally encountered a state where tracking stopped working and could only be restored by reconnecting the DisplayPort / VIVE Streaming connection.
This made me question why the Face Tracking subsystem itself was not recovering automatically, so I reviewed the implementation of the official ViveStreamingFaceTrackingModule.
After valid Eye or Lip data is received once, the module sets:
EyeTrackerInited = true
LipTrackerInited = true
However, if Face Tracking callbacks later stop arriving while the HMD itself remains connected to VIVE Streaming, there does not appear to be a watchdog that checks how long it has been since the last valid Eye or Lip packet was received.
This could result in the following state:
Eye / Lip data received successfully
↓
TrackerInited = true
↓
Face Tracking callbacks stop
↓
HMD remains connected
↓
TrackerInited remains true
↓
No reinitialization is triggered
↓
Face Tracking remains stalled
When the Streaming connection itself is disconnected, StopFaceTracking() resets the tracker state, and VS_StartFaceTracking() is called again after reconnecting.
This behavior appears consistent with the observed case where Face Tracking only recovers after the DisplayPort / VIVE Streaming connection is re-established.
A possible improvement would be to store the timestamp of the most recent Eye and Lip packets and add a watchdog that automatically performs:
VS_StopFaceTracking()
↓
Reset tracker state
↓
VS_StartFaceTracking()
if no valid Face Tracking data has been received for a defined timeout period.
This may allow the Face Tracking subsystem to recover without requiring the entire HMD or DisplayPort connection to be reconnected.
While using the VIVE Facial Tracker for extended periods, I occasionally encountered a state where tracking stopped working and could only be restored by reconnecting the DisplayPort / VIVE Streaming connection.
This made me question why the Face Tracking subsystem itself was not recovering automatically, so I reviewed the implementation of the official
ViveStreamingFaceTrackingModule.After valid Eye or Lip data is received once, the module sets:
EyeTrackerInited = true
LipTrackerInited = true
When the Streaming connection itself is disconnected,
StopFaceTracking()resets the tracker state, andVS_StartFaceTracking()is called again after reconnecting.This behavior appears consistent with the observed case where Face Tracking only recovers after the DisplayPort / VIVE Streaming connection is re-established.
A possible improvement would be to store the timestamp of the most recent Eye and Lip packets and add a watchdog that automatically performs:
VS_StopFaceTracking()
↓
Reset tracker state
↓
VS_StartFaceTracking()