mediasoup 3.28.0 → 3.29.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (155) hide show
  1. package/CHANGELOG.md +12 -0
  2. package/node/lib/PipeTransportTypes.d.ts +6 -1
  3. package/node/lib/PipeTransportTypes.d.ts.map +1 -1
  4. package/node/lib/PlainTransportTypes.d.ts +6 -1
  5. package/node/lib/PlainTransportTypes.d.ts.map +1 -1
  6. package/node/lib/Router.d.ts +4 -4
  7. package/node/lib/Router.d.ts.map +1 -1
  8. package/node/lib/Router.js +10 -7
  9. package/node/lib/RouterTypes.d.ts +7 -1
  10. package/node/lib/RouterTypes.d.ts.map +1 -1
  11. package/node/lib/Transport.d.ts +2 -1
  12. package/node/lib/Transport.d.ts.map +1 -1
  13. package/node/lib/Transport.js +17 -6
  14. package/node/lib/TransportTypes.d.ts +12 -2
  15. package/node/lib/TransportTypes.d.ts.map +1 -1
  16. package/node/lib/WebRtcTransportTypes.d.ts +6 -1
  17. package/node/lib/WebRtcTransportTypes.d.ts.map +1 -1
  18. package/node/lib/fbs/transport/options.d.ts +6 -2
  19. package/node/lib/fbs/transport/options.d.ts.map +1 -1
  20. package/node/lib/fbs/transport/options.js +19 -7
  21. package/node/lib/fbs/transport/sctp-zero-checksum.d.ts +6 -0
  22. package/node/lib/fbs/transport/sctp-zero-checksum.d.ts.map +1 -0
  23. package/node/lib/fbs/transport/sctp-zero-checksum.js +11 -0
  24. package/node/lib/fbs/transport/stats.d.ts +2 -8
  25. package/node/lib/fbs/transport/stats.d.ts.map +1 -1
  26. package/node/lib/fbs/transport/stats.js +5 -29
  27. package/node/lib/fbs/transport.d.ts +1 -0
  28. package/node/lib/fbs/transport.d.ts.map +1 -1
  29. package/node/lib/fbs/transport.js +4 -2
  30. package/npm-scripts.mjs +35 -44
  31. package/package.json +10 -6
  32. package/worker/fbs/transport.fbs +9 -2
  33. package/worker/fuzzer/src/RTC/RTP/FuzzerRetransmissionBuffer.cpp +14 -1
  34. package/worker/fuzzer/src/RTC/RTP/FuzzerRtpStreamSend.cpp +17 -4
  35. package/worker/include/RTC/BWE/AimdRateControl.hpp +9 -9
  36. package/worker/include/RTC/BWE/BweTypes.hpp +54 -17
  37. package/worker/include/RTC/BWE/DelayBasedBwe.hpp +3 -3
  38. package/worker/include/RTC/BWE/FeedbackAdapter.hpp +2 -2
  39. package/worker/include/RTC/BWE/LossBasedController.hpp +4 -4
  40. package/worker/include/RTC/BWE/OveruseDetector.hpp +5 -4
  41. package/worker/include/RTC/BWE/ProbeBitrateEstimator.hpp +1 -1
  42. package/worker/include/RTC/BWE/ProbeController.hpp +6 -6
  43. package/worker/include/RTC/BWE/ProbePacketGenerator.hpp +2 -6
  44. package/worker/include/RTC/BWE/ProbingScheduler.hpp +3 -7
  45. package/worker/include/RTC/BWE/ReceiverTransportCongestionController.hpp +148 -0
  46. package/worker/include/RTC/BWE/RembGenerator.hpp +4 -3
  47. package/worker/include/RTC/BWE/RemoteBitrateEstimatorAbsSendTime.hpp +1 -1
  48. package/worker/include/RTC/BWE/SenderTransportCongestionController.hpp +343 -0
  49. package/worker/include/RTC/BWE/TargetRateController.hpp +4 -1
  50. package/worker/include/RTC/BWE/TransportWideCcFeedbackGenerator.hpp +5 -4
  51. package/worker/include/RTC/BWE/TrendlineEstimator.hpp +3 -3
  52. package/worker/include/RTC/Consumer.hpp +8 -1
  53. package/worker/include/RTC/RTP/RetransmissionBuffer.hpp +36 -10
  54. package/worker/include/RTC/RTP/RtpStream.hpp +21 -0
  55. package/worker/include/RTC/RTP/RtpStreamRecv.hpp +1 -0
  56. package/worker/include/RTC/RTP/RtpStreamSend.hpp +122 -9
  57. package/worker/include/RTC/SCTP/packet/parameters/ZeroChecksumAcceptableParameter.hpp +12 -3
  58. package/worker/include/RTC/TransportCongestionControlClient.hpp +0 -5
  59. package/worker/include/RTC/TransportCongestionControlServer.hpp +0 -5
  60. package/worker/include/Utils.hpp +9 -2
  61. package/worker/meson.build +4 -0
  62. package/worker/src/RTC/BWE/AimdRateControl.cpp +22 -22
  63. package/worker/src/RTC/BWE/DelayBasedBwe.cpp +16 -20
  64. package/worker/src/RTC/BWE/FeedbackAdapter.cpp +1 -1
  65. package/worker/src/RTC/BWE/OveruseDetector.cpp +8 -8
  66. package/worker/src/RTC/BWE/ProbeBitrateEstimator.cpp +2 -2
  67. package/worker/src/RTC/BWE/ProbeController.cpp +1 -1
  68. package/worker/src/RTC/BWE/ProbePacketGenerator.cpp +1 -6
  69. package/worker/src/RTC/BWE/ProbingScheduler.cpp +2 -7
  70. package/worker/src/RTC/BWE/ReceiverTransportCongestionController.cpp +207 -0
  71. package/worker/src/RTC/BWE/RembGenerator.cpp +1 -1
  72. package/worker/src/RTC/BWE/RemoteBitrateEstimatorAbsSendTime.cpp +1 -1
  73. package/worker/src/RTC/BWE/SenderTransportCongestionController.cpp +599 -0
  74. package/worker/src/RTC/BWE/TransportWideCcFeedbackGenerator.cpp +2 -3
  75. package/worker/src/RTC/BWE/TrendlineEstimator.cpp +5 -5
  76. package/worker/src/RTC/Consumer.cpp +3 -2
  77. package/worker/src/RTC/DataConsumer.cpp +2 -2
  78. package/worker/src/RTC/RTP/RetransmissionBuffer.cpp +21 -8
  79. package/worker/src/RTC/RTP/RtpStream.cpp +0 -3
  80. package/worker/src/RTC/RTP/RtpStreamRecv.cpp +57 -71
  81. package/worker/src/RTC/RTP/RtpStreamSend.cpp +428 -244
  82. package/worker/src/RTC/RTP/RtxStream.cpp +14 -19
  83. package/worker/src/RTC/SCTP/association/Association.cpp +3 -2
  84. package/worker/src/RTC/SCTP/association/StateCookie.cpp +26 -6
  85. package/worker/src/RTC/SCTP/packet/parameters/ZeroChecksumAcceptableParameter.cpp +4 -3
  86. package/worker/src/RTC/SCTP/rx/ReassemblyQueue.cpp +2 -1
  87. package/worker/src/RTC/SCTP/tx/RetransmissionQueue.cpp +4 -2
  88. package/worker/src/RTC/Transport.cpp +49 -20
  89. package/worker/src/RTC/TransportCongestionControlClient.cpp +0 -66
  90. package/worker/src/RTC/TransportCongestionControlServer.cpp +0 -55
  91. package/worker/src/Utils/Crypto.cpp +114 -98
  92. package/worker/subprojects/catch2.wrap +6 -6
  93. package/worker/subprojects/openssl.wrap +11 -12
  94. package/worker/subprojects/packagefiles/ankerl-unordered-dense/meson.build +1 -1
  95. package/worker/subprojects/unordered-dense.wrap +4 -4
  96. package/worker/test/src/RTC/BWE/TestDelayBasedBwe.cpp +5 -5
  97. package/worker/test/src/RTC/BWE/TestFeedbackAdapter.cpp +26 -23
  98. package/worker/test/src/RTC/BWE/TestInterArrivalDelta.cpp +8 -8
  99. package/worker/test/src/RTC/BWE/TestOveruseDetector.cpp +4 -4
  100. package/worker/test/src/RTC/BWE/TestProbeController.cpp +35 -32
  101. package/worker/test/src/RTC/BWE/TestProbePacketGenerator.cpp +2 -17
  102. package/worker/test/src/RTC/BWE/TestProbingScheduler.cpp +1 -25
  103. package/worker/test/src/RTC/BWE/TestReceiverTransportCongestionController.cpp +346 -0
  104. package/worker/test/src/RTC/BWE/TestRembGenerator.cpp +1 -1
  105. package/worker/test/src/RTC/BWE/TestRemoteBitrateEstimatorAbsSendTime.cpp +9 -9
  106. package/worker/test/src/RTC/BWE/TestSenderTransportCongestionController.cpp +510 -0
  107. package/worker/test/src/RTC/BWE/TestTransportWideCcFeedbackGenerator.cpp +16 -14
  108. package/worker/test/src/RTC/BWE/TestTrendlineEstimator.cpp +6 -6
  109. package/worker/test/src/RTC/BWE/helpers/RemoteBitrateEstimatorAbsSendTimeTestHelper.cpp +1 -2
  110. package/worker/test/src/RTC/RTCP/TestBye.cpp +1 -1
  111. package/worker/test/src/RTC/RTCP/TestFeedbackPsAfb.cpp +1 -1
  112. package/worker/test/src/RTC/RTCP/TestFeedbackPsFir.cpp +1 -1
  113. package/worker/test/src/RTC/RTCP/TestFeedbackPsLei.cpp +1 -1
  114. package/worker/test/src/RTC/RTCP/TestFeedbackPsPli.cpp +1 -1
  115. package/worker/test/src/RTC/RTCP/TestFeedbackPsRemb.cpp +1 -1
  116. package/worker/test/src/RTC/RTCP/TestFeedbackPsRpsi.cpp +1 -1
  117. package/worker/test/src/RTC/RTCP/TestFeedbackPsSli.cpp +1 -1
  118. package/worker/test/src/RTC/RTCP/TestFeedbackPsTst.cpp +1 -1
  119. package/worker/test/src/RTC/RTCP/TestFeedbackPsVbcm.cpp +1 -1
  120. package/worker/test/src/RTC/RTCP/TestFeedbackRtpEcn.cpp +1 -1
  121. package/worker/test/src/RTC/RTCP/TestFeedbackRtpNack.cpp +1 -1
  122. package/worker/test/src/RTC/RTCP/TestFeedbackRtpSrReq.cpp +1 -1
  123. package/worker/test/src/RTC/RTCP/TestFeedbackRtpTllei.cpp +1 -1
  124. package/worker/test/src/RTC/RTCP/TestFeedbackRtpTmmb.cpp +1 -1
  125. package/worker/test/src/RTC/RTCP/TestFeedbackRtpTransport.cpp +1 -1
  126. package/worker/test/src/RTC/RTCP/TestReceiverReport.cpp +1 -1
  127. package/worker/test/src/RTC/RTCP/TestSenderReport.cpp +1 -1
  128. package/worker/test/src/RTC/RTP/TestRetransmissionBuffer.cpp +60 -28
  129. package/worker/test/src/RTC/RTP/TestRtpStreamRecv.cpp +1 -1
  130. package/worker/test/src/RTC/RTP/TestRtpStreamSend.cpp +746 -24
  131. package/worker/test/src/RTC/RTP/TestSharedPacket.cpp +1 -1
  132. package/worker/test/src/RTC/SCTP/association/TestAssociation.cpp +42 -0
  133. package/worker/test/src/RTC/SCTP/association/TestNegotiatedCapabilities.cpp +54 -5
  134. package/worker/test/src/RTC/SCTP/association/TestStateCookie.cpp +80 -15
  135. package/worker/test/src/RTC/SCTP/association/TestStreamResetHandler.cpp +410 -3
  136. package/worker/test/src/RTC/SCTP/association/TestTransmissionControlBlock.cpp +1 -1
  137. package/worker/test/src/RTC/SCTP/packet/parameters/TestZeroChecksumAcceptableParameter.cpp +37 -5
  138. package/worker/test/src/RTC/SCTP/rx/TestDataTracker.cpp +5 -4
  139. package/worker/test/src/RTC/SCTP/rx/TestInterleavedReassemblyStreams.cpp +1 -1
  140. package/worker/test/src/RTC/SCTP/rx/TestReassemblyQueue.cpp +1 -1
  141. package/worker/test/src/RTC/SCTP/rx/TestTraditionalReassemblyStreams.cpp +1 -1
  142. package/worker/test/src/RTC/SCTP/tx/TestOutstandingData.cpp +1 -1
  143. package/worker/test/src/RTC/SCTP/tx/TestRetransmissionQueue.cpp +11 -10
  144. package/worker/test/src/RTC/SCTP/tx/TestRetransmissionTimeout.cpp +1 -1
  145. package/worker/test/src/RTC/TestNackGenerator.cpp +1 -1
  146. package/worker/test/src/RTC/TestPortManager.cpp +2 -2
  147. package/worker/test/src/RTC/TestRateCalculator.cpp +1 -1
  148. package/worker/test/src/RTC/TestRemoteCaptureTimeEstimator.cpp +21 -15
  149. package/worker/test/src/RTC/TestRemoteClockOffsetEstimator.cpp +13 -13
  150. package/worker/test/src/RTC/TestRtpEncodingParameters.cpp +1 -1
  151. package/worker/test/src/RTC/TestSubchannelsCodec.cpp +2 -2
  152. package/worker/test/src/RTC/TestTransportCongestionControlServer.cpp +1 -1
  153. package/worker/test/src/RTC/TestTransportTuple.cpp +3 -2
  154. package/worker/test/src/Utils/TestCrypto.cpp +71 -2
  155. package/worker/test/src/Utils/TestTime.cpp +2 -2
