gpt4 book ai didi

c++ - 通过网络测量耗时

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:26:51 24 4
gpt4 key购买 nike

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

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

Client_Receive_Timestamp - Server_Send_Timestamp = Elapsed_Time

问题

在我看来,耗时大约过高 100-200 毫秒。我认为原因是服务器时钟和客户端时钟不同步,大约有 100-200 毫秒的差异。

问题

如何准确测量两台机器之间耗时?

话题Accurately measuring elapsed time between machines建议计算往返延迟。但是,我不能使用此解决方案,因为客户端不请求帧。它只是通过 RTSP 接收帧。

最佳答案

假设

然后您可以简单地从“接收时间戳”中减去“发送时间戳”以获得延迟时间。 observed error将小于两个时钟误差的总和。如果时间尺度足够小(可能小于一个小时),您可以合理地忽略 slew效果。

如果 ntpd 尚未在两台机器上运行,并且如果您有必要的权限,那么您可以

$ sudo ntpdate -v pool.ntp.org

强制与公开时间服务器池同步。

然后你可以使用c++11 high_resolution_clock来计算持续时间:

/* hrc.cc */
#include <chrono>
#include <iostream>

int main(int,char**){
using std::chrono::high_resolution_clock;
// send something
high_resolution_clock::time_point start = high_resolution_clock::now();
std::cout << "time this" << std::endl ;
// receive something
high_resolution_clock::time_point stop = high_resolution_clock::now();
std::cout
<< "duration == "
<< std::chrono::duration_cast<std::chrono::nanoseconds>(stop-start).count()
<< "ns"
<< std::endl
;
return 0;
}

这是我的系统上前面的例子的样子:

$ make hrc && ./hrc
c++ hrc.cc -o hrc
time this
duration == 32010ns

关于c++ - 通过网络测量耗时,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32627663/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com