Update receive report SSRCs on RemoveSendStream.
Prevents RTCP receiver reports, including PLIs with an old receiver-report SSRC, from being dropped from the remote sender's BundleFilter due to no longer being in use. BUG=chromium:523928, webrtc:4883 R=stefan@webrtc.org Review URL: https://codereview.webrtc.org/1404363003 . Cr-Commit-Position: refs/heads/master@{#10359}
This commit is contained in:
parent
0c478b3d75
commit
dfa2815b4f
@ -1146,6 +1146,19 @@ bool WebRtcVideoChannel2::RemoveSendStream(uint32_t ssrc) {
|
||||
|
||||
removed_stream = it->second;
|
||||
send_streams_.erase(it);
|
||||
|
||||
// Switch receiver report SSRCs, the one in use is no longer valid.
|
||||
if (rtcp_receiver_report_ssrc_ == ssrc) {
|
||||
rtcp_receiver_report_ssrc_ = send_streams_.empty()
|
||||
? kDefaultRtcpReceiverReportSsrc
|
||||
: send_streams_.begin()->first;
|
||||
LOG(LS_INFO) << "SetLocalSsrc on all the receive streams because the "
|
||||
"previous local SSRC was removed.";
|
||||
|
||||
for (auto& kv : receive_streams_) {
|
||||
kv.second->SetLocalSsrc(rtcp_receiver_report_ssrc_);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
delete removed_stream;
|
||||
|
||||
@ -2816,15 +2816,18 @@ void WebRtcVideoChannel2Test::TestReceiverLocalSsrcConfiguration(
|
||||
EXPECT_TRUE(channel_->SetSendParameters(send_parameters_));
|
||||
|
||||
const uint32_t kSenderSsrc = 0xC0FFEE;
|
||||
const uint32_t kSecondSenderSsrc = 0xBADCAFE;
|
||||
const uint32_t kReceiverSsrc = 0x4711;
|
||||
const uint32_t kExpectedDefaultReceiverSsrc = 1;
|
||||
|
||||
if (receiver_first) {
|
||||
AddRecvStream(StreamParams::CreateLegacy(kReceiverSsrc));
|
||||
std::vector<FakeVideoReceiveStream*> receive_streams =
|
||||
fake_call_->GetVideoReceiveStreams();
|
||||
ASSERT_EQ(1u, receive_streams.size());
|
||||
// Bogus local SSRC when we have no sender.
|
||||
EXPECT_EQ(1, receive_streams[0]->GetConfig().rtp.local_ssrc);
|
||||
// Default local SSRC when we have no sender.
|
||||
EXPECT_EQ(kExpectedDefaultReceiverSsrc,
|
||||
receive_streams[0]->GetConfig().rtp.local_ssrc);
|
||||
}
|
||||
AddSendStream(StreamParams::CreateLegacy(kSenderSsrc));
|
||||
if (!receiver_first)
|
||||
@ -2833,6 +2836,23 @@ void WebRtcVideoChannel2Test::TestReceiverLocalSsrcConfiguration(
|
||||
fake_call_->GetVideoReceiveStreams();
|
||||
ASSERT_EQ(1u, receive_streams.size());
|
||||
EXPECT_EQ(kSenderSsrc, receive_streams[0]->GetConfig().rtp.local_ssrc);
|
||||
|
||||
// Removing first sender should fall back to another (in this case the second)
|
||||
// local send stream's SSRC.
|
||||
AddSendStream(StreamParams::CreateLegacy(kSecondSenderSsrc));
|
||||
ASSERT_TRUE(channel_->RemoveSendStream(kSenderSsrc));
|
||||
receive_streams =
|
||||
fake_call_->GetVideoReceiveStreams();
|
||||
ASSERT_EQ(1u, receive_streams.size());
|
||||
EXPECT_EQ(kSecondSenderSsrc, receive_streams[0]->GetConfig().rtp.local_ssrc);
|
||||
|
||||
// Removing the last sender should fall back to default local SSRC.
|
||||
ASSERT_TRUE(channel_->RemoveSendStream(kSecondSenderSsrc));
|
||||
receive_streams =
|
||||
fake_call_->GetVideoReceiveStreams();
|
||||
ASSERT_EQ(1u, receive_streams.size());
|
||||
EXPECT_EQ(kExpectedDefaultReceiverSsrc,
|
||||
receive_streams[0]->GetConfig().rtp.local_ssrc);
|
||||
}
|
||||
|
||||
TEST_F(WebRtcVideoChannel2Test, ConfiguresLocalSsrc) {
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user