测量网络上的经过时间

chr*_*isp 6 c++ time

我开发了一个服务器和客户端应用程序,用于使用RTSP将视频帧从一端流式传输到另一端.现在,为了收集有助于我改进应用程序的统计数据,我需要测量发送帧和接收帧之间经过的时间.

目前我正在使用以下公式:

Client_Receive_Timestamp - Server_Send_Timestamp = Elapsed_Time
Run Code Online (Sandbox Code Playgroud)

问题

在我看来,经过的时间大约是100-200ms.我认为原因是服务器时钟和客户端时钟不同步,差异大约为100-200ms.

如何准确测量两个mashines之间的经过时间?

主题准确测量机器之间的经过时间建议计算往返延迟.但是,我不能使用此解决方案,因为客户端不请求帧.它只是通过RTSP接收帧.

Bar*_*zKP 3

我需要测量发送帧和接收帧之间经过的时间。

为此,您不需要精确的时间戳。您可以平均估计的延迟。

如果 A 将数据包(或帧)发送给 B,B 会立即响应(*)

A (发送时间) ---> B ---> A (接收时间)

那么你可以轻松计算延迟:

latency = (receivedTime - sendTime) / 2
Run Code Online (Sandbox Code Playgroud)

当然,这假设延迟是对称的。如果您研究“网络延迟估计算法”短语,您可以找到更复杂的算法。

有了估计的延迟,您当然可以估计时间差(但这似乎没有必要):

A (发送时间) ---> B (接收时间B) -- (接收时间B) --> A

timeDelta = sendTime + latency - receivedTimeB
Run Code Online (Sandbox Code Playgroud)

请注意,即使对许多结果进行平均,该算法也可能存在很大偏差。这只是作为一般思想的简单示例发布的。


(*) 事实上,它并没有立即发生,当然会导致错误。这取决于机器 B 的负载量。