From d01a429c130e9f673563832d2313dceae10c09ff Mon Sep 17 00:00:00 2001 From: winlin Date: Mon, 8 Feb 2021 14:14:27 +0800 Subject: [PATCH] RTC: Update stat for nack --- trunk/src/app/srs_app_rtc_conn.cpp | 7 +++++++ trunk/src/app/srs_app_rtc_server.cpp | 11 +++++++++-- trunk/src/app/srs_app_rtc_source.cpp | 12 ++++++++++++ 3 files changed, 28 insertions(+), 2 deletions(-) diff --git a/trunk/src/app/srs_app_rtc_conn.cpp b/trunk/src/app/srs_app_rtc_conn.cpp index 816279cd6..5864b4a2b 100644 --- a/trunk/src/app/srs_app_rtc_conn.cpp +++ b/trunk/src/app/srs_app_rtc_conn.cpp @@ -65,6 +65,9 @@ SrsPps* _srs_pps_twcc = new SrsPps(_srs_clock); SrsPps* _srs_pps_rr = new SrsPps(_srs_clock); SrsPps* _srs_pps_pub = new SrsPps(_srs_clock); +extern SrsPps* _srs_pps_snack; +extern SrsPps* _srs_pps_snack2; + #define SRS_TICKID_RTCP 0 #define SRS_TICKID_TWCC 2 @@ -2287,6 +2290,8 @@ srs_error_t SrsRtcConnection::send_rtcp(char *data, int nb_data) void SrsRtcConnection::check_send_nacks(SrsRtpNackForReceiver* nack, uint32_t ssrc, uint32_t& sent_nacks, uint32_t& timeout_nacks) { + ++_srs_pps_snack->sugar; + SrsRtcpNack rtcpNack(ssrc); rtcpNack.set_media_ssrc(ssrc); @@ -2297,6 +2302,8 @@ void SrsRtcConnection::check_send_nacks(SrsRtpNackForReceiver* nack, uint32_t ss return; } + ++_srs_pps_snack2->sugar; + char buf[kRtcpPacketSize]; SrsBuffer stream(buf, sizeof(buf)); diff --git a/trunk/src/app/srs_app_rtc_server.cpp b/trunk/src/app/srs_app_rtc_server.cpp index 86f49a260..ecbf0a1ae 100644 --- a/trunk/src/app/srs_app_rtc_server.cpp +++ b/trunk/src/app/srs_app_rtc_server.cpp @@ -64,6 +64,11 @@ extern SrsPps* _srs_pps_timer; extern SrsPps* _srs_pps_pub; extern SrsPps* _srs_pps_dispose; +extern SrsPps* _srs_pps_snack; +extern SrsPps* _srs_pps_snack2; +extern SrsPps* _srs_pps_sanack; +extern SrsPps* _srs_pps_svnack; + SrsRtcBlackhole::SrsRtcBlackhole() { blackhole = false; @@ -668,16 +673,18 @@ srs_error_t SrsRtcServer::notify(int type, srs_utime_t interval, srs_utime_t tic _srs_pps_cids_get->update(); _srs_pps_cids_set->update(); _srs_pps_pli->update(); _srs_pps_twcc->update(); _srs_pps_rr->update(); _srs_pps_timer->update(); _srs_pps_pub->update(); _srs_pps_dispose->update(); + _srs_pps_snack->update(); _srs_pps_snack2->update(); _srs_pps_sanack->update(); _srs_pps_svnack->update(); // TODO: FIXME: Show more data for RTC server. - srs_trace("RTC: Server conns=%u, cpu=%.2f%%, rss=%dMB, pkts=%d, addrs=%d,%d, fid=%d,%d,%d, cid=%d,%d, rtcp=%d,%d,%d, timer=%d,%d, dispose=%d", + srs_trace("RTC: Server conns=%u, cpu=%.2f%%, rss=%dMB, pkts=%d, addrs=%d,%d, fid=%d,%d,%d, cid=%d,%d, rtcp=%d,%d,%d, timer=%d,%d, free=%d, nack=%d,%d,%d,%d", nn_rtc_conns, u->percent * 100, memory, _srs_pps_pkts->r10s(), _srs_pps_addrs->r10s(), _srs_pps_fast_addrs->r10s(), _srs_pps_ids->r10s(), _srs_pps_fids->r10s(), _srs_pps_fids_level0->r10s(), _srs_pps_cids_get->r10s(), _srs_pps_cids_set->r10s(), _srs_pps_pli->r10s(), _srs_pps_twcc->r10s(), _srs_pps_rr->r10s(), _srs_pps_timer->r10s(), _srs_pps_pub->r10s(), - _srs_pps_dispose->r10s() + _srs_pps_dispose->r10s(), + _srs_pps_snack->r10s(), _srs_pps_snack2->r10s(), _srs_pps_sanack->r10s(), _srs_pps_svnack->r10s() ); return err; diff --git a/trunk/src/app/srs_app_rtc_source.cpp b/trunk/src/app/srs_app_rtc_source.cpp index 020d139ff..8ebf76eef 100644 --- a/trunk/src/app/srs_app_rtc_source.cpp +++ b/trunk/src/app/srs_app_rtc_source.cpp @@ -48,6 +48,14 @@ #include #endif +#include + +// The NACK sent by us(SFU). +SrsPps* _srs_pps_snack = new SrsPps(_srs_clock); +SrsPps* _srs_pps_snack2 = new SrsPps(_srs_clock); +SrsPps* _srs_pps_sanack = new SrsPps(_srs_clock); +SrsPps* _srs_pps_svnack = new SrsPps(_srs_clock); + // Firefox defaults as 109, Chrome is 111. const int kAudioPayloadType = 111; const int kAudioChannel = 2; @@ -1868,6 +1876,8 @@ srs_error_t SrsRtcAudioRecvTrack::check_send_nacks() { srs_error_t err = srs_success; + ++_srs_pps_sanack->sugar; + uint32_t timeout_nacks = 0; if ((err = do_check_send_nacks(timeout_nacks)) != srs_success) { return srs_error_wrap(err, "audio"); @@ -1931,6 +1941,8 @@ srs_error_t SrsRtcVideoRecvTrack::check_send_nacks() { srs_error_t err = srs_success; + ++_srs_pps_svnack->sugar; + uint32_t timeout_nacks = 0; if ((err = do_check_send_nacks(timeout_nacks)) != srs_success) { return srs_error_wrap(err, "video");