diff --git a/talk/media/webrtc/webrtcvideoengine.cc b/talk/media/webrtc/webrtcvideoengine.cc index 3bcec4de4..2c6e56173 100644 --- a/talk/media/webrtc/webrtcvideoengine.cc +++ b/talk/media/webrtc/webrtcvideoengine.cc @@ -3927,7 +3927,8 @@ bool WebRtcVideoMediaChannel::SetSendParams( } engine()->vie()->rtp()->SetTransmissionSmoothingStatus(channel_id, true); - if (!SetSendSsrcs(channel_id, send_params.stream, codec)) { + if (send_channel->IsActive() && + !SetSendSsrcs(channel_id, send_params.stream, codec)) { return false; } diff --git a/talk/media/webrtc/webrtcvideoengine_unittest.cc b/talk/media/webrtc/webrtcvideoengine_unittest.cc index 00d6e4b1e..e48111477 100644 --- a/talk/media/webrtc/webrtcvideoengine_unittest.cc +++ b/talk/media/webrtc/webrtcvideoengine_unittest.cc @@ -41,7 +41,6 @@ #include "talk/media/webrtc/webrtcvoiceengine.h" #include "talk/session/media/mediasession.h" #include "webrtc/system_wrappers/interface/trace.h" - // Tests for the WebRtcVideoEngine/VideoChannel code. using cricket::kRtpTimestampOffsetHeaderExtension; @@ -2553,3 +2552,33 @@ TEST_F(WebRtcVideoMediaChannelTest, 640, 400, 30, 0)); } + +// Test that sequence number are not reset if stopping and then +// resuming a stream. +TEST_F(WebRtcVideoMediaChannelTest, DontResetSequenceNumbers) { + cricket::VideoCodec codec = DefaultCodec(); + EXPECT_TRUE(SetOneCodec(codec)); + + uint16_t seq_before = + engine_.vie() + ->rtp() + ->GetRtpStateForSsrc(channel_->GetDefaultChannelId(), kSsrc) + .sequence_number; + + // Deactive. + EXPECT_TRUE(channel_->RemoveSendStream(kSsrc)); + EXPECT_TRUE(SetOneCodec(codec)); + + // Reactivate. + EXPECT_TRUE(channel_->AddSendStream(DefaultSendStreamParams())); + EXPECT_TRUE(SetOneCodec(codec)); + + // Sequence number should now have changed. + uint16_t seq_after = + engine_.vie() + ->rtp() + ->GetRtpStateForSsrc(channel_->GetDefaultChannelId(), kSsrc) + .sequence_number; + + EXPECT_EQ(seq_before, seq_after); +}