Avoid sending empty receiver reports with RtcpTransceiver
Bug: None Change-Id: Ia017c2df285febefb72ba88ba43366455bde5a78 Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/222402 Reviewed-by: Per Kjellander <perkj@webrtc.org> Commit-Queue: Danil Chapovalov <danilchap@webrtc.org> Cr-Commit-Position: refs/heads/master@{#34281}
This commit is contained in:
parent
8b6929081e
commit
e5f1a3992e
@ -355,9 +355,12 @@ void RtcpTransceiverImpl::CreateCompoundPacket(PacketSender* sender) {
|
||||
rtcp::ReceiverReport receiver_report;
|
||||
receiver_report.SetSenderSsrc(sender_ssrc);
|
||||
receiver_report.SetReportBlocks(CreateReportBlocks(now));
|
||||
sender->AppendPacket(receiver_report);
|
||||
if (config_.rtcp_mode == RtcpMode::kCompound ||
|
||||
!receiver_report.report_blocks().empty()) {
|
||||
sender->AppendPacket(receiver_report);
|
||||
}
|
||||
|
||||
if (!config_.cname.empty()) {
|
||||
if (!config_.cname.empty() && !sender->IsEmpty()) {
|
||||
rtcp::Sdes sdes;
|
||||
bool added = sdes.AddCName(config_.feedback_ssrc, config_.cname);
|
||||
RTC_DCHECK(added) << "Failed to add cname " << config_.cname
|
||||
|
||||
@ -38,6 +38,7 @@ namespace {
|
||||
|
||||
using ::testing::_;
|
||||
using ::testing::ElementsAre;
|
||||
using ::testing::NiceMock;
|
||||
using ::testing::Return;
|
||||
using ::testing::SizeIs;
|
||||
using ::testing::StrictMock;
|
||||
@ -392,6 +393,47 @@ TEST(RtcpTransceiverImplTest, SendsMinimalCompoundPacket) {
|
||||
EXPECT_EQ(rtcp_parser.sdes()->chunks()[0].cname, config.cname);
|
||||
}
|
||||
|
||||
TEST(RtcpTransceiverImplTest, AvoidsEmptyPacketsInReducedMode) {
|
||||
MockTransport transport;
|
||||
EXPECT_CALL(transport, SendRtcp).Times(0);
|
||||
NiceMock<MockReceiveStatisticsProvider> receive_statistics;
|
||||
SimulatedClock clock(0);
|
||||
|
||||
RtcpTransceiverConfig config = DefaultTestConfig();
|
||||
config.clock = &clock;
|
||||
config.outgoing_transport = &transport;
|
||||
config.rtcp_mode = webrtc::RtcpMode::kReducedSize;
|
||||
config.schedule_periodic_compound_packets = false;
|
||||
config.receive_statistics = &receive_statistics;
|
||||
RtcpTransceiverImpl rtcp_transceiver(config);
|
||||
|
||||
rtcp_transceiver.SendCompoundPacket();
|
||||
}
|
||||
|
||||
TEST(RtcpTransceiverImplTest, AvoidsEmptyReceiverReportsInReducedMode) {
|
||||
RtcpPacketParser rtcp_parser;
|
||||
RtcpParserTransport transport(&rtcp_parser);
|
||||
NiceMock<MockReceiveStatisticsProvider> receive_statistics;
|
||||
SimulatedClock clock(0);
|
||||
|
||||
RtcpTransceiverConfig config = DefaultTestConfig();
|
||||
config.clock = &clock;
|
||||
config.outgoing_transport = &transport;
|
||||
config.rtcp_mode = webrtc::RtcpMode::kReducedSize;
|
||||
config.schedule_periodic_compound_packets = false;
|
||||
config.receive_statistics = &receive_statistics;
|
||||
// Set it to produce something (RRTR) in the "periodic" rtcp packets.
|
||||
config.non_sender_rtt_measurement = true;
|
||||
RtcpTransceiverImpl rtcp_transceiver(config);
|
||||
|
||||
// Rather than waiting for the right time to produce the periodic packet,
|
||||
// trigger it manually.
|
||||
rtcp_transceiver.SendCompoundPacket();
|
||||
|
||||
EXPECT_EQ(rtcp_parser.receiver_report()->num_packets(), 0);
|
||||
EXPECT_GT(rtcp_parser.xr()->num_packets(), 0);
|
||||
}
|
||||
|
||||
TEST(RtcpTransceiverImplTest, SendsNoRembInitially) {
|
||||
const uint32_t kSenderSsrc = 12345;
|
||||
SimulatedClock clock(0);
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user