From b9d513f9aaa1fc5e0186648cb520ef04b86c97d1 Mon Sep 17 00:00:00 2001 From: mtdxc Date: Mon, 29 Sep 2025 16:52:16 +0800 Subject: [PATCH] =?UTF-8?q?=E9=87=87=E7=94=A8=E5=AE=9A=E6=97=B6=E5=99=A8?= =?UTF-8?q?=E5=8F=91=E9=80=81rr?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- webrtc/WebRtcTransport.cpp | 23 +++++++++-------------- 1 file changed, 9 insertions(+), 14 deletions(-) diff --git a/webrtc/WebRtcTransport.cpp b/webrtc/WebRtcTransport.cpp index d1190586..4f11d300 100644 --- a/webrtc/WebRtcTransport.cpp +++ b/webrtc/WebRtcTransport.cpp @@ -1127,11 +1127,10 @@ public: } return rtp; } - - Buffer::Ptr createRtcpRR(RtcpHeader *sr, uint32_t ssrc) { - if (sr) { - _rtcp_context.onRtcp(sr); - } + void onRtcp(RtcpHeader *sr) { + _rtcp_context.onRtcp(sr); + } + Buffer::Ptr createRtcpRR(uint32_t ssrc) { return _rtcp_context.createRtcpRR(ssrc, getSSRC()); } @@ -1217,9 +1216,7 @@ void WebRtcTransportImp::onRtcp(const char *buf, size_t len) { // 设置rtp时间戳与ntp时间戳的对应关系 [AUTO-TRANSLATED:e92f4749] // Set the correspondence between rtp timestamp and ntp timestamp rtp_chn->setNtpStamp(sr->rtpts, sr->getNtpUnixStampMS()); - auto rr = rtp_chn->createRtcpRR(sr, track->answer_ssrc_rtp); - sendRtcpPacket(rr->data(), rr->size(), true); - _rtcp_rr_send_ticker.resetTime(); + rtp_chn->onRtcp(sr); } } else { WarnL << "未识别的sr rtcp包:" << rtcp->dumpString(); @@ -1348,14 +1345,12 @@ void WebRtcTransportImp::onRtp(const char *buf, size_t len, uint64_t stamp_ms) { if (_rtcp_rr_send_ticker.elapsedTime() > 5000) { _rtcp_rr_send_ticker.resetTime(); - - auto ssrc = ntohl(rtp->ssrc); - auto track_it = _ssrc_to_track.find(ssrc); - if (track_it != _ssrc_to_track.end()) { - auto &track = track_it->second; + for (auto& it : _ssrc_to_track) { + auto ssrc = it.first; + auto &track = it.second; auto rtp_chn = track->getRtpChannel(ssrc); if (rtp_chn) { - auto rr = rtp_chn->createRtcpRR(nullptr, track->answer_ssrc_rtp); + auto rr = rtp_chn->createRtcpRR(track->answer_ssrc_rtp); if (rr && rr->size() > 0) { sendRtcpPacket(rr->data(), rr->size(), true); }