@@ -25,7 +25,7 @@ SCENARIO("RTCP Feedback PS FIR", "[rtcp][feedback-ps][fir]")
25
25
  const uint8_t seq{ 4 };
26
26
 
27
27
  // NOTE: No need to pass const integers to the lambda.
28
- auto verify = [](RTC::RTCP::FeedbackPsFirPacket* packet)
28
+ const auto verify = [](RTC::RTCP::FeedbackPsFirPacket* packet)
29
29
  {
30
30
  REQUIRE(packet->GetSenderSsrc() == senderSsrc);
31
31
  REQUIRE(packet->GetMediaSsrc() == mediaSsrc);
@@ -23,7 +23,7 @@ SCENARIO("RTCP Feedback PS LEI", "[rtcp][feedback-ps][lei]")
23
23
  const uint32_t ssrc{ 0x02d03702 };
24
24
 
25
25
  // NOTE: No need to pass const integers to the lambda.
26
- auto verify = [](RTC::RTCP::FeedbackPsLeiPacket* packet)
26
+ const auto verify = [](RTC::RTCP::FeedbackPsLeiPacket* packet)
27
27
  {
28
28
  REQUIRE(packet->GetSenderSsrc() == senderSsrc);
29
29
  REQUIRE(packet->GetMediaSsrc() == mediaSsrc);
@@ -21,7 +21,7 @@ SCENARIO("RTCP Feedback RTP PLI", "[rtcp][feedback-ps][pli]")
21
21
  const uint32_t mediaSsrc{ 0x0330bdee };
22
22
 
23
23
  // NOTE: No need to pass const integers to the lambda.
24
- auto verify = [](RTC::RTCP::FeedbackPsPliPacket* packet)
24
+ const auto verify = [](RTC::RTCP::FeedbackPsPliPacket* packet)
25
25
  {
26
26
  REQUIRE(packet->GetSenderSsrc() == senderSsrc);
27
27
  REQUIRE(packet->GetMediaSsrc() == mediaSsrc);
@@ -27,7 +27,7 @@ SCENARIO("RTCP Feedback PS REMB", "[rtcp][feedback-ps][remb]")
27
27
  const std::vector<uint32_t> ssrcs{ 0x02d03702, 0x04a76747 };
28
28
 
29
29
  // NOTE: No need to pass const integers to the lambda.
30
- auto verify = [&ssrcs](RTC::RTCP::FeedbackPsRembPacket* packet)
30
+ const auto verify = [&ssrcs](RTC::RTCP::FeedbackPsRembPacket* packet)
31
31
  {
32
32
  REQUIRE(packet->GetSenderSsrc() == senderSsrc);
33
33
  REQUIRE(packet->GetMediaSsrc() == mediaSsrc);
@@ -28,7 +28,7 @@ SCENARIO("RTCP Feedback PS RPSI", "[rtcp][feedback-ps][rpsi]")
28
28
  const size_t length{ 5 };
29
29
 
30
30
  // NOTE: No need to pass const integers to the lambda.
31
- auto verify = [](RTC::RTCP::FeedbackPsRpsiPacket* packet)
31
+ const auto verify = [](RTC::RTCP::FeedbackPsRpsiPacket* packet)
32
32
  {
33
33
  REQUIRE(packet->GetSenderSsrc() == senderSsrc);
34
34
  REQUIRE(packet->GetMediaSsrc() == mediaSsrc);
@@ -25,7 +25,7 @@ SCENARIO("RTCP Feedback PS SLI", "[rtcp][feedback-ps][sli]")
25
25
  const uint8_t pictureId{ 1 };
26
26
 
27
27
  // NOTE: No need to pass const integers to the lambda.
28
- auto verify = [](RTC::RTCP::FeedbackPsSliPacket* packet)
28
+ const auto verify = [](RTC::RTCP::FeedbackPsSliPacket* packet)
29
29
  {
30
30
  REQUIRE(packet->GetSenderSsrc() == senderSsrc);
31
31
  REQUIRE(packet->GetMediaSsrc() == mediaSsrc);
@@ -26,7 +26,7 @@ SCENARIO("RTCP Feedback PS TSTN", "[rtcp][feedback-ps][tstn]")
26
26
  const uint8_t index{ 1 };
27
27
 
28
28
  // NOTE: No need to pass const integers to the lambda.
29
- auto verify = [](RTC::RTCP::FeedbackPsTstnPacket* packet)
29
+ const auto verify = [](RTC::RTCP::FeedbackPsTstnPacket* packet)
30
30
  {
31
31
  REQUIRE(packet->GetSenderSsrc() == senderSsrc);
32
32
  REQUIRE(packet->GetMediaSsrc() == mediaSsrc);
@@ -32,7 +32,7 @@ SCENARIO("RTCP Feedback PS VBCM", "[rtcp][feedback-ps][vbcm]")
32
32
  const uint8_t valueMask{ 1 };
33
33
 
34
34
  // NOTE: No need to pass const integers to the lambda.
35
- auto verify = [](RTC::RTCP::FeedbackPsVbcmPacket* packet)
35
+ const auto verify = [](RTC::RTCP::FeedbackPsVbcmPacket* packet)
36
36
  {
37
37
  REQUIRE(packet->GetSenderSsrc() == senderSsrc);
38
38
  REQUIRE(packet->GetMediaSsrc() == mediaSsrc);
@@ -33,7 +33,7 @@ SCENARIO("RTCP Feedback RTP ECN", "[rtcp][feedback-rtp][ecn]")
33
33
  const uint16_t duplicatedPackets{ 1 };
34
34
 
35
35
  // NOTE: No need to pass const integers to the lambda.
36
- auto verify = [](RTC::RTCP::FeedbackRtpEcnPacket* packet)
36
+ const auto verify = [](RTC::RTCP::FeedbackRtpEcnPacket* packet)
37
37
  {
38
38
  REQUIRE(packet->GetSenderSsrc() == senderSsrc);
39
39
  REQUIRE(packet->GetMediaSsrc() == mediaSsrc);
@@ -24,7 +24,7 @@ SCENARIO("RTCP Feedback RTP NACK", "[rtcp][feedback-rtp][nack]")
24
24
  const uint16_t lostPacketBitmask{ 0x0003 };
25
25
 
26
26
  // NOTE: No need to pass const integers to the lambda.
27
- auto verify = [](RTC::RTCP::FeedbackRtpNackPacket* packet)
27
+ const auto verify = [](RTC::RTCP::FeedbackRtpNackPacket* packet)
28
28
  {
29
29
  REQUIRE(packet->GetSenderSsrc() == senderSsrc);
30
30
  REQUIRE(packet->GetMediaSsrc() == mediaSsrc);
@@ -21,7 +21,7 @@ SCENARIO("RTCP Feedback RTP SR-REQ", "[rtcp][feedback-rtp][sr-req]")
21
21
  const uint32_t mediaSsrc{ 0x0330bdee };
22
22
 
23
23
  // NOTE: No need to pass const integers to the lambda.
24
- auto verify = [](RTC::RTCP::FeedbackRtpSrReqPacket* packet)
24
+ const auto verify = [](RTC::RTCP::FeedbackRtpSrReqPacket* packet)
25
25
  {
26
26
  REQUIRE(packet->GetSenderSsrc() == senderSsrc);
27
27
  REQUIRE(packet->GetMediaSsrc() == mediaSsrc);
@@ -24,7 +24,7 @@ SCENARIO("RTCP Feedback RTP TLLEI", "[rtcp][feedback-rtp][tllei]")
24
24
  const uint16_t lostPacketBitmask{ 0b1010101001010101 };
25
25
 
26
26
  // NOTE: No need to pass const integers to the lambda.
27
- auto verify = [](RTC::RTCP::FeedbackRtpTlleiPacket* packet)
27
+ const auto verify = [](RTC::RTCP::FeedbackRtpTlleiPacket* packet)
28
28
  {
29
29
  REQUIRE(packet->GetSenderSsrc() == senderSsrc);
30
30
  REQUIRE(packet->GetMediaSsrc() == mediaSsrc);
@@ -26,7 +26,7 @@ SCENARIO("RTCP Feedback RTP TMMBR", "[rtcp][feedback-rtp][tmmb]")
26
26
  const uint16_t overhead{ 0 };
27
27
 
28
28
  // NOTE: No need to pass const integers to the lambda.
29
- auto verify = [](RTC::RTCP::FeedbackRtpTmmbrPacket* packet)
29
+ const auto verify = [](RTC::RTCP::FeedbackRtpTmmbrPacket* packet)
30
30
  {
31
31
  REQUIRE(packet->GetSenderSsrc() == senderSsrc);
32
32
  REQUIRE(packet->GetMediaSsrc() == mediaSsrc);
@@ -22,7 +22,7 @@ SCENARIO("RTCP Feedback RTP Transport", "[rtcp][feedback-rtp][transport]")
22
22
  const uint32_t senderSsrc{ 1111u };
23
23
  const uint32_t mediaSsrc{ 2222u };
24
24
 
25
- auto verify =
25
+ const auto verify =
26
26
  [](
27
27
  const std::vector<struct TestFeedbackRtpTransportInput>& inputs,
28
28
  const std::vector<struct RTC::RTCP::FeedbackRtpTransportPacket::PacketStatus>& packetStatuses)
@@ -34,7 +34,7 @@ SCENARIO("RTCP ReceiverReport", "[rtcp][receiver-report]")
34
34
  const uint32_t delaySinceLastSenderReport{ 5 };
35
35
 
36
36
  // NOTE: No need to pass const integers to the lambda.
37
- auto verify = [](RTC::RTCP::ReceiverReport* report)
37
+ const auto verify = [](RTC::RTCP::ReceiverReport* report)
38
38
  {
39
39
  REQUIRE(report->GetSsrc() == ssrc);
40
40
  REQUIRE(report->GetFractionLost() == fractionLost);
@@ -32,7 +32,7 @@ SCENARIO("RTCP SenderReport", "[rtcp][sender-report]")
32
32
  const uint32_t octetCount{ 577280 };
33
33
 
34
34
  // NOTE: No need to pass const integers to the lambda.
35
- auto verify = [](RTC::RTCP::SenderReport* report)
35
+ const auto verify = [](RTC::RTCP::SenderReport* report)
36
36
  {
37
37
  REQUIRE(report->GetSsrc() == ssrc);
38
38
  REQUIRE(report->GetNtpSec() == ntpSec);
@@ -26,7 +26,7 @@ SCENARIO("RTP RetransmissionBuffer", "[rtp][rtx]")
26
26
  }
27
27
 
28
28
  public:
29
- void Insert(uint16_t seq, uint32_t timestamp)
29
+ void Insert(uint16_t seq, uint32_t timestamp, int64_t nowMs = 0)
30
30
  {
31
31
  // clang-format off
32
32
  uint8_t rtpBuffer[] =
@@ -44,7 +44,7 @@ SCENARIO("RTP RetransmissionBuffer", "[rtp][rtx]")
44
44
 
45
45
  const RTC::RTP::SharedPacket sharedPacket;
46
46
 
47
- RTC::RTP::RetransmissionBuffer::Insert(packet.get(), sharedPacket);
47
+ RTC::RTP::RetransmissionBuffer::Insert(packet.get(), sharedPacket, nowMs);
48
48
  }
49
49
 
50
50
  void AssertBuffer(std::vector<VerificationItem> verificationBuffer)
@@ -83,10 +83,10 @@ SCENARIO("RTP RetransmissionBuffer", "[rtp][rtx]")
83
83
  // clang-format off
84
84
  myRetransmissionBuffer.AssertBuffer(
85
85
  {
86
- { true, 10001, 1000000000 },
87
- { true, 10002, 1000000000 },
88
- { true, 10003, 1000000200 },
89
- { true, 10004, 1000000200 }
86
+ { .isPresent = true, .sequenceNumber = 10001, .timestamp = 1000000000 },
87
+ { .isPresent = true, .sequenceNumber = 10002, .timestamp = 1000000000 },
88
+ { .isPresent = true, .sequenceNumber = 10003, .timestamp = 1000000200 },
89
+ { .isPresent = true, .sequenceNumber = 10004, .timestamp = 1000000200 }
90
90
  }
91
91
  );
92
92
  // clang-format on
@@ -108,10 +108,10 @@ SCENARIO("RTP RetransmissionBuffer", "[rtp][rtx]")
108
108
  // clang-format off
109
109
  myRetransmissionBuffer.AssertBuffer(
110
110
  {
111
- { true, 20001, 2000000000 },
112
- { true, 20002, 2000000000 },
113
- { true, 20003, 2000000200 },
114
- { true, 20004, 2000000200 }
111
+ { .isPresent = true, .sequenceNumber = 20001, .timestamp = 2000000000 },
112
+ { .isPresent = true, .sequenceNumber = 20002, .timestamp = 2000000000 },
113
+ { .isPresent = true, .sequenceNumber = 20003, .timestamp = 2000000200 },
114
+ { .isPresent = true, .sequenceNumber = 20004, .timestamp = 2000000200 }
115
115
  }
116
116
  );
117
117
  // clang-format on
@@ -133,7 +133,7 @@ SCENARIO("RTP RetransmissionBuffer", "[rtp][rtx]")
133
133
  // clang-format off
134
134
  myRetransmissionBuffer.AssertBuffer(
135
135
  {
136
- { true, 40000, 3000003000 }
136
+ { .isPresent = true, .sequenceNumber = 40000, .timestamp = 3000003000 }
137
137
  }
138
138
  );
139
139
  // clang-format on
@@ -163,15 +163,15 @@ SCENARIO("RTP RetransmissionBuffer", "[rtp][rtx]")
163
163
  // clang-format off
164
164
  myRetransmissionBuffer.AssertBuffer(
165
165
  {
166
- { true, 40000, 4000000000 },
167
- { false, 0, 0 },
168
- { true, 40002, 4000000002 },
169
- { false, 0, 0 },
170
- { true, 40004, 4000000004 },
171
- { false, 0, 0 },
172
- { true, 40006, 4000000006 },
173
- { false, 0, 0 },
174
- { true, 40008, 4000000008 }
166
+ { .isPresent = true, .sequenceNumber = 40000, .timestamp = 4000000000 },
167
+ { .isPresent = false, .sequenceNumber = 0, .timestamp = 0 },
168
+ { .isPresent = true, .sequenceNumber = 40002, .timestamp = 4000000002 },
169
+ { .isPresent = false, .sequenceNumber = 0, .timestamp = 0 },
170
+ { .isPresent = true, .sequenceNumber = 40004, .timestamp = 4000000004 },
171
+ { .isPresent = false, .sequenceNumber = 0, .timestamp = 0 },
172
+ { .isPresent = true, .sequenceNumber = 40006, .timestamp = 4000000006 },
173
+ { .isPresent = false, .sequenceNumber = 0, .timestamp = 0 },
174
+ { .isPresent = true, .sequenceNumber = 40008, .timestamp = 4000000008 }
175
175
  }
176
176
  );
177
177
  // clang-format on
@@ -194,9 +194,9 @@ SCENARIO("RTP RetransmissionBuffer", "[rtp][rtx]")
194
194
  // clang-format off
195
195
  myRetransmissionBuffer.AssertBuffer(
196
196
  {
197
- { true, 10001, 1000000001 },
198
- { true, 10002, 1000000002 },
199
- { true, 10003, 1000000003 }
197
+ { .isPresent = true, .sequenceNumber = 10001, .timestamp = 1000000001 },
198
+ { .isPresent = true, .sequenceNumber = 10002, .timestamp = 1000000002 },
199
+ { .isPresent = true, .sequenceNumber = 10003, .timestamp = 1000000003 }
200
200
  }
201
201
  );
202
202
  // clang-format on
@@ -221,9 +221,9 @@ SCENARIO("RTP RetransmissionBuffer", "[rtp][rtx]")
221
221
  // clang-format off
222
222
  myRetransmissionBuffer.AssertBuffer(
223
223
  {
224
- { true, 10001, 1000000001 },
225
- { true, 10002, 1000000002 },
226
- { true, 10003, 1000000003 }
224
+ { .isPresent = true, .sequenceNumber = 10001, .timestamp = 1000000001 },
225
+ { .isPresent = true, .sequenceNumber = 10002, .timestamp = 1000000002 },
226
+ { .isPresent = true, .sequenceNumber = 10003, .timestamp = 1000000003 }
227
227
  }
228
228
  );
229
229
  // clang-format on
@@ -246,7 +246,7 @@ SCENARIO("RTP RetransmissionBuffer", "[rtp][rtx]")
246
246
  // clang-format off
247
247
  myRetransmissionBuffer.AssertBuffer(
248
248
  {
249
- { true, 18365, 1026593387 }
249
+ { .isPresent = true, .sequenceNumber = 18365, .timestamp = 1026593387 }
250
250
  }
251
251
  );
252
252
  // clang-format on
@@ -268,12 +268,44 @@ SCENARIO("RTP RetransmissionBuffer", "[rtp][rtx]")
268
268
  // clang-format off
269
269
  myRetransmissionBuffer.AssertBuffer(
270
270
  {
271
- { true, 33330, 1000000003 }
271
+ { .isPresent = true, .sequenceNumber = 33330, .timestamp = 1000000003 }
272
272
  }
273
273
  );
274
274
  // clang-format on
275
275
  }
276
276
 
277
+ SECTION("stored packet is too old once maxRetransmissionDelayMs elapsed since it was stored")
278
+ {
279
+ const uint16_t maxItems{ 4 };
280
+ const int64_t maxRetransmissionDelayMs{ 2000 };
281
+ const uint32_t clockRate{ 90000 };
282
+ const int64_t firstStoredAtMs{ 5000 };
283
+
284
+ RtpMyRetransmissionBuffer myRetransmissionBuffer(maxItems, maxRetransmissionDelayMs, clockRate);
285
+
286
+ // Both packets have the same timestamp so the age measured by timestamp
287
+ // doesn't play any role here.
288
+ myRetransmissionBuffer.Insert(10001, 1000000000, firstStoredAtMs);
289
+ myRetransmissionBuffer.Insert(10002, 1000000000, firstStoredAtMs + 1);
290
+
291
+ const RTC::RTP::RetransmissionBuffer::Item* const item1 = myRetransmissionBuffer.Get(10001);
292
+ const RTC::RTP::RetransmissionBuffer::Item* const item2 = myRetransmissionBuffer.Get(10002);
293
+
294
+ REQUIRE(item1);
295
+ REQUIRE(item2);
296
+
297
+ // Right at the limit the packet is not too old yet.
298
+ REQUIRE(
299
+ myRetransmissionBuffer.IsTooOld(item1, firstStoredAtMs + maxRetransmissionDelayMs) == false);
300
+
301
+ // Past the limit it is, even if no newer packet has been stored.
302
+ REQUIRE(myRetransmissionBuffer.IsTooOld(item1, firstStoredAtMs + maxRetransmissionDelayMs + 1));
303
+
304
+ // Each packet counts from the instant it was stored.
305
+ REQUIRE(
306
+ myRetransmissionBuffer.IsTooOld(item2, firstStoredAtMs + maxRetransmissionDelayMs + 1) == false);
307
+ }
308
+
277
309
  SECTION("fuzzer generated packets")
278
310
  {
279
311
  const uint16_t maxItems{ 2500 };
@@ -250,7 +250,7 @@ SCENARIO("RtpStreamRecv", "[rtp][rtpstream][rtpstreamrecv]")
250
250
  RTC::RTP::RtpStreamRecv rtpStream(
251
251
  std::addressof(listener), std::addressof(shared), params, SendNackDelay, UseRtpInactivityCheck);
252
252
 
253
- auto receiveDelaySinceLastRr = [&](int64_t receivedAtUs, uint32_t lastRr, uint32_t dlrr)
253
+ const auto receiveDelaySinceLastRr = [&](int64_t receivedAtUs, uint32_t lastRr, uint32_t dlrr)
254
254
  {
255
255
  RTC::RTCP::DelaySinceLastRr::SsrcInfo ssrcInfo;
256
256