Revert "rtp sender: don't send BYE on deactivating streams"
This reverts commit a22c2a0c581cbe3f612f7a7d9fb9840186cc1e06. Reason for revert: breaks upstream project Original change's description: > rtp sender: don't send BYE on deactivating streams > > as this breaks RTCP assumptions about SSRCs being no longer > active as defined in > https://www.rfc-editor.org/rfc/rfc3550#section-6.6 > > This should not be sent in reaction to temporarily disabling > a stream via RTCRtpParameters.active as this does not mean that > the participant is leaving the session as defined in > https://www.rfc-editor.org/rfc/rfc3550#section-6.3.7 > and does not indicate end of participation as defined in > https://www.rfc-editor.org/rfc/rfc3550#section-6.1 > which stipulates BYE should be the last packet sent from this SSRC. > > BUG=webrtc:11082 > > Change-Id: Ia5144857f85303643146b0759184f0f3f50b66e4 > Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/273348 > Reviewed-by: Harald Alvestrand <hta@webrtc.org> > Commit-Queue: Philipp Hancke <phancke@microsoft.com> > Cr-Commit-Position: refs/heads/main@{#38059} Bug: webrtc:11082 Change-Id: Iaaff0c0d7bb857fe9ce78ebcc716f3c6f1bc5c4a Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/275640 Reviewed-by: Henrik Boström <hbos@webrtc.org> Reviewed-by: Tomas Gunnarsson <tommi@webrtc.org> Commit-Queue: Philipp Hancke <phancke@microsoft.com> Bot-Commit: rubber-stamper@appspot.gserviceaccount.com <rubber-stamper@appspot.gserviceaccount.com> Cr-Commit-Position: refs/heads/main@{#38097}
This commit is contained in:

committed by
WebRTC LUCI CQ

parent
2720dc5b3b
commit
03e6cccc28
@ -513,6 +513,7 @@ void RtpVideoSender::SetActiveModulesLocked(
|
|||||||
const bool was_active = rtp_module.Sending();
|
const bool was_active = rtp_module.Sending();
|
||||||
const bool should_be_active = active_modules[i];
|
const bool should_be_active = active_modules[i];
|
||||||
|
|
||||||
|
// Sends a kRtcpByeCode when going from true to false.
|
||||||
rtp_module.SetSendingStatus(active_modules[i]);
|
rtp_module.SetSendingStatus(active_modules[i]);
|
||||||
|
|
||||||
if (was_active && !should_be_active) {
|
if (was_active && !should_be_active) {
|
||||||
|
@ -213,9 +213,24 @@ bool RTCPSender::Sending() const {
|
|||||||
|
|
||||||
void RTCPSender::SetSendingStatus(const FeedbackState& feedback_state,
|
void RTCPSender::SetSendingStatus(const FeedbackState& feedback_state,
|
||||||
bool sending) {
|
bool sending) {
|
||||||
|
bool sendRTCPBye = false;
|
||||||
|
{
|
||||||
MutexLock lock(&mutex_rtcp_sender_);
|
MutexLock lock(&mutex_rtcp_sender_);
|
||||||
|
|
||||||
|
if (method_ != RtcpMode::kOff) {
|
||||||
|
if (sending == false && sending_ == true) {
|
||||||
|
// Trigger RTCP bye
|
||||||
|
sendRTCPBye = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
sending_ = sending;
|
sending_ = sending;
|
||||||
}
|
}
|
||||||
|
if (sendRTCPBye) {
|
||||||
|
if (SendRTCP(feedback_state, kRtcpBye) != 0) {
|
||||||
|
RTC_LOG(LS_WARNING) << "Failed to send RTCP BYE";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
void RTCPSender::SetNonSenderRttMeasurement(bool enabled) {
|
void RTCPSender::SetNonSenderRttMeasurement(bool enabled) {
|
||||||
MutexLock lock(&mutex_rtcp_sender_);
|
MutexLock lock(&mutex_rtcp_sender_);
|
||||||
|
@ -329,12 +329,13 @@ TEST_F(RtcpSenderTest, SendBye) {
|
|||||||
EXPECT_EQ(kSenderSsrc, parser()->bye()->sender_ssrc());
|
EXPECT_EQ(kSenderSsrc, parser()->bye()->sender_ssrc());
|
||||||
}
|
}
|
||||||
|
|
||||||
TEST_F(RtcpSenderTest, StopSendingDoesNotTriggersBye) {
|
TEST_F(RtcpSenderTest, StopSendingTriggersBye) {
|
||||||
auto rtcp_sender = CreateRtcpSender(GetDefaultConfig());
|
auto rtcp_sender = CreateRtcpSender(GetDefaultConfig());
|
||||||
rtcp_sender->SetRTCPStatus(RtcpMode::kReducedSize);
|
rtcp_sender->SetRTCPStatus(RtcpMode::kReducedSize);
|
||||||
rtcp_sender->SetSendingStatus(feedback_state(), true);
|
rtcp_sender->SetSendingStatus(feedback_state(), true);
|
||||||
rtcp_sender->SetSendingStatus(feedback_state(), false);
|
rtcp_sender->SetSendingStatus(feedback_state(), false);
|
||||||
EXPECT_EQ(0, parser()->bye()->num_packets());
|
EXPECT_EQ(1, parser()->bye()->num_packets());
|
||||||
|
EXPECT_EQ(kSenderSsrc, parser()->bye()->sender_ssrc());
|
||||||
}
|
}
|
||||||
|
|
||||||
TEST_F(RtcpSenderTest, SendFir) {
|
TEST_F(RtcpSenderTest, SendFir) {
|
||||||
|
@ -310,6 +310,7 @@ RTCPSender::FeedbackState ModuleRtpRtcpImpl::GetFeedbackState() {
|
|||||||
|
|
||||||
int32_t ModuleRtpRtcpImpl::SetSendingStatus(const bool sending) {
|
int32_t ModuleRtpRtcpImpl::SetSendingStatus(const bool sending) {
|
||||||
if (rtcp_sender_.Sending() != sending) {
|
if (rtcp_sender_.Sending() != sending) {
|
||||||
|
// Sends RTCP BYE when going from true to false
|
||||||
rtcp_sender_.SetSendingStatus(GetFeedbackState(), sending);
|
rtcp_sender_.SetSendingStatus(GetFeedbackState(), sending);
|
||||||
}
|
}
|
||||||
return 0;
|
return 0;
|
||||||
|
@ -281,7 +281,7 @@ class RtpRtcpInterface : public RtcpFeedbackSenderInterface {
|
|||||||
// Returns the FlexFEC SSRC, if there is one.
|
// Returns the FlexFEC SSRC, if there is one.
|
||||||
virtual absl::optional<uint32_t> FlexfecSsrc() const = 0;
|
virtual absl::optional<uint32_t> FlexfecSsrc() const = 0;
|
||||||
|
|
||||||
// Sets sending status.
|
// Sets sending status. Sends kRtcpByeCode when going from true to false.
|
||||||
// Returns -1 on failure else 0.
|
// Returns -1 on failure else 0.
|
||||||
virtual int32_t SetSendingStatus(bool sending) = 0;
|
virtual int32_t SetSendingStatus(bool sending) = 0;
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user