diff options
-rw-r--r-- | pjmedia/include/pjmedia/rtcp.h | 8 | ||||
-rw-r--r-- | pjmedia/src/pjmedia/rtcp.c | 14 |
2 files changed, 16 insertions, 6 deletions
diff --git a/pjmedia/include/pjmedia/rtcp.h b/pjmedia/include/pjmedia/rtcp.h index 60ad19f1..b515dac7 100644 --- a/pjmedia/include/pjmedia/rtcp.h +++ b/pjmedia/include/pjmedia/rtcp.h @@ -156,10 +156,10 @@ struct pjmedia_rtcp_stream_stat unsigned update_cnt; /**< Number of updates (to calculate avg) */ pj_uint32_t pkt; /**< Total number of packets */ pj_uint32_t bytes; /**< Total number of payload/bytes */ - unsigned discard; /**< Number of discarded packets. */ - unsigned loss; /**< Number of packets lost */ - unsigned reorder; /**< Number of out of order packets */ - unsigned dup; /**< Number of duplicates packets */ + unsigned discard; /**< Total number of discarded packets. */ + unsigned loss; /**< Total number of packets lost */ + unsigned reorder; /**< Total number of out of order packets */ + unsigned dup; /**< Total number of duplicates packets */ struct { unsigned count; /**< Number of period samples(to calc avg) */ diff --git a/pjmedia/src/pjmedia/rtcp.c b/pjmedia/src/pjmedia/rtcp.c index 7c5b8d5f..f96d818c 100644 --- a/pjmedia/src/pjmedia/rtcp.c +++ b/pjmedia/src/pjmedia/rtcp.c @@ -207,13 +207,19 @@ PJ_DEF(void) pjmedia_rtcp_rx_rtp(pjmedia_rtcp_session *sess, rtcp_init_seq(sess); } - if (seq_st.status.flag.dup) + if (seq_st.status.flag.dup) { sess->stat.rx.dup++; - if (seq_st.status.flag.outorder) + TRACE_((sess->name, "Duplicate packet detected")); + } + + if (seq_st.status.flag.outorder) { sess->stat.rx.reorder++; + TRACE_((sess->name, "Out-of-order packet detected")); + } if (seq_st.status.flag.bad) { sess->stat.rx.discard++; + TRACE_((sess->name, "Bad packet discarded")); return; } @@ -233,6 +239,7 @@ PJ_DEF(void) pjmedia_rtcp_rx_rtp(pjmedia_rtcp_session *sess, * outbound RTCP RR. */ sess->stat.rx.loss += (seq_st.diff - 1); + TRACE_((sess->name, "%d packet(s) lost", seq_st.diff - 1)); /* Update loss period stat */ if (sess->stat.rx.loss_period.count == 0 || @@ -541,10 +548,13 @@ PJ_DEF(void) pjmedia_rtcp_build_rtcp(pjmedia_rtcp_session *sess, /* Total lost. */ expected = pj_ntohl(rtcp_pkt->rr.last_seq) - sess->seq_ctrl.base_seq; + + /* This is bug: total lost already calculated on each incoming RTP! if (expected >= sess->received) sess->stat.rx.loss = expected - sess->received; else sess->stat.rx.loss = 0; + */ rtcp_pkt->rr.total_lost_2 = (sess->stat.rx.loss >> 16) & 0xFF; rtcp_pkt->rr.total_lost_1 = (sess->stat.rx.loss >> 8) & 0xFF; |