Do not allow simulcast to be turned off using SDP munging
This is an error that puts the PC into an inconsistent state, so causing a crash is the right thing to do. Bug: chromium:1341043 Change-Id: Ie1eb89400ad87f0c83634b7073236b07e92ec7ab Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/267281 Reviewed-by: Mirko Bonadei <mbonadei@webrtc.org> Reviewed-by: Henrik Boström <hbos@webrtc.org> Commit-Queue: Harald Alvestrand <hta@webrtc.org> Cr-Commit-Position: refs/heads/main@{#37391}
This commit is contained in:
parent
de7fcffe0c
commit
3fe8b0d9a9
@ -316,8 +316,8 @@ void RtpSenderBase::SetSsrc(uint32_t ssrc) {
|
||||
// we need to copy.
|
||||
RtpParameters current_parameters =
|
||||
media_channel_->GetRtpSendParameters(ssrc_);
|
||||
RTC_DCHECK_GE(current_parameters.encodings.size(),
|
||||
init_parameters_.encodings.size());
|
||||
RTC_CHECK_GE(current_parameters.encodings.size(),
|
||||
init_parameters_.encodings.size());
|
||||
for (size_t i = 0; i < init_parameters_.encodings.size(); ++i) {
|
||||
init_parameters_.encodings[i].ssrc =
|
||||
current_parameters.encodings[i].ssrc;
|
||||
|
||||
@ -1150,6 +1150,44 @@ TEST_F(RtpSenderReceiverTest,
|
||||
DestroyVideoRtpSender();
|
||||
}
|
||||
|
||||
#if GTEST_HAS_DEATH_TEST && !defined(WEBRTC_ANDROID)
|
||||
using RtpSenderReceiverDeathTest = RtpSenderReceiverTest;
|
||||
|
||||
TEST_F(RtpSenderReceiverDeathTest,
|
||||
VideoSenderManualRemoveSimulcastFailsDeathTest) {
|
||||
AddVideoTrack(false);
|
||||
|
||||
std::unique_ptr<MockSetStreamsObserver> set_streams_observer =
|
||||
std::make_unique<MockSetStreamsObserver>();
|
||||
video_rtp_sender_ = VideoRtpSender::Create(worker_thread_, video_track_->id(),
|
||||
set_streams_observer.get());
|
||||
ASSERT_TRUE(video_rtp_sender_->SetTrack(video_track_.get()));
|
||||
EXPECT_CALL(*set_streams_observer, OnSetStreams());
|
||||
video_rtp_sender_->SetStreams({local_stream_->id()});
|
||||
|
||||
std::vector<RtpEncodingParameters> init_encodings(2);
|
||||
init_encodings[0].max_bitrate_bps = 60000;
|
||||
init_encodings[1].max_bitrate_bps = 120000;
|
||||
video_rtp_sender_->set_init_send_encodings(init_encodings);
|
||||
|
||||
RtpParameters params = video_rtp_sender_->GetParameters();
|
||||
ASSERT_EQ(2u, params.encodings.size());
|
||||
EXPECT_EQ(params.encodings[0].max_bitrate_bps, 60000);
|
||||
|
||||
// Simulate the setLocalDescription call as if the user used SDP munging
|
||||
// to disable simulcast.
|
||||
std::vector<uint32_t> ssrcs;
|
||||
ssrcs.reserve(2);
|
||||
for (int i = 0; i < 2; ++i)
|
||||
ssrcs.push_back(kVideoSsrcSimulcast + i);
|
||||
cricket::StreamParams stream_params =
|
||||
cricket::StreamParams::CreateLegacy(kVideoSsrc);
|
||||
video_media_channel()->AddSendStream(stream_params);
|
||||
video_rtp_sender_->SetMediaChannel(video_media_channel());
|
||||
EXPECT_DEATH(video_rtp_sender_->SetSsrc(kVideoSsrcSimulcast), "");
|
||||
}
|
||||
#endif
|
||||
|
||||
TEST_F(RtpSenderReceiverTest,
|
||||
VideoSenderMustCallGetParametersBeforeSetParametersBeforeNegotiation) {
|
||||
video_rtp_sender_ =
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user