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.
- package/CHANGELOG.md +12 -0
- package/node/lib/PipeTransportTypes.d.ts +6 -1
- package/node/lib/PipeTransportTypes.d.ts.map +1 -1
- package/node/lib/PlainTransportTypes.d.ts +6 -1
- package/node/lib/PlainTransportTypes.d.ts.map +1 -1
- package/node/lib/Router.d.ts +4 -4
- package/node/lib/Router.d.ts.map +1 -1
- package/node/lib/Router.js +10 -7
- package/node/lib/RouterTypes.d.ts +7 -1
- package/node/lib/RouterTypes.d.ts.map +1 -1
- package/node/lib/Transport.d.ts +2 -1
- package/node/lib/Transport.d.ts.map +1 -1
- package/node/lib/Transport.js +17 -6
- package/node/lib/TransportTypes.d.ts +12 -2
- package/node/lib/TransportTypes.d.ts.map +1 -1
- package/node/lib/WebRtcTransportTypes.d.ts +6 -1
- package/node/lib/WebRtcTransportTypes.d.ts.map +1 -1
- package/node/lib/fbs/transport/options.d.ts +6 -2
- package/node/lib/fbs/transport/options.d.ts.map +1 -1
- package/node/lib/fbs/transport/options.js +19 -7
- package/node/lib/fbs/transport/sctp-zero-checksum.d.ts +6 -0
- package/node/lib/fbs/transport/sctp-zero-checksum.d.ts.map +1 -0
- package/node/lib/fbs/transport/sctp-zero-checksum.js +11 -0
- package/node/lib/fbs/transport/stats.d.ts +2 -8
- package/node/lib/fbs/transport/stats.d.ts.map +1 -1
- package/node/lib/fbs/transport/stats.js +5 -29
- package/node/lib/fbs/transport.d.ts +1 -0
- package/node/lib/fbs/transport.d.ts.map +1 -1
- package/node/lib/fbs/transport.js +4 -2
- package/npm-scripts.mjs +35 -44
- package/package.json +10 -6
- package/worker/fbs/transport.fbs +9 -2
- package/worker/fuzzer/src/RTC/RTP/FuzzerRetransmissionBuffer.cpp +14 -1
- package/worker/fuzzer/src/RTC/RTP/FuzzerRtpStreamSend.cpp +17 -4
- package/worker/include/RTC/BWE/AimdRateControl.hpp +9 -9
- package/worker/include/RTC/BWE/BweTypes.hpp +54 -17
- package/worker/include/RTC/BWE/DelayBasedBwe.hpp +3 -3
- package/worker/include/RTC/BWE/FeedbackAdapter.hpp +2 -2
- package/worker/include/RTC/BWE/LossBasedController.hpp +4 -4
- package/worker/include/RTC/BWE/OveruseDetector.hpp +5 -4
- package/worker/include/RTC/BWE/ProbeBitrateEstimator.hpp +1 -1
- package/worker/include/RTC/BWE/ProbeController.hpp +6 -6
- package/worker/include/RTC/BWE/ProbePacketGenerator.hpp +2 -6
- package/worker/include/RTC/BWE/ProbingScheduler.hpp +3 -7
- package/worker/include/RTC/BWE/ReceiverTransportCongestionController.hpp +148 -0
- package/worker/include/RTC/BWE/RembGenerator.hpp +4 -3
- package/worker/include/RTC/BWE/RemoteBitrateEstimatorAbsSendTime.hpp +1 -1
- package/worker/include/RTC/BWE/SenderTransportCongestionController.hpp +343 -0
- package/worker/include/RTC/BWE/TargetRateController.hpp +4 -1
- package/worker/include/RTC/BWE/TransportWideCcFeedbackGenerator.hpp +5 -4
- package/worker/include/RTC/BWE/TrendlineEstimator.hpp +3 -3
- package/worker/include/RTC/Consumer.hpp +8 -1
- package/worker/include/RTC/RTP/RetransmissionBuffer.hpp +36 -10
- package/worker/include/RTC/RTP/RtpStream.hpp +21 -0
- package/worker/include/RTC/RTP/RtpStreamRecv.hpp +1 -0
- package/worker/include/RTC/RTP/RtpStreamSend.hpp +122 -9
- package/worker/include/RTC/SCTP/packet/parameters/ZeroChecksumAcceptableParameter.hpp +12 -3
- package/worker/include/RTC/TransportCongestionControlClient.hpp +0 -5
- package/worker/include/RTC/TransportCongestionControlServer.hpp +0 -5
- package/worker/include/Utils.hpp +9 -2
- package/worker/meson.build +4 -0
- package/worker/src/RTC/BWE/AimdRateControl.cpp +22 -22
- package/worker/src/RTC/BWE/DelayBasedBwe.cpp +16 -20
- package/worker/src/RTC/BWE/FeedbackAdapter.cpp +1 -1
- package/worker/src/RTC/BWE/OveruseDetector.cpp +8 -8
- package/worker/src/RTC/BWE/ProbeBitrateEstimator.cpp +2 -2
- package/worker/src/RTC/BWE/ProbeController.cpp +1 -1
- package/worker/src/RTC/BWE/ProbePacketGenerator.cpp +1 -6
- package/worker/src/RTC/BWE/ProbingScheduler.cpp +2 -7
- package/worker/src/RTC/BWE/ReceiverTransportCongestionController.cpp +207 -0
- package/worker/src/RTC/BWE/RembGenerator.cpp +1 -1
- package/worker/src/RTC/BWE/RemoteBitrateEstimatorAbsSendTime.cpp +1 -1
- package/worker/src/RTC/BWE/SenderTransportCongestionController.cpp +599 -0
- package/worker/src/RTC/BWE/TransportWideCcFeedbackGenerator.cpp +2 -3
- package/worker/src/RTC/BWE/TrendlineEstimator.cpp +5 -5
- package/worker/src/RTC/Consumer.cpp +3 -2
- package/worker/src/RTC/DataConsumer.cpp +2 -2
- package/worker/src/RTC/RTP/RetransmissionBuffer.cpp +21 -8
- package/worker/src/RTC/RTP/RtpStream.cpp +0 -3
- package/worker/src/RTC/RTP/RtpStreamRecv.cpp +57 -71
- package/worker/src/RTC/RTP/RtpStreamSend.cpp +428 -244
- package/worker/src/RTC/RTP/RtxStream.cpp +14 -19
- package/worker/src/RTC/SCTP/association/Association.cpp +3 -2
- package/worker/src/RTC/SCTP/association/StateCookie.cpp +26 -6
- package/worker/src/RTC/SCTP/packet/parameters/ZeroChecksumAcceptableParameter.cpp +4 -3
- package/worker/src/RTC/SCTP/rx/ReassemblyQueue.cpp +2 -1
- package/worker/src/RTC/SCTP/tx/RetransmissionQueue.cpp +4 -2
- package/worker/src/RTC/Transport.cpp +49 -20
- package/worker/src/RTC/TransportCongestionControlClient.cpp +0 -66
- package/worker/src/RTC/TransportCongestionControlServer.cpp +0 -55
- package/worker/src/Utils/Crypto.cpp +114 -98
- package/worker/subprojects/catch2.wrap +6 -6
- package/worker/subprojects/openssl.wrap +11 -12
- package/worker/subprojects/packagefiles/ankerl-unordered-dense/meson.build +1 -1
- package/worker/subprojects/unordered-dense.wrap +4 -4
- package/worker/test/src/RTC/BWE/TestDelayBasedBwe.cpp +5 -5
- package/worker/test/src/RTC/BWE/TestFeedbackAdapter.cpp +26 -23
- package/worker/test/src/RTC/BWE/TestInterArrivalDelta.cpp +8 -8
- package/worker/test/src/RTC/BWE/TestOveruseDetector.cpp +4 -4
- package/worker/test/src/RTC/BWE/TestProbeController.cpp +35 -32
- package/worker/test/src/RTC/BWE/TestProbePacketGenerator.cpp +2 -17
- package/worker/test/src/RTC/BWE/TestProbingScheduler.cpp +1 -25
- package/worker/test/src/RTC/BWE/TestReceiverTransportCongestionController.cpp +346 -0
- package/worker/test/src/RTC/BWE/TestRembGenerator.cpp +1 -1
- package/worker/test/src/RTC/BWE/TestRemoteBitrateEstimatorAbsSendTime.cpp +9 -9
- package/worker/test/src/RTC/BWE/TestSenderTransportCongestionController.cpp +510 -0
- package/worker/test/src/RTC/BWE/TestTransportWideCcFeedbackGenerator.cpp +16 -14
- package/worker/test/src/RTC/BWE/TestTrendlineEstimator.cpp +6 -6
- package/worker/test/src/RTC/BWE/helpers/RemoteBitrateEstimatorAbsSendTimeTestHelper.cpp +1 -2
- package/worker/test/src/RTC/RTCP/TestBye.cpp +1 -1
- package/worker/test/src/RTC/RTCP/TestFeedbackPsAfb.cpp +1 -1
- package/worker/test/src/RTC/RTCP/TestFeedbackPsFir.cpp +1 -1
- package/worker/test/src/RTC/RTCP/TestFeedbackPsLei.cpp +1 -1
- package/worker/test/src/RTC/RTCP/TestFeedbackPsPli.cpp +1 -1
- package/worker/test/src/RTC/RTCP/TestFeedbackPsRemb.cpp +1 -1
- package/worker/test/src/RTC/RTCP/TestFeedbackPsRpsi.cpp +1 -1
- package/worker/test/src/RTC/RTCP/TestFeedbackPsSli.cpp +1 -1
- package/worker/test/src/RTC/RTCP/TestFeedbackPsTst.cpp +1 -1
- package/worker/test/src/RTC/RTCP/TestFeedbackPsVbcm.cpp +1 -1
- package/worker/test/src/RTC/RTCP/TestFeedbackRtpEcn.cpp +1 -1
- package/worker/test/src/RTC/RTCP/TestFeedbackRtpNack.cpp +1 -1
- package/worker/test/src/RTC/RTCP/TestFeedbackRtpSrReq.cpp +1 -1
- package/worker/test/src/RTC/RTCP/TestFeedbackRtpTllei.cpp +1 -1
- package/worker/test/src/RTC/RTCP/TestFeedbackRtpTmmb.cpp +1 -1
- package/worker/test/src/RTC/RTCP/TestFeedbackRtpTransport.cpp +1 -1
- package/worker/test/src/RTC/RTCP/TestReceiverReport.cpp +1 -1
- package/worker/test/src/RTC/RTCP/TestSenderReport.cpp +1 -1
- package/worker/test/src/RTC/RTP/TestRetransmissionBuffer.cpp +60 -28
- package/worker/test/src/RTC/RTP/TestRtpStreamRecv.cpp +1 -1
- package/worker/test/src/RTC/RTP/TestRtpStreamSend.cpp +746 -24
- package/worker/test/src/RTC/RTP/TestSharedPacket.cpp +1 -1
- package/worker/test/src/RTC/SCTP/association/TestAssociation.cpp +42 -0
- package/worker/test/src/RTC/SCTP/association/TestNegotiatedCapabilities.cpp +54 -5
- package/worker/test/src/RTC/SCTP/association/TestStateCookie.cpp +80 -15
- package/worker/test/src/RTC/SCTP/association/TestStreamResetHandler.cpp +410 -3
- package/worker/test/src/RTC/SCTP/association/TestTransmissionControlBlock.cpp +1 -1
- package/worker/test/src/RTC/SCTP/packet/parameters/TestZeroChecksumAcceptableParameter.cpp +37 -5
- package/worker/test/src/RTC/SCTP/rx/TestDataTracker.cpp +5 -4
- package/worker/test/src/RTC/SCTP/rx/TestInterleavedReassemblyStreams.cpp +1 -1
- package/worker/test/src/RTC/SCTP/rx/TestReassemblyQueue.cpp +1 -1
- package/worker/test/src/RTC/SCTP/rx/TestTraditionalReassemblyStreams.cpp +1 -1
- package/worker/test/src/RTC/SCTP/tx/TestOutstandingData.cpp +1 -1
- package/worker/test/src/RTC/SCTP/tx/TestRetransmissionQueue.cpp +11 -10
- package/worker/test/src/RTC/SCTP/tx/TestRetransmissionTimeout.cpp +1 -1
- package/worker/test/src/RTC/TestNackGenerator.cpp +1 -1
- package/worker/test/src/RTC/TestPortManager.cpp +2 -2
- package/worker/test/src/RTC/TestRateCalculator.cpp +1 -1
- package/worker/test/src/RTC/TestRemoteCaptureTimeEstimator.cpp +21 -15
- package/worker/test/src/RTC/TestRemoteClockOffsetEstimator.cpp +13 -13
- package/worker/test/src/RTC/TestRtpEncodingParameters.cpp +1 -1
- package/worker/test/src/RTC/TestSubchannelsCodec.cpp +2 -2
- package/worker/test/src/RTC/TestTransportCongestionControlServer.cpp +1 -1
- package/worker/test/src/RTC/TestTransportTuple.cpp +3 -2
- package/worker/test/src/Utils/TestCrypto.cpp +71 -2
- 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
|
|