c #: How do I incorporate the host time to avoid vibrations in the interpolation of snapshots?

My interpolation processes x frames in the past, when a packet buffers the state with the current time. I think my problem is due to the fluctuation of the network, when the packages arrive sooner or later, the current time is not good enough. Implemented a queue for packages arriving early or at the same time. With a fixed delivery speed (30 times per second), I assume that customers have a stable enough connection, so that if a package arrives earlier, I can remove it from the bag 1/30 of a second after the last package arrived . Obtaining visual concern of what I think are the packages that arrive late.

I'm trying to figure out how to allocate interpolation times to reduce visual nervousness as much as possible. I've been struggling with this for a while, and I thought it was time to ask for help. The beginning of this video shows concern: https://streamable.com/o9wyb

Update of the entity, this is executed when the packets enter and the interval can vary:

Protected override aborted OnEntityUpdated (NetEntity entity, double remoteTime)
{
var nextFrame = new EntityFrame ()
{
PacketTime = remoteTime,
CurTime = Time.time,
Position = entity. Origin,
Angles = entity. Angles,
Speed ​​= entity.Speed
};

_history[unlag].TryAddFrame (nextFrame);
}

TryAddFrame:

                public void TryAddFrame (EntityFrame framework)
{
var diff = frame.CurTime - _frames[0].CurTime;
var updateRate = 1f / FSLog.GetVariable("net.entityrate");
yes (dif < updateRate)
        {
            _insertDelay = updateRate - (float)diff;
        }
        else if(diff > updateRate * 1.25f)
{
Debug.Log ("JITTER");
}

yes (_insertDelay> 0
|| _jitterBuffer.Count> 0)
{
_jitterBuffer.Enqueue (frame);
he came back;
}

AddFrame (frame);
}

Interpolation loop, executed in each frame:

double latency = frameBuffer * updateRate;
var renderTimestamp = Time.time - latency;

yes (interp[0].CurTime> renderTimestamp)
{
for (int i = 0; i <interp.FrameCount; i ++)
{
yes (interp[i].CurTime <= renderTimestamp)
{
var toFrame = interp[Mathf.Max(i - 1, 0)];
var fromFrame = interp[i];
var t = (renderTimestamp - fromFrame.CurTime) / (toFrame.CurTime - fromFrame.CurTime);
var lerpedPos = Vector3.Lerp (fromFrame.Position, toFrame.Position, (float) t);
var lerpedAngle = Quaternion.Lerp (Quaternion.Euler (fromFrame.Angles), Quaternion.Euler (toFrame.Angles), (float) t);
unlag.Model.Set (lerpedPos, lerpedAngle.eulerAngles);
break;
}
}
}
plus
{
// extrapolate?
}