From 00582e0c362302531c1e76ca679819fb904ef714 Mon Sep 17 00:00:00 2001 From: winlin Date: Tue, 11 Aug 2020 15:42:08 +0800 Subject: [PATCH] RTC: Fix RTCP feedback bug --- trunk/src/app/srs_app_rtc_conn.cpp | 18 ++++++++++++++++-- trunk/src/app/srs_app_rtc_conn.hpp | 3 ++- 2 files changed, 18 insertions(+), 3 deletions(-) diff --git a/trunk/src/app/srs_app_rtc_conn.cpp b/trunk/src/app/srs_app_rtc_conn.cpp index 435d1d6d0..583d1abfa 100644 --- a/trunk/src/app/srs_app_rtc_conn.cpp +++ b/trunk/src/app/srs_app_rtc_conn.cpp @@ -1167,6 +1167,9 @@ srs_error_t SrsRtcPublishStream::on_rtcp(SrsRtcpCommon* rtcp) } else if(SrsRtcpType_xr == rtcp->type()) { SrsRtcpXr* xr = dynamic_cast(rtcp); return on_rtcp_xr(xr); + } else if(SrsRtcpType_sdes == rtcp->type()) { + //ignore RTCP SDES + return srs_success; } else { return srs_error_new(ERROR_RTC_RTCP_CHECK, "unknown rtcp type=%u", rtcp->type()); } @@ -1798,13 +1801,18 @@ srs_error_t SrsRtcConnection::dispatch_rtcp(SrsRtcpCommon* rtcp) } } else if(15 == rtcp->get_rc()) { // twcc - if(srs_success != (err = on_rtcp_feedback(rtcp->data(), rtcp->size()))) { + if(srs_success != (err = on_rtcp_feedback_twcc(rtcp->data(), rtcp->size()))) { return srs_error_wrap(err, "handle twcc feedback"); } } } else if(SrsRtcpType_psfb == rtcp->type()) { SrsRtcpPsfbCommon* psfb = dynamic_cast(rtcp); srs_assert(psfb != NULL); + //TODO: user const to replace 15 + if(15 == psfb->get_rc()) { + return on_rtcp_feedback_remb(psfb); + } + it_player = players_ssrc_map_.find(psfb->get_media_ssrc()); if(players_ssrc_map_.end() == it_player) { srs_warn("psfb: ssrc %d is unknown", psfb->get_media_ssrc()); @@ -1838,11 +1846,17 @@ srs_error_t SrsRtcConnection::dispatch_rtcp(SrsRtcpCommon* rtcp) return err; } -srs_error_t SrsRtcConnection::on_rtcp_feedback(char* data, int nb_data) +srs_error_t SrsRtcConnection::on_rtcp_feedback_twcc(char* data, int nb_data) { return srs_success; } +srs_error_t SrsRtcConnection::on_rtcp_feedback_remb(SrsRtcpPsfbCommon *rtcp) +{ + //ignore REMB + return srs_success; +} + void SrsRtcConnection::set_hijacker(ISrsRtcConnectionHijacker* h) { hijacker_ = h; diff --git a/trunk/src/app/srs_app_rtc_conn.hpp b/trunk/src/app/srs_app_rtc_conn.hpp index c14332fd6..b1499810d 100644 --- a/trunk/src/app/srs_app_rtc_conn.hpp +++ b/trunk/src/app/srs_app_rtc_conn.hpp @@ -448,7 +448,8 @@ public: private: srs_error_t dispatch_rtcp(SrsRtcpCommon* rtcp); public: - srs_error_t on_rtcp_feedback(char* buf, int nb_buf); + srs_error_t on_rtcp_feedback_twcc(char* buf, int nb_buf); + srs_error_t on_rtcp_feedback_remb(SrsRtcpPsfbCommon *rtcp); void set_hijacker(ISrsRtcConnectionHijacker* h); public: srs_error_t on_connection_established();