diff --git a/webrtc/modules/rtp_rtcp/source/rtp_sender.cc b/webrtc/modules/rtp_rtcp/source/rtp_sender.cc index 931f9e39a2..1b6df005d6 100644 --- a/webrtc/modules/rtp_rtcp/source/rtp_sender.cc +++ b/webrtc/modules/rtp_rtcp/source/rtp_sender.cc @@ -29,6 +29,7 @@ #include "webrtc/modules/rtp_rtcp/source/rtp_sender_audio.h" #include "webrtc/modules/rtp_rtcp/source/rtp_sender_video.h" #include "webrtc/modules/rtp_rtcp/source/time_util.h" +#include "webrtc/system_wrappers/include/field_trial.h" namespace webrtc { @@ -1293,10 +1294,16 @@ void RTPSender::SetTransportOverhead(int transport_overhead) { void RTPSender::AddPacketToTransportFeedback(uint16_t packet_id, const RtpPacketToSend& packet, int probe_cluster_id) { + size_t packet_size = packet.payload_size() + packet.padding_size(); + if (webrtc::field_trial::FindFullName("WebRTC-SendSideBwe-WithOverhead") == + "Enabled") { + rtc::CritScope lock(&send_critsect_); + packet_size = packet.size() + transport_overhead_bytes_per_packet_; + } + if (transport_feedback_observer_) { - transport_feedback_observer_->AddPacket( - packet_id, packet.payload_size() + packet.padding_size(), - probe_cluster_id); + transport_feedback_observer_->AddPacket(packet_id, packet_size, + probe_cluster_id); } } diff --git a/webrtc/modules/rtp_rtcp/source/rtp_sender_unittest.cc b/webrtc/modules/rtp_rtcp/source/rtp_sender_unittest.cc index a9e9485e5c..69c1c00807 100644 --- a/webrtc/modules/rtp_rtcp/source/rtp_sender_unittest.cc +++ b/webrtc/modules/rtp_rtcp/source/rtp_sender_unittest.cc @@ -27,6 +27,7 @@ #include "webrtc/modules/rtp_rtcp/source/rtp_sender_video.h" #include "webrtc/modules/rtp_rtcp/source/rtp_utility.h" #include "webrtc/system_wrappers/include/stl_util.h" +#include "webrtc/test/field_trial.h" #include "webrtc/test/gmock.h" #include "webrtc/test/gtest.h" #include "webrtc/test/mock_transport.h" @@ -1428,4 +1429,34 @@ TEST_F(RtpSenderTest, DoesNotUpdateOverheadOnEqualSize) { SendGenericPayload(); } +TEST_F(RtpSenderTest, AddOverheadToTransportFeedbackObserver) { + constexpr int kTransportOverheadBytesPerPacket = 28; + constexpr int kRtpOverheadBytesPerPacket = 12 + 8; + test::ScopedFieldTrials override_field_trials( + "WebRTC-SendSideBwe-WithOverhead/Enabled/"); + testing::NiceMock mock_overhead_observer; + rtp_sender_.reset(new RTPSender( + false, &fake_clock_, &transport_, nullptr, nullptr, &seq_num_allocator_, + &feedback_observer_, nullptr, nullptr, nullptr, &mock_rtc_event_log_, + nullptr, &retransmission_rate_limiter_, &mock_overhead_observer)); + rtp_sender_->SetTransportOverhead(kTransportOverheadBytesPerPacket); + EXPECT_EQ(0, rtp_sender_->RegisterRtpHeaderExtension( + kRtpExtensionTransportSequenceNumber, + kTransportSequenceNumberExtensionId)); + EXPECT_CALL(seq_num_allocator_, AllocateSequenceNumber()) + .WillOnce(testing::Return(kTransportSequenceNumber)); + EXPECT_CALL(feedback_observer_, + AddPacket(kTransportSequenceNumber, + sizeof(kPayloadData) + kGenericHeaderLength + + kRtpOverheadBytesPerPacket + + kTransportOverheadBytesPerPacket, + PacketInfo::kNotAProbe)) + .Times(1); + EXPECT_CALL(mock_overhead_observer, + OnOverheadChanged(kTransportOverheadBytesPerPacket + + kRtpOverheadBytesPerPacket)) + .Times(1); + SendGenericPayload(); +} + } // namespace webrtc