计算UDP流的输入比特率

计算UDP流的输入比特率,udp,bitrate,Udp,Bitrate,我有如下Windows代码: LARGE_INTEGER frequency; // ticks per second LARGE_INTEGER t1, t2; // ticks double data_in_one_sec = 0; double second = 0; while (1) { QueryPerformanceFrequency(&frequency); // start

我有如下Windows代码:

    LARGE_INTEGER frequency;        // ticks per second
    LARGE_INTEGER t1, t2;           // ticks
    double data_in_one_sec = 0;
    double second = 0;

    while (1) {
     QueryPerformanceFrequency(&frequency);
     // start timer
     QueryPerformanceCounter(&t1);

     udp_packet_len = recvfrom(sock, udp_packet, sizeof(udp_packet), 0, (struct sockaddr *) &addr, &addrlen);
     data_in_one_sec += (double)udp_packet_len;

     // stop timer
     QueryPerformanceCounter(&t2);
     second += ((double)(t2.QuadPart - t1.QuadPart)*1000000.0 / frequency.QuadPart)/1000000.0;

     if (second >= 1.0) {
      stream.udp_bitrate = (data_in_one_sec)/second;
      data_in_one_sec = 0;
      second = 0;
     }

     //do something with this data
     parse_udp_data(udp_packet,udp_packet_len);
    }
我将在一秒钟内接收的udp_数据_len字节进行分割,以确定udp比特率流(bps)。但对于大量数据来说,这并不准确。我在另一个确定运行时间的函数(clock())中看到了相同的行为


有没有办法更准确地计算接收UDP数据的比特率?

不要计算秒数,而是计算滴答声。也许增量计算会破坏很多精度。这也是一个笨拙的代码。而且,你只是在计算recvfrom的时间。这可能非常小。你不应该计算所有的时间来获得真正的比特率吗?不要计算秒数,而是计算滴答声。也许增量计算会破坏很多精度。这也是一个笨拙的代码。而且,你只是在计算recvfrom的时间。这可能非常小。你不应该计算所有的时间来得到真正的比特率吗?