for (size_t k = 0; k < nack_list.size(); ++k) { int seq_num = nack_list[k]; bool seq_num_matched = false; for (size_t n = 0; n < num_lost_packets; ++n) { if (seq_num == lost_sequence_numbers[n]) {
seq_num_matched = true; break;
}
} if (!seq_num_matched) returnfalse;
} returntrue;
}
for (int k = 0; k < 2; k++) { // Two iteration with/without wrap around.
NackTracker nack(kDefaultNackListSize);
nack.UpdateSampleRate(kSampleRateHz);
uint16_t sequence_num_lost_packets[kNumAllLostPackets]; for (int n = 0; n < kNumAllLostPackets; n++) {
sequence_num_lost_packets[n] =
kSequenceNumberLostPackets[n] +
k * 65531; // Have wrap around in sequence numbers for |k == 1|.
}
uint16_t seq_num = sequence_num_lost_packets[0] - 1;
for (int k = 0; k < 2; ++k) { // Two iteration with/without wrap around.
NackTracker nack(kDefaultNackListSize);
nack.UpdateSampleRate(kSampleRateHz);
uint16_t sequence_num_lost_packets[kNumAllLostPackets]; for (int n = 0; n < kNumAllLostPackets; ++n) {
sequence_num_lost_packets[n] = kSequenceNumberLostPackets[n] +
k * 65531; // Wrap around for |k == 1|.
}
seq_num = sequence_num_lost_packets[kNumAllLostPackets - 1] + 1;
timestamp += kTimestampIncrement * (kNumAllLostPackets + 1);
size_t num_lost_packets = kNumAllLostPackets; for (int n = 0; n < kNumAllLostPackets; ++n) { // Number of lost packets does not change for the first // |kNackThreshold + 1| packets, one is added to the list and one is // removed. Thereafter, the list shrinks every iteration. if (n >= 1)
num_lost_packets--;
// Retransmission of a lost RTP.
nack.UpdateLastReceivedPacket(
sequence_num_lost_packets[index_retransmitted_rtp],
timestamp_retransmitted_rtp);
index_retransmitted_rtp++;
timestamp_retransmitted_rtp += kTimestampIncrement;
nack_list = nack.GetNackList(kShortRoundTripTime);
EXPECT_TRUE(IsNackListCorrect(
nack_list, &sequence_num_lost_packets[index_retransmitted_rtp],
num_lost_packets - 1)); // One less lost packet in the list.
}
ASSERT_TRUE(nack_list.empty());
}
}
// Two consecutive packets to have a correct estimate of timestamp increase.
uint16_t seq_num = 0;
nack.UpdateLastReceivedPacket(seq_num, seq_num * kTimestampIncrement);
seq_num++;
nack.UpdateLastReceivedPacket(seq_num, seq_num * kTimestampIncrement);
TEST(NackTrackerTest, FixedDelayMode) { constint kNackListSize = 200;
NackTracker nack(kNackListSize);
nack.UpdateSampleRate(kSampleRateHz);
uint16_t seq_num = 0;
uint32_t timestamp = 0x87654321;
nack.UpdateLastReceivedPacket(seq_num, timestamp);
nack.UpdateLastReceivedPacket(seq_num + 2,
timestamp + 2 * kTimestampIncrement);
EXPECT_THAT(nack.GetNackList(kShortRoundTripTime), ElementsAre(seq_num + 1)); // The RTT is larger than the fixed delay, so no packets should be NACKed.
EXPECT_THAT(nack.GetNackList(TimeDelta::Seconds(1)), IsEmpty());
// Update the latest received packet such that the lost packet is older than // the fixed delay.
nack.UpdateLastReceivedPacket(
seq_num + 3, timestamp + 2 * kTimestampIncrement + kSampleRateHz);
EXPECT_THAT(nack.GetNackList(kShortRoundTripTime), IsEmpty());
}
} // namespace webrtc
Messung V0.5 in Prozent
¤ Dauer der Verarbeitung: 0.1 Sekunden
(vorverarbeitet am 2026-09-30)
¤
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.