diff --git a/call/flexfec_receive_stream_impl.cc b/call/flexfec_receive_stream_impl.cc index 39b53afcd3..f466cadccc 100644 --- a/call/flexfec_receive_stream_impl.cc +++ b/call/flexfec_receive_stream_impl.cc @@ -122,15 +122,16 @@ std::unique_ptr MaybeCreateFlexfecReceiver( std::unique_ptr CreateRtpRtcpModule( Clock* clock, ReceiveStatistics* receive_statistics, - Transport* rtcp_send_transport, + const FlexfecReceiveStreamImpl::Config& config, RtcpRttStats* rtt_stats) { RtpRtcp::Configuration configuration; configuration.audio = false; configuration.receiver_only = true; configuration.clock = clock; configuration.receive_statistics = receive_statistics; - configuration.outgoing_transport = rtcp_send_transport; + configuration.outgoing_transport = config.rtcp_send_transport; configuration.rtt_stats = rtt_stats; + configuration.media_send_ssrc = config.local_ssrc; return RtpRtcp::Create(configuration); } @@ -150,14 +151,13 @@ FlexfecReceiveStreamImpl::FlexfecReceiveStreamImpl( rtp_receive_statistics_(ReceiveStatistics::Create(clock)), rtp_rtcp_(CreateRtpRtcpModule(clock, rtp_receive_statistics_.get(), - config_.rtcp_send_transport, + config_, rtt_stats)), process_thread_(process_thread) { RTC_LOG(LS_INFO) << "FlexfecReceiveStreamImpl: " << config_.ToString(); // RTCP reporting. rtp_rtcp_->SetRTCPStatus(config_.rtcp_mode); - rtp_rtcp_->SetSSRC(config_.local_ssrc); process_thread_->RegisterModule(rtp_rtcp_.get(), RTC_FROM_HERE); // Register with transport. diff --git a/call/rtp_video_sender.cc b/call/rtp_video_sender.cc index 50cafb4074..77f2ba9f0e 100644 --- a/call/rtp_video_sender.cc +++ b/call/rtp_video_sender.cc @@ -110,15 +110,23 @@ std::vector CreateRtpStreamSenders( std::vector rtp_streams; const std::vector& flexfec_protected_ssrcs = rtp_config.flexfec.protected_media_ssrcs; - for (uint32_t ssrc : rtp_config.ssrcs) { + RTC_DCHECK(rtp_config.rtx.ssrcs.empty() || + rtp_config.rtx.ssrcs.size() == rtp_config.rtx.ssrcs.size()); + for (size_t i = 0; i < rtp_config.ssrcs.size(); ++i) { + configuration.media_send_ssrc = rtp_config.ssrcs[i]; bool enable_flexfec = flexfec_sender != nullptr && std::find(flexfec_protected_ssrcs.begin(), flexfec_protected_ssrcs.end(), - ssrc) != flexfec_protected_ssrcs.end(); + *configuration.media_send_ssrc) != + flexfec_protected_ssrcs.end(); configuration.flexfec_sender = enable_flexfec ? flexfec_sender : nullptr; auto playout_delay_oracle = absl::make_unique(); configuration.ack_observer = playout_delay_oracle.get(); + if (rtp_config.rtx.ssrcs.size() > i) { + configuration.rtx_send_ssrc = rtp_config.rtx.ssrcs[i]; + } + auto rtp_rtcp = RtpRtcp::Create(configuration); rtp_rtcp->SetSendingStatus(false); rtp_rtcp->SetSendingMediaStatus(false); @@ -571,7 +579,6 @@ void RtpVideoSender::ConfigureSsrcs() { for (size_t i = 0; i < rtp_config_.ssrcs.size(); ++i) { uint32_t ssrc = rtp_config_.ssrcs[i]; RtpRtcp* const rtp_rtcp = rtp_streams_[i].rtp_rtcp.get(); - rtp_rtcp->SetSSRC(ssrc); // Restore RTP state if previous existed. auto it = suspended_ssrcs_.find(ssrc); @@ -587,12 +594,10 @@ void RtpVideoSender::ConfigureSsrcs() { if (rtp_config_.rtx.ssrcs.empty()) return; - // Configure RTX SSRCs. RTC_DCHECK_EQ(rtp_config_.rtx.ssrcs.size(), rtp_config_.ssrcs.size()); for (size_t i = 0; i < rtp_config_.rtx.ssrcs.size(); ++i) { uint32_t ssrc = rtp_config_.rtx.ssrcs[i]; RtpRtcp* const rtp_rtcp = rtp_streams_[i].rtp_rtcp.get(); - rtp_rtcp->SetRtxSsrc(ssrc); auto it = suspended_ssrcs_.find(ssrc); if (it != suspended_ssrcs_.end()) rtp_rtcp->SetRtxState(it->second); diff --git a/modules/rtp_rtcp/source/nack_rtx_unittest.cc b/modules/rtp_rtcp/source/nack_rtx_unittest.cc index 5c87f67e2d..1f5d64ac30 100644 --- a/modules/rtp_rtcp/source/nack_rtx_unittest.cc +++ b/modules/rtp_rtcp/source/nack_rtx_unittest.cc @@ -135,11 +135,11 @@ class RtpRtcpRtxNackTest : public ::testing::Test { configuration.receive_statistics = receive_statistics_.get(); configuration.outgoing_transport = &transport_; configuration.retransmission_rate_limiter = &retransmission_rate_limiter_; + configuration.media_send_ssrc = kTestSsrc; rtp_rtcp_module_ = RtpRtcp::Create(configuration); rtp_sender_video_ = absl::make_unique( &fake_clock, rtp_rtcp_module_->RtpSender(), nullptr, &playout_delay_oracle_, nullptr, false, false, FieldTrialBasedConfig()); - rtp_rtcp_module_->SetSSRC(kTestSsrc); rtp_rtcp_module_->SetRTCPStatus(RtcpMode::kCompound); rtp_rtcp_module_->SetStorePacketsStatus(true, 600); EXPECT_EQ(0, rtp_rtcp_module_->SetSendingStatus(true)); diff --git a/modules/rtp_rtcp/source/rtp_rtcp_impl_unittest.cc b/modules/rtp_rtcp/source/rtp_rtcp_impl_unittest.cc index a0690c1778..f4553e111f 100644 --- a/modules/rtp_rtcp/source/rtp_rtcp_impl_unittest.cc +++ b/modules/rtp_rtcp/source/rtp_rtcp_impl_unittest.cc @@ -180,7 +180,6 @@ class RtpRtcpImplTest : public ::testing::Test { void SetUp() override { // Send module. - sender_.impl_->SetSSRC(kSenderSsrc); EXPECT_EQ(0, sender_.impl_->SetSendingStatus(true)); sender_.impl_->SetSendingMediaStatus(true); sender_.SetRemoteSsrc(kReceiverSsrc);