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:
Philipp Hancke
2022-09-15 11:11:20 +00:00
committed by WebRTC LUCI CQ
parent 2720dc5b3b
commit 03e6cccc28
5 changed files with 23 additions and 5 deletions

View File

@ -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) {

View File

@ -213,8 +213,23 @@ 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) {

View File

@ -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) {

View File

@ -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;

View File

@ -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;