Avoid sending empty receiver reports with RTCPSender

in reduced size mode, i.e. when rtcp-rsize sdp attribute is negotiated

Bug: webrtc:13833
Change-Id: I55fa5248d3f66dc2240d7a6fbbb399319f1a2e03
Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/256004
Reviewed-by: Åsa Persson <asapersson@webrtc.org>
Commit-Queue: Danil Chapovalov <danilchap@webrtc.org>
Cr-Commit-Position: refs/heads/main@{#36246}
This commit is contained in:
Danil Chapovalov
2022-03-17 19:31:32 +01:00
committed by WebRTC LUCI CQ
parent 66ddd5ab6d
commit 017a606836
2 changed files with 13 additions and 4 deletions

View File

@ -484,7 +484,9 @@ void RTCPSender::BuildRR(const RtcpContext& ctx, PacketSender& sender) {
rtcp::ReceiverReport report; rtcp::ReceiverReport report;
report.SetSenderSsrc(ssrc_); report.SetSenderSsrc(ssrc_);
report.SetReportBlocks(CreateReportBlocks(ctx.feedback_state_)); report.SetReportBlocks(CreateReportBlocks(ctx.feedback_state_));
if (method_ == RtcpMode::kCompound || !report.report_blocks().empty()) {
sender.AppendPacket(report); sender.AppendPacket(report);
}
} }
void RTCPSender::BuildPLI(const RtcpContext& ctx, PacketSender& sender) { void RTCPSender::BuildPLI(const RtcpContext& ctx, PacketSender& sender) {

View File

@ -252,13 +252,20 @@ TEST_F(RtcpSenderTest, DoNotSendCompundBeforeRtp) {
TEST_F(RtcpSenderTest, SendRr) { TEST_F(RtcpSenderTest, SendRr) {
auto rtcp_sender = CreateRtcpSender(GetDefaultConfig()); auto rtcp_sender = CreateRtcpSender(GetDefaultConfig());
rtcp_sender->SetRTCPStatus(RtcpMode::kReducedSize); rtcp_sender->SetRTCPStatus(RtcpMode::kCompound);
EXPECT_EQ(0, rtcp_sender->SendRTCP(feedback_state(), kRtcpRr)); EXPECT_EQ(0, rtcp_sender->SendRTCP(feedback_state(), kRtcpRr));
EXPECT_EQ(1, parser()->receiver_report()->num_packets()); EXPECT_EQ(1, parser()->receiver_report()->num_packets());
EXPECT_EQ(kSenderSsrc, parser()->receiver_report()->sender_ssrc()); EXPECT_EQ(kSenderSsrc, parser()->receiver_report()->sender_ssrc());
EXPECT_EQ(0U, parser()->receiver_report()->report_blocks().size()); EXPECT_EQ(0U, parser()->receiver_report()->report_blocks().size());
} }
TEST_F(RtcpSenderTest, DoesntSendEmptyRrInReducedSizeMode) {
auto rtcp_sender = CreateRtcpSender(GetDefaultConfig());
rtcp_sender->SetRTCPStatus(RtcpMode::kReducedSize);
rtcp_sender->SendRTCP(feedback_state(), kRtcpRr);
EXPECT_EQ(parser()->receiver_report()->num_packets(), 0);
}
TEST_F(RtcpSenderTest, SendRrWithOneReportBlock) { TEST_F(RtcpSenderTest, SendRrWithOneReportBlock) {
const uint16_t kSeqNum = 11111; const uint16_t kSeqNum = 11111;
auto rtcp_sender = CreateRtcpSender(GetDefaultConfig()); auto rtcp_sender = CreateRtcpSender(GetDefaultConfig());
@ -415,7 +422,7 @@ TEST_F(RtcpSenderTest, SendLossNotificationBufferingAllowed) {
TEST_F(RtcpSenderTest, RembNotIncludedBeforeSet) { TEST_F(RtcpSenderTest, RembNotIncludedBeforeSet) {
auto rtcp_sender = CreateRtcpSender(GetDefaultConfig()); auto rtcp_sender = CreateRtcpSender(GetDefaultConfig());
rtcp_sender->SetRTCPStatus(RtcpMode::kReducedSize); rtcp_sender->SetRTCPStatus(RtcpMode::kCompound);
rtcp_sender->SendRTCP(feedback_state(), kRtcpRr); rtcp_sender->SendRTCP(feedback_state(), kRtcpRr);
@ -427,7 +434,7 @@ TEST_F(RtcpSenderTest, RembNotIncludedAfterUnset) {
const int64_t kBitrate = 261011; const int64_t kBitrate = 261011;
const std::vector<uint32_t> kSsrcs = {kRemoteSsrc, kRemoteSsrc + 1}; const std::vector<uint32_t> kSsrcs = {kRemoteSsrc, kRemoteSsrc + 1};
auto rtcp_sender = CreateRtcpSender(GetDefaultConfig()); auto rtcp_sender = CreateRtcpSender(GetDefaultConfig());
rtcp_sender->SetRTCPStatus(RtcpMode::kReducedSize); rtcp_sender->SetRTCPStatus(RtcpMode::kCompound);
rtcp_sender->SetRemb(kBitrate, kSsrcs); rtcp_sender->SetRemb(kBitrate, kSsrcs);
rtcp_sender->SendRTCP(feedback_state(), kRtcpRr); rtcp_sender->SendRTCP(feedback_state(), kRtcpRr);
ASSERT_EQ(1, parser()->receiver_report()->num_packets()); ASSERT_EQ(1, parser()->receiver_report()->num_packets());