diff --git a/modules/rtp_rtcp/source/rtcp_sender.cc b/modules/rtp_rtcp/source/rtcp_sender.cc index c79cde835f..af5cd270cd 100644 --- a/modules/rtp_rtcp/source/rtcp_sender.cc +++ b/modules/rtp_rtcp/source/rtcp_sender.cc @@ -48,8 +48,6 @@ namespace { const uint32_t kRtcpAnyExtendedReports = kRtcpXrReceiverReferenceTime | kRtcpXrDlrrReportBlock | kRtcpXrTargetBitrate; -constexpr int32_t kDefaultVideoReportInterval = 1000; -constexpr int32_t kDefaultAudioReportInterval = 5000; } // namespace RTCPSender::FeedbackState::FeedbackState() @@ -114,25 +112,29 @@ class RTCPSender::RtcpContext { const int64_t now_us_; }; -RTCPSender::RTCPSender(const RtpRtcp::Configuration& config) - : audio_(config.audio), - clock_(config.clock), +RTCPSender::RTCPSender( + bool audio, + Clock* clock, + ReceiveStatisticsProvider* receive_statistics, + RtcpPacketTypeCounterObserver* packet_type_counter_observer, + RtcEventLog* event_log, + Transport* outgoing_transport, + int report_interval_ms) + : audio_(audio), + clock_(clock), random_(clock_->TimeInMicroseconds()), method_(RtcpMode::kOff), - event_log_(config.event_log), - transport_(config.outgoing_transport), - report_interval_ms_(config.rtcp_report_interval_ms > 0 - ? config.rtcp_report_interval_ms - : (config.audio ? kDefaultAudioReportInterval - : kDefaultVideoReportInterval)), + event_log_(event_log), + transport_(outgoing_transport), + report_interval_ms_(report_interval_ms), sending_(false), next_time_to_send_rtcp_(0), timestamp_offset_(0), last_rtp_timestamp_(0), last_frame_capture_time_ms_(-1), - ssrc_(config.media_send_ssrc.value_or(0)), + ssrc_(0), remote_ssrc_(0), - receive_statistics_(config.receive_statistics), + receive_statistics_(receive_statistics), sequence_number_fir_(0), @@ -148,7 +150,7 @@ RTCPSender::RTCPSender(const RtpRtcp::Configuration& config) app_length_(0), xr_send_receiver_reference_time_enabled_(false), - packet_type_counter_observer_(config.rtcp_packet_type_counter_observer), + packet_type_counter_observer_(packet_type_counter_observer), send_video_bitrate_allocation_(false), last_payload_type_(-1) { RTC_DCHECK(transport_ != nullptr); @@ -305,7 +307,7 @@ uint32_t RTCPSender::SSRC() const { void RTCPSender::SetSSRC(uint32_t ssrc) { rtc::CritScope lock(&critical_section_rtcp_sender_); - if (ssrc != ssrc_) { + if (ssrc_ != 0) { // not first SetSSRC, probably due to a collision // schedule a new RTCP report // make sure that we send a RTP packet diff --git a/modules/rtp_rtcp/source/rtcp_sender.h b/modules/rtp_rtcp/source/rtcp_sender.h index 628121ea4e..74f4cc17a6 100644 --- a/modules/rtp_rtcp/source/rtcp_sender.h +++ b/modules/rtp_rtcp/source/rtcp_sender.h @@ -23,7 +23,6 @@ #include "modules/remote_bitrate_estimator/include/bwe_defines.h" #include "modules/remote_bitrate_estimator/include/remote_bitrate_estimator.h" #include "modules/rtp_rtcp/include/receive_statistics.h" -#include "modules/rtp_rtcp/include/rtp_rtcp.h" #include "modules/rtp_rtcp/include/rtp_rtcp_defines.h" #include "modules/rtp_rtcp/source/rtcp_nack_stats.h" #include "modules/rtp_rtcp/source/rtcp_packet.h" @@ -63,7 +62,13 @@ class RTCPSender { ModuleRtpRtcpImpl* module; }; - explicit RTCPSender(const RtpRtcp::Configuration& config); + RTCPSender(bool audio, + Clock* clock, + ReceiveStatisticsProvider* receive_statistics, + RtcpPacketTypeCounterObserver* packet_type_counter_observer, + RtcEventLog* event_log, + Transport* outgoing_transport, + int report_interval_ms); virtual ~RTCPSender(); RtcpMode Status() const; diff --git a/modules/rtp_rtcp/source/rtcp_sender_unittest.cc b/modules/rtp_rtcp/source/rtcp_sender_unittest.cc index 747e5af6ed..01101c0e4b 100644 --- a/modules/rtp_rtcp/source/rtcp_sender_unittest.cc +++ b/modules/rtp_rtcp/source/rtcp_sender_unittest.cc @@ -81,10 +81,12 @@ class RtcpSenderTest : public ::testing::Test { configuration.outgoing_transport = &test_transport_; configuration.retransmission_rate_limiter = &retransmission_rate_limiter_; configuration.rtcp_report_interval_ms = 1000; - configuration.receive_statistics = receive_statistics_.get(); - configuration.media_send_ssrc = kSenderSsrc; + rtp_rtcp_impl_.reset(new ModuleRtpRtcpImpl(configuration)); - rtcp_sender_.reset(new RTCPSender(configuration)); + rtcp_sender_.reset(new RTCPSender(false, &clock_, receive_statistics_.get(), + nullptr, nullptr, &test_transport_, + configuration.rtcp_report_interval_ms)); + rtcp_sender_->SetSSRC(kSenderSsrc); rtcp_sender_->SetRemoteSSRC(kRemoteSsrc); rtcp_sender_->SetTimestampOffset(kStartRtpTimestamp); rtcp_sender_->SetLastRtpTime(kRtpTimestamp, clock_.TimeInMilliseconds(), @@ -185,13 +187,9 @@ TEST_F(RtcpSenderTest, SendConsecutiveSrWithExactSlope) { } TEST_F(RtcpSenderTest, DoNotSendSrBeforeRtp) { - RtpRtcp::Configuration config; - config.clock = &clock_; - config.receive_statistics = receive_statistics_.get(); - config.outgoing_transport = &test_transport_; - config.rtcp_report_interval_ms = 1000; - config.media_send_ssrc = kSenderSsrc; - rtcp_sender_.reset(new RTCPSender(config)); + rtcp_sender_.reset(new RTCPSender(false, &clock_, receive_statistics_.get(), + nullptr, nullptr, &test_transport_, 1000)); + rtcp_sender_->SetSSRC(kSenderSsrc); rtcp_sender_->SetRemoteSSRC(kRemoteSsrc); rtcp_sender_->SetRTCPStatus(RtcpMode::kReducedSize); rtcp_sender_->SetSendingStatus(feedback_state(), true); @@ -207,13 +205,9 @@ TEST_F(RtcpSenderTest, DoNotSendSrBeforeRtp) { } TEST_F(RtcpSenderTest, DoNotSendCompundBeforeRtp) { - RtpRtcp::Configuration config; - config.clock = &clock_; - config.receive_statistics = receive_statistics_.get(); - config.outgoing_transport = &test_transport_; - config.rtcp_report_interval_ms = 1000; - config.media_send_ssrc = kSenderSsrc; - rtcp_sender_.reset(new RTCPSender(config)); + rtcp_sender_.reset(new RTCPSender(false, &clock_, receive_statistics_.get(), + nullptr, nullptr, &test_transport_, 1000)); + rtcp_sender_->SetSSRC(kSenderSsrc); rtcp_sender_->SetRemoteSSRC(kRemoteSsrc); rtcp_sender_->SetRTCPStatus(RtcpMode::kCompound); rtcp_sender_->SetSendingStatus(feedback_state(), true); @@ -557,14 +551,9 @@ TEST_F(RtcpSenderTest, TestNoXrRrtrSentIfNotEnabled) { TEST_F(RtcpSenderTest, TestRegisterRtcpPacketTypeObserver) { RtcpPacketTypeCounterObserverImpl observer; - RtpRtcp::Configuration config; - config.clock = &clock_; - config.receive_statistics = receive_statistics_.get(); - config.outgoing_transport = &test_transport_; - config.rtcp_packet_type_counter_observer = &observer; - config.rtcp_report_interval_ms = 1000; - rtcp_sender_.reset(new RTCPSender(config)); - + rtcp_sender_.reset(new RTCPSender(false, &clock_, receive_statistics_.get(), + &observer, nullptr, &test_transport_, + 1000)); rtcp_sender_->SetRemoteSSRC(kRemoteSsrc); rtcp_sender_->SetRTCPStatus(RtcpMode::kReducedSize); EXPECT_EQ(0, rtcp_sender_->SendRTCP(feedback_state(), kRtcpPli)); @@ -685,14 +674,9 @@ TEST_F(RtcpSenderTest, ByeMustBeLast) { })); // Re-configure rtcp_sender_ with mock_transport_ - RtpRtcp::Configuration config; - config.clock = &clock_; - config.receive_statistics = receive_statistics_.get(); - config.outgoing_transport = &mock_transport; - config.rtcp_report_interval_ms = 1000; - config.media_send_ssrc = kSenderSsrc; - rtcp_sender_.reset(new RTCPSender(config)); - + rtcp_sender_.reset(new RTCPSender(false, &clock_, receive_statistics_.get(), + nullptr, nullptr, &mock_transport, 1000)); + rtcp_sender_->SetSSRC(kSenderSsrc); rtcp_sender_->SetRemoteSSRC(kRemoteSsrc); rtcp_sender_->SetTimestampOffset(kStartRtpTimestamp); rtcp_sender_->SetLastRtpTime(kRtpTimestamp, clock_.TimeInMilliseconds(), diff --git a/modules/rtp_rtcp/source/rtp_rtcp_impl.cc b/modules/rtp_rtcp/source/rtp_rtcp_impl.cc index 765f76f70f..aa50227b14 100644 --- a/modules/rtp_rtcp/source/rtp_rtcp_impl.cc +++ b/modules/rtp_rtcp/source/rtp_rtcp_impl.cc @@ -61,7 +61,16 @@ RtpRtcp* RtpRtcp::CreateRtpRtcp(const RtpRtcp::Configuration& configuration) { } ModuleRtpRtcpImpl::ModuleRtpRtcpImpl(const Configuration& configuration) - : rtcp_sender_(configuration), + : rtcp_sender_(configuration.audio, + configuration.clock, + configuration.receive_statistics, + configuration.rtcp_packet_type_counter_observer, + configuration.event_log, + configuration.outgoing_transport, + configuration.rtcp_report_interval_ms > 0 + ? configuration.rtcp_report_interval_ms + : (configuration.audio ? kDefaultAudioReportInterval + : kDefaultVideoReportInterval)), rtcp_receiver_(configuration.clock, configuration.receiver_only, configuration.rtcp_packet_type_counter_observer, diff --git a/modules/rtp_rtcp/source/rtp_rtcp_impl_unittest.cc b/modules/rtp_rtcp/source/rtp_rtcp_impl_unittest.cc index a0690c1778..31f9b24965 100644 --- a/modules/rtp_rtcp/source/rtp_rtcp_impl_unittest.cc +++ b/modules/rtp_rtcp/source/rtp_rtcp_impl_unittest.cc @@ -162,7 +162,6 @@ class RtpRtcpModule : public RtcpPacketTypeCounterObserver { config.rtcp_packet_type_counter_observer = this; config.rtt_stats = &rtt_stats_; config.rtcp_report_interval_ms = rtcp_report_interval_ms_; - config.media_send_ssrc = kSenderSsrc; impl_.reset(new ModuleRtpRtcpImpl(config)); impl_->SetRTCPStatus(RtcpMode::kCompound); diff --git a/video/video_send_stream_tests.cc b/video/video_send_stream_tests.cc index 75423e5f56..96da991077 100644 --- a/video/video_send_stream_tests.cc +++ b/video/video_send_stream_tests.cc @@ -914,11 +914,9 @@ void VideoSendStreamTest::TestNackRetransmission( non_padding_sequence_numbers_.end() - kNackedPacketsAtOnceCount, non_padding_sequence_numbers_.end()); - RtpRtcp::Configuration config; - config.clock = Clock::GetRealTimeClock(); - config.outgoing_transport = transport_adapter_.get(); - config.rtcp_report_interval_ms = kRtcpIntervalMs; - RTCPSender rtcp_sender(config); + RTCPSender rtcp_sender(false, Clock::GetRealTimeClock(), nullptr, + nullptr, nullptr, transport_adapter_.get(), + kRtcpIntervalMs); rtcp_sender.SetRTCPStatus(RtcpMode::kReducedSize); rtcp_sender.SetRemoteSSRC(kVideoSendSsrcs[0]); @@ -1129,12 +1127,9 @@ void VideoSendStreamTest::TestPacketFragmentationSize(VideoFormat format, kVideoSendSsrcs[0], header.sequenceNumber, packets_lost_, // Cumulative lost. loss_ratio); // Loss percent. - RtpRtcp::Configuration config; - config.clock = Clock::GetRealTimeClock(); - config.receive_statistics = &lossy_receive_stats; - config.outgoing_transport = transport_adapter_.get(); - config.rtcp_report_interval_ms = kRtcpIntervalMs; - RTCPSender rtcp_sender(config); + RTCPSender rtcp_sender(false, Clock::GetRealTimeClock(), + &lossy_receive_stats, nullptr, nullptr, + transport_adapter_.get(), kRtcpIntervalMs); rtcp_sender.SetRTCPStatus(RtcpMode::kReducedSize); rtcp_sender.SetRemoteSSRC(kVideoSendSsrcs[0]); @@ -1380,12 +1375,8 @@ TEST_F(VideoSendStreamTest, SuspendBelowMinBitrate) { RTC_EXCLUSIVE_LOCKS_REQUIRED(crit_) { FakeReceiveStatistics receive_stats(kVideoSendSsrcs[0], last_sequence_number_, rtp_count_, 0); - RtpRtcp::Configuration config; - config.clock = clock_; - config.receive_statistics = &receive_stats; - config.outgoing_transport = transport_adapter_.get(); - config.rtcp_report_interval_ms = kRtcpIntervalMs; - RTCPSender rtcp_sender(config); + RTCPSender rtcp_sender(false, clock_, &receive_stats, nullptr, nullptr, + transport_adapter_.get(), kRtcpIntervalMs); rtcp_sender.SetRTCPStatus(RtcpMode::kReducedSize); rtcp_sender.SetRemoteSSRC(kVideoSendSsrcs[0]);