Adds a field trial parameter to configure waiting time before sending Nack packets.
Currently we send Nack as soon as we see packets out of order(a skip in packet sequence number). Sometimes this is not necessary because these "missing" packets just late for a couple of millisecond, or these packets can be recovered by FEC. This CL add a field trial parameter to configure a delay before sending Nack. Bug: webrtc:9953 Change-Id: Ia8f5995d874f7c55a74091bc90d8395b9b88e66b Reviewed-on: https://webrtc-review.googlesource.com/c/109080 Reviewed-by: Stefan Holmer <stefan@webrtc.org> Reviewed-by: Philip Eliasson <philipel@webrtc.org> Commit-Queue: Ying Wang <yinwa@webrtc.org> Cr-Commit-Position: refs/heads/master@{#25488}
This commit is contained in:
@ -14,6 +14,7 @@
|
||||
#include "modules/video_coding/include/video_coding_defines.h"
|
||||
#include "modules/video_coding/nack_module.h"
|
||||
#include "system_wrappers/include/clock.h"
|
||||
#include "test/field_trial.h"
|
||||
#include "test/gtest.h"
|
||||
|
||||
namespace webrtc {
|
||||
@ -285,4 +286,45 @@ TEST_F(TestNackModule, HandleFecRecoveredPacket) {
|
||||
EXPECT_EQ(2u, sent_nacks_.size());
|
||||
}
|
||||
|
||||
TEST_F(TestNackModule, SendNackWithoutDelay) {
|
||||
nack_module_.OnReceivedPacket(0, false, false);
|
||||
nack_module_.OnReceivedPacket(100, false, false);
|
||||
EXPECT_EQ(99u, sent_nacks_.size());
|
||||
}
|
||||
|
||||
class TestNackModuleWithFieldTrial : public ::testing::Test,
|
||||
public NackSender,
|
||||
public KeyFrameRequestSender {
|
||||
protected:
|
||||
TestNackModuleWithFieldTrial()
|
||||
: nack_delay_field_trial_("WebRTC-SendNackDelayMs/10/"),
|
||||
clock_(new SimulatedClock(0)),
|
||||
nack_module_(clock_.get(), this, this),
|
||||
keyframes_requested_(0) {}
|
||||
|
||||
void SendNack(const std::vector<uint16_t>& sequence_numbers) override {
|
||||
sent_nacks_.insert(sent_nacks_.end(), sequence_numbers.begin(),
|
||||
sequence_numbers.end());
|
||||
}
|
||||
|
||||
void RequestKeyFrame() override { ++keyframes_requested_; }
|
||||
|
||||
test::ScopedFieldTrials nack_delay_field_trial_;
|
||||
std::unique_ptr<SimulatedClock> clock_;
|
||||
NackModule nack_module_;
|
||||
std::vector<uint16_t> sent_nacks_;
|
||||
int keyframes_requested_;
|
||||
};
|
||||
|
||||
TEST_F(TestNackModuleWithFieldTrial, SendNackWithDelay) {
|
||||
nack_module_.OnReceivedPacket(0, false, false);
|
||||
nack_module_.OnReceivedPacket(100, false, false);
|
||||
EXPECT_EQ(0u, sent_nacks_.size());
|
||||
clock_->AdvanceTimeMilliseconds(10);
|
||||
nack_module_.OnReceivedPacket(106, false, false);
|
||||
EXPECT_EQ(99u, sent_nacks_.size());
|
||||
clock_->AdvanceTimeMilliseconds(10);
|
||||
nack_module_.OnReceivedPacket(109, false, false);
|
||||
EXPECT_EQ(104u, sent_nacks_.size());
|
||||
}
|
||||
} // namespace webrtc
|
||||
|
||||
Reference in New Issue
Block a user