Ignore:
Timestamp:
Apr 5, 2006 4:56:19 PM (18 years ago)
Author:
bennylp
Message:

Fixed bug in RTT calculation in RTCP and increase RTT resolution to usec

File:
1 edited

Legend:

Unmodified
Added
Removed
  • pjproject/trunk/pjsip-apps/src/samples/siprtp.c

    r383 r384  
    5959    unsigned        loss_min, loss_avg, loss_max; 
    6060    char           *loss_type; 
    61     unsigned        jitter_min, jitter_avg, jitter_max; 
     61    unsigned        jitter_min_us, jitter_avg_us, jitter_max_us; 
    6262    unsigned        rtcp_cnt; 
    6363}; 
     
    254254    { 
    255255        pj_sockaddr_in addr; 
    256  
     256        pjsip_host_port addrname; 
     257 
     258        pj_memset(&addr, 0, sizeof(addr)); 
    257259        addr.sin_family = PJ_AF_INET; 
    258260        addr.sin_addr.s_addr = 0; 
    259261        addr.sin_port = pj_htons((pj_uint16_t)app.sip_port); 
    260262 
    261         status = pjsip_udp_transport_start( app.sip_endpt, &addr, NULL,  
     263        if (app.local_addr) { 
     264            addrname.host = pj_str(app.local_addr); 
     265            addrname.port = app.sip_port; 
     266        } 
     267 
     268        status = pjsip_udp_transport_start( app.sip_endpt, &addr,  
     269                                            (app.local_addr ? &addrname:NULL),  
    262270                                            1, NULL); 
    263         if (status != PJ_SUCCESS) 
     271        if (status != PJ_SUCCESS) { 
     272            app_perror(THIS_FILE, "Unable to start UDP transport", status); 
    264273            return status; 
     274        } 
    265275    } 
    266276 
     
    365375        return -1; 
    366376    } 
    367  
    368377 
    369378    /* RTP port counter */ 
     
    11241133                unsigned jitter; 
    11251134                 
    1126                 jitter = pj_ntohl(strm->rem_rtcp.rr.jitter) * 1000 / 
    1127                          strm->clock_rate; 
    1128                 if (jitter < strm->tx_stat.jitter_min) 
    1129                     strm->tx_stat.jitter_min = jitter; 
    1130                 if (jitter > strm->tx_stat.jitter_max) 
    1131                     strm->tx_stat.jitter_max = jitter; 
    1132                 strm->tx_stat.jitter_avg = (strm->tx_stat.jitter_avg * strm->tx_stat.rtcp_cnt + 
    1133                                             jitter) / (strm->tx_stat.rtcp_cnt + 1); 
     1135                jitter = (unsigned)(pj_ntohl(strm->rem_rtcp.rr.jitter) *  
     1136                                    1000000.0 / strm->clock_rate); 
     1137                if (jitter < strm->tx_stat.jitter_min_us) 
     1138                    strm->tx_stat.jitter_min_us = jitter; 
     1139                if (jitter > strm->tx_stat.jitter_max_us) 
     1140                    strm->tx_stat.jitter_max_us = jitter; 
     1141                strm->tx_stat.jitter_avg_us =  
     1142                        (strm->tx_stat.jitter_avg_us * strm->tx_stat.rtcp_cnt + 
     1143                         jitter) / (strm->tx_stat.rtcp_cnt + 1); 
    11341144 
    11351145                strm->tx_stat.rtcp_cnt++; 
     
    12191229                unsigned jitter; 
    12201230                 
    1221                 jitter = pj_ntohl(rtcp_pkt->rr.jitter) * 1000 / 
    1222                          strm->clock_rate; 
    1223                 if (jitter < strm->rx_stat.jitter_min) 
    1224                     strm->rx_stat.jitter_min = jitter; 
    1225                 if (jitter > strm->rx_stat.jitter_max) 
    1226                     strm->rx_stat.jitter_max = jitter; 
    1227                 strm->rx_stat.jitter_avg = (strm->rx_stat.jitter_avg * strm->rx_stat.rtcp_cnt + 
    1228                                             jitter) / (strm->rx_stat.rtcp_cnt + 1); 
     1231                jitter = (unsigned) (pj_ntohl(rtcp_pkt->rr.jitter) *  
     1232                                     1000000.0 / strm->clock_rate); 
     1233                if (jitter < strm->rx_stat.jitter_min_us) 
     1234                    strm->rx_stat.jitter_min_us = jitter; 
     1235                if (jitter > strm->rx_stat.jitter_max_us) 
     1236                    strm->rx_stat.jitter_max_us = jitter; 
     1237                strm->rx_stat.jitter_avg_us =  
     1238                        (strm->rx_stat.jitter_avg_us * strm->rx_stat.rtcp_cnt + 
     1239                         jitter) / (strm->rx_stat.rtcp_cnt + 1); 
    12291240 
    12301241                strm->rx_stat.rtcp_cnt++; 
     
    12331244            next_rtcp.u64 += (freq.u64 * RTCP_INTERVAL); 
    12341245        } 
    1235  
    12361246    } 
    12371247 
     
    12471257    pj_pool_t *pool; 
    12481258    struct media_stream *audio; 
    1249     pjmedia_sdp_session *local_sdp, *remote_sdp; 
     1259    const pjmedia_sdp_session *local_sdp, *remote_sdp; 
    12501260    struct codec *codec_desc = NULL; 
    12511261    unsigned i; 
     
    14081418        PJ_TIME_VAL_SUB(now, call->connect_time); 
    14091419 
    1410         sprintf(duration, " [duration: %02d:%02d:%02d.%03d]", 
     1420        sprintf(duration, " [duration: %02ld:%02ld:%02ld.%03ld]", 
    14111421                now.sec / 3600, 
    14121422                (now.sec % 3600) / 60, 
     
    14441454            t = call->response_time; 
    14451455            PJ_TIME_VAL_SUB(t, call->start_time); 
    1446             sprintf(pdd, "got 1st response in %d ms", PJ_TIME_VAL_MSEC(t)); 
     1456            sprintf(pdd, "got 1st response in %ld ms", PJ_TIME_VAL_MSEC(t)); 
    14471457        } else { 
    14481458            pdd[0] = '\0'; 
     
    14521462            t = call->connect_time; 
    14531463            PJ_TIME_VAL_SUB(t, call->start_time); 
    1454             sprintf(connectdelay, ", connected after: %d ms", PJ_TIME_VAL_MSEC(t)); 
     1464            sprintf(connectdelay, ", connected after: %ld ms",  
     1465                    PJ_TIME_VAL_MSEC(t)); 
    14551466        } else { 
    14561467            connectdelay[0] = '\0'; 
     
    14651476    } 
    14661477 
    1467     printf("   Stream #0: audio %.*s@%dHz, %dms/frame, %sbps (%sbps +IP hdr)\n", 
    1468            (int)audio->si.fmt.encoding_name.slen, 
    1469            audio->si.fmt.encoding_name.ptr, 
    1470            audio->clock_rate, 
    1471            audio->samples_per_frame * 1000 / audio->clock_rate, 
    1472            good_number(bps, audio->bytes_per_frame * audio->clock_rate / audio->samples_per_frame), 
    1473            good_number(ipbps, (audio->bytes_per_frame+32) * audio->clock_rate / audio->samples_per_frame)); 
     1478    printf("   Stream #0: audio %.*s@%dHz, %dms/frame, %sB/s (%sB/s +IP hdr)\n", 
     1479        (int)audio->si.fmt.encoding_name.slen, 
     1480        audio->si.fmt.encoding_name.ptr, 
     1481        audio->clock_rate, 
     1482        audio->samples_per_frame * 1000 / audio->clock_rate, 
     1483        good_number(bps, audio->bytes_per_frame * audio->clock_rate / audio->samples_per_frame), 
     1484        good_number(ipbps, (audio->bytes_per_frame+32) * audio->clock_rate / audio->samples_per_frame)); 
    14741485 
    14751486    total_loss = (audio->rtcp.rtcp_pkt.rr.total_lost_2 << 16) + 
     
    14791490    printf("              RX total %s packets %sB received (%sB +IP hdr)%s\n" 
    14801491           "                 pkt discards=%d (%3.1f%%), loss=%d (%3.1f%%), reorder=%d (%3.1f%%)%s\n" 
    1481            "                 loss period min=%d ms, avg=%d ms, max=%d ms%s\n" 
    1482            "                 jitter min=%d ms, avg=%d ms, max=%d ms, current=%d ms%s\n", 
     1492           "                 loss period min=%dms, avg=%dms, max=%dms%s\n" 
     1493           "                 jitter min=%5.3fms, avg=%5.3fms, max=%5.3fms, curr=%5.3f ms%s\n", 
    14831494           good_number(packets, audio->rx_stat.pkt), 
    14841495           good_number(bytes, audio->rx_stat.payload), 
     
    14931504           -1, -1, -1,  
    14941505           "", 
    1495            (audio->rx_stat.rtcp_cnt ? audio->rx_stat.jitter_min : -1),  
    1496            (audio->rx_stat.rtcp_cnt ? audio->rx_stat.jitter_avg : -1), 
    1497            (audio->rx_stat.rtcp_cnt ? audio->rx_stat.jitter_max : -1), 
    1498            (audio->rx_stat.rtcp_cnt ? pj_ntohl(audio->rtcp.rtcp_pkt.rr.jitter)*1000/audio->clock_rate : -1), 
     1506           (audio->rx_stat.rtcp_cnt? audio->rx_stat.jitter_min_us/1000.0 : -1.), 
     1507           (audio->rx_stat.rtcp_cnt? audio->rx_stat.jitter_avg_us/1000.0 : -1.), 
     1508           (audio->rx_stat.rtcp_cnt? audio->rx_stat.jitter_max_us/1000.0 : -1.), 
     1509           (audio->rx_stat.rtcp_cnt? pj_ntohl(audio->rtcp.rtcp_pkt.rr.jitter)*1000.0/audio->clock_rate : -1.), 
    14991510           "" 
    15001511           ); 
     
    15071518    printf("              TX total %s packets %sB sent (%sB +IP hdr)%s\n" 
    15081519           "                 pkt discards=%d (%3.1f%%), loss=%d (%3.1f%%), reorder=%d (%3.1f%%)%s\n" 
    1509            "                 loss period min=%d ms, avg=%d ms, max=%d ms%s\n" 
    1510            "                 jitter min=%d ms, avg=%d ms, max=%d ms, current=%d ms%s\n", 
     1520           "                 loss period min=%dms, avg=%dms, max=%dms%s\n" 
     1521           "                 jitter min=%5.3fms, avg=%5.3fms, max=%5.3fms, curr=%5.3f ms%s\n", 
    15111522           good_number(packets, audio->tx_stat.pkt), 
    15121523           good_number(bytes, audio->tx_stat.payload), 
     
    15211532           -1, -1, -1,  
    15221533           "", 
    1523            (audio->tx_stat.rtcp_cnt ? audio->tx_stat.jitter_min : -1),  
    1524            (audio->tx_stat.rtcp_cnt ? audio->tx_stat.jitter_avg : -1), 
    1525            (audio->tx_stat.rtcp_cnt ? audio->tx_stat.jitter_max : -1), 
    1526            (audio->tx_stat.rtcp_cnt ? pj_ntohl(audio->rem_rtcp.rr.jitter)*1000/audio->clock_rate : -1), 
     1534           (audio->tx_stat.rtcp_cnt? audio->tx_stat.jitter_min_us/1000.0 : -1.), 
     1535           (audio->tx_stat.rtcp_cnt? audio->tx_stat.jitter_avg_us/1000.0 : -1.), 
     1536           (audio->tx_stat.rtcp_cnt? audio->tx_stat.jitter_max_us/1000.0 : -1.), 
     1537           (audio->tx_stat.rtcp_cnt? pj_ntohl(audio->rem_rtcp.rr.jitter)*1000.0/audio->clock_rate : -1.), 
    15271538           "" 
    15281539           ); 
    15291540 
    1530     printf("              End to end delay: %u ms\n", audio->rtcp.ee_delay); 
     1541    printf("              End to end delay: %5.3f ms\n",  
     1542           audio->rtcp.rtt_us / 1000.0); 
    15311543 
    15321544} 
Note: See TracChangeset for help on using the changeset viewer.