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]