diff --git a/src/Rtcp/RtcpContext.cpp b/src/Rtcp/RtcpContext.cpp index 64db7acf..49ce33df 100644 --- a/src/Rtcp/RtcpContext.cpp +++ b/src/Rtcp/RtcpContext.cpp @@ -107,6 +107,11 @@ uint32_t RtcpContextForSend::getRtt(uint32_t ssrc) const { } Buffer::Ptr RtcpContextForSend::createRtcpSR(uint32_t rtcp_ssrc) { + uint64_t now = getCurrentMillisecond(); + if (now - _last_sr_tsp < 5000) { + return nullptr; + } + _last_sr_tsp = now; auto rtcp = RtcpSR::create(0); rtcp->setNtpStamp(_last_ntp_stamp_ms); rtcp->rtpts = htonl(_last_rtp_stamp); @@ -117,7 +122,7 @@ Buffer::Ptr RtcpContextForSend::createRtcpSR(uint32_t rtcp_ssrc) { // 记录上次发送的sender report信息,用于后续统计rtt [AUTO-TRANSLATED:1d22d2c8] // Record the last sent sender report information for subsequent RTT statistics auto last_sr_lsr = ((ntohl(rtcp->ntpmsw) & 0xFFFF) << 16) | ((ntohl(rtcp->ntplsw) >> 16) & 0xFFFF); - _sender_report_ntp[last_sr_lsr] = getCurrentMillisecond(); + _sender_report_ntp[last_sr_lsr] = now; if (_sender_report_ntp.size() >= 5) { // 删除最早的sr rtcp [AUTO-TRANSLATED:2457e08d] // Delete the earliest sr rtcp diff --git a/src/Rtcp/RtcpContext.h b/src/Rtcp/RtcpContext.h index 20d7ffe0..9d305386 100644 --- a/src/Rtcp/RtcpContext.h +++ b/src/Rtcp/RtcpContext.h @@ -154,6 +154,7 @@ public: uint32_t getRtt(uint32_t ssrc) const; private: + uint64_t _last_sr_tsp = 0; std::map _rtt; std::map _sender_report_ntp; diff --git a/webrtc/WebRtcTransport.cpp b/webrtc/WebRtcTransport.cpp index acba72e5..d1190586 100644 --- a/webrtc/WebRtcTransport.cpp +++ b/webrtc/WebRtcTransport.cpp @@ -1236,9 +1236,6 @@ void WebRtcTransportImp::onRtcp(const char *buf, size_t len) { if (it != _ssrc_to_track.end()) { auto &track = it->second; track->rtcp_context_send->onRtcp(rtcp); - auto sr = track->rtcp_context_send->createRtcpSR(track->answer_ssrc_rtp); - sendRtcpPacket(sr->data(), sr->size(), true); - _rtcp_sr_send_ticker.resetTime(); } else { WarnL << "未识别的rr rtcp包:" << rtcp->dumpString(); } @@ -1505,13 +1502,10 @@ void WebRtcTransportImp::onSendRtp(const RtpPacket::Ptr &rtp, bool flush, bool r sendRtpPacket(rtp->data() + RtpPacket::kRtpTcpHeaderSize, rtp->size() - RtpPacket::kRtpTcpHeaderSize, flush, &ctx); _bytes_usage += rtp->size() - RtpPacket::kRtpTcpHeaderSize; - if (_rtcp_sr_send_ticker.elapsedTime() > 5000) { - _rtcp_sr_send_ticker.resetTime(); - if (track->rtcp_context_send) { - auto sr = track->rtcp_context_send->createRtcpSR(track->answer_ssrc_rtp); - if (sr && sr->size() > 0) { - sendRtcpPacket(sr->data(), sr->size(), true); - } + if (track->rtcp_context_send) { + auto sr = track->rtcp_context_send->createRtcpSR(track->answer_ssrc_rtp); + if (sr && sr->size() > 0) { + sendRtcpPacket(sr->data(), sr->size(), true); } } } diff --git a/webrtc/WebRtcTransport.h b/webrtc/WebRtcTransport.h index b6495cd1..b54030dc 100644 --- a/webrtc/WebRtcTransport.h +++ b/webrtc/WebRtcTransport.h @@ -380,7 +380,6 @@ private: // pli rtcp timer toolkit::Ticker _pli_ticker; - toolkit::Ticker _rtcp_sr_send_ticker; toolkit::Ticker _rtcp_rr_send_ticker; // twcc rtcp发送上下文对象 [AUTO-TRANSLATED:aef6476a]