mediasoup 3.26.0 → 3.27.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 +11 -0
- package/node/lib/DataConsumer.js +1 -1
- package/node/lib/Router.js +1 -1
- package/node/lib/Transport.js +15 -15
- package/node/lib/fbs/rtp-parameters/encoding-mapping.d.ts +2 -6
- package/node/lib/fbs/rtp-parameters/encoding-mapping.d.ts.map +1 -1
- package/node/lib/fbs/rtp-parameters/encoding-mapping.js +7 -19
- package/node/lib/fbs/rtp-parameters/rtp-encoding-parameters.d.ts +4 -4
- package/node/lib/fbs/rtp-parameters/rtp-encoding-parameters.js +2 -2
- package/node/lib/fbs/rtp-stream/bitrate-by-layer.d.ts +5 -5
- package/node/lib/fbs/rtp-stream/bitrate-by-layer.d.ts.map +1 -1
- package/node/lib/fbs/rtp-stream/bitrate-by-layer.js +3 -3
- package/node/lib/fbs/rtp-stream/recv-stats.d.ts +5 -5
- package/node/lib/fbs/rtp-stream/recv-stats.d.ts.map +1 -1
- package/node/lib/fbs/rtp-stream/recv-stats.js +3 -3
- package/node/lib/fbs/rtp-stream/send-stats.d.ts +5 -5
- package/node/lib/fbs/rtp-stream/send-stats.d.ts.map +1 -1
- package/node/lib/fbs/rtp-stream/send-stats.js +3 -3
- package/node/lib/fbs/transport/bwe-trace-info.d.ts +23 -23
- package/node/lib/fbs/transport/bwe-trace-info.d.ts.map +1 -1
- package/node/lib/fbs/transport/bwe-trace-info.js +15 -15
- package/node/lib/fbs/transport/options.d.ts +5 -5
- package/node/lib/fbs/transport/options.js +2 -2
- package/node/lib/fbs/transport/set-max-incoming-bitrate-request.d.ts +5 -5
- package/node/lib/fbs/transport/set-max-incoming-bitrate-request.d.ts.map +1 -1
- package/node/lib/fbs/transport/set-max-incoming-bitrate-request.js +3 -3
- package/node/lib/fbs/transport/set-max-outgoing-bitrate-request.d.ts +5 -5
- package/node/lib/fbs/transport/set-max-outgoing-bitrate-request.d.ts.map +1 -1
- package/node/lib/fbs/transport/set-max-outgoing-bitrate-request.js +3 -3
- package/node/lib/fbs/transport/set-min-outgoing-bitrate-request.d.ts +5 -5
- package/node/lib/fbs/transport/set-min-outgoing-bitrate-request.d.ts.map +1 -1
- package/node/lib/fbs/transport/set-min-outgoing-bitrate-request.js +3 -3
- package/node/lib/fbs/transport/stats.d.ts +38 -38
- package/node/lib/fbs/transport/stats.d.ts.map +1 -1
- package/node/lib/fbs/transport/stats.js +25 -25
- package/node/lib/ortc.d.ts +0 -1
- package/node/lib/ortc.d.ts.map +1 -1
- package/node/lib/ortc.js +1 -2
- package/node/lib/rtpParametersFbsUtils.d.ts.map +1 -1
- package/node/lib/rtpParametersFbsUtils.js +2 -2
- package/package.json +9 -9
- package/worker/deps/libwebrtc/libwebrtc/call/rtp_transport_controller_send.cc +10 -10
- package/worker/deps/libwebrtc/libwebrtc/mediasoup_helpers.h +6 -6
- package/worker/deps/libwebrtc/libwebrtc/modules/congestion_controller/goog_cc/alr_detector.cc +1 -1
- package/worker/deps/libwebrtc/libwebrtc/modules/pacing/paced_sender.cc +7 -7
- package/worker/deps/libwebrtc/libwebrtc/modules/remote_bitrate_estimator/include/remote_bitrate_estimator.h +1 -1
- package/worker/deps/libwebrtc/libwebrtc/modules/remote_bitrate_estimator/remote_bitrate_estimator_abs_send_time.cc +1 -1
- package/worker/fbs/rtpParameters.fbs +1 -2
- package/worker/fbs/rtpStream.fbs +3 -3
- package/worker/fbs/transport.fbs +23 -23
- package/worker/fuzzer/include/RTC/FuzzerDtlsTransport.hpp +4 -1
- package/worker/fuzzer/src/FuzzerUtils.cpp +5 -3
- package/worker/fuzzer/src/RTC/FuzzerDtlsTransport.cpp +8 -5
- package/worker/fuzzer/src/RTC/FuzzerRateCalculator.cpp +3 -3
- package/worker/fuzzer/src/RTC/FuzzerTrendCalculator.cpp +6 -6
- package/worker/fuzzer/src/RTC/RTCP/FuzzerFeedbackRtpTransport.cpp +3 -3
- package/worker/fuzzer/src/RTC/RTP/FuzzerPacket.cpp +2 -2
- package/worker/fuzzer/src/RTC/RTP/FuzzerRetransmissionBuffer.cpp +5 -5
- package/worker/fuzzer/src/RTC/RTP/FuzzerRtpStreamSend.cpp +3 -3
- package/worker/fuzzer/src/fuzzer.cpp +4 -0
- package/worker/include/Channel/ChannelNotification.hpp +3 -3
- package/worker/include/Channel/ChannelRequest.hpp +1 -1
- package/worker/include/Channel/ChannelSocket.hpp +11 -0
- package/worker/include/DepLibUV.hpp +16 -33
- package/worker/include/RTC/ActiveSpeakerObserver.hpp +11 -11
- package/worker/include/RTC/AudioLevelObserver.hpp +4 -4
- package/worker/include/RTC/BWE/AcknowledgedBitrateEstimatorInterface.hpp +55 -0
- package/worker/include/RTC/BWE/AimdRateControl.hpp +190 -0
- package/worker/include/RTC/BWE/BweTypes.hpp +211 -0
- package/worker/include/RTC/BWE/DelayBasedBwe.hpp +173 -0
- package/worker/include/RTC/BWE/FeedbackAdapter.hpp +72 -0
- package/worker/include/RTC/BWE/InterArrivalDelta.hpp +106 -0
- package/worker/include/RTC/BWE/LinkCapacityEstimator.hpp +84 -0
- package/worker/include/RTC/BWE/RobustThroughputEstimator.hpp +94 -0
- package/worker/include/RTC/BWE/SendPacketHistory.hpp +137 -0
- package/worker/include/RTC/BWE/TrendlineEstimator.hpp +101 -0
- package/worker/include/RTC/Consts.hpp +6 -6
- package/worker/include/RTC/Consumer.hpp +14 -12
- package/worker/include/RTC/DataConsumer.hpp +3 -3
- package/worker/include/RTC/DataProducer.hpp +3 -3
- package/worker/include/RTC/DtlsTransport.hpp +5 -2
- package/worker/include/RTC/ICE/IceCandidate.hpp +2 -2
- package/worker/include/RTC/ICE/IceServer.hpp +3 -3
- package/worker/include/RTC/KeyFrameRequestManager.hpp +3 -3
- package/worker/include/RTC/NEW_RTCP/packet/Packet.hpp +1 -1
- package/worker/include/RTC/NackGenerator.hpp +12 -12
- package/worker/include/RTC/PipeProducerStreamManager.hpp +3 -4
- package/worker/include/RTC/PipeTransport.hpp +18 -5
- package/worker/include/RTC/PlainTransport.hpp +18 -5
- package/worker/include/RTC/PortManager.hpp +4 -4
- package/worker/include/RTC/Producer.hpp +21 -12
- package/worker/include/RTC/ProducerStreamManager.hpp +12 -6
- package/worker/include/RTC/RTCP/Bye.hpp +2 -2
- package/worker/include/RTC/RTCP/FeedbackPsRemb.hpp +4 -4
- package/worker/include/RTC/RTCP/FeedbackRtpTmmb.hpp +3 -3
- package/worker/include/RTC/RTCP/FeedbackRtpTransport.hpp +54 -39
- package/worker/include/RTC/RTCP/Packet.hpp +3 -3
- package/worker/include/RTC/RTCP/ReceiverReport.hpp +3 -3
- package/worker/include/RTC/RTCP/Sdes.hpp +2 -2
- package/worker/include/RTC/RTCP/XR.hpp +2 -2
- package/worker/include/RTC/RTCP/XrDelaySinceLastRr.hpp +1 -1
- package/worker/include/RTC/RTP/Codecs/H264.hpp +1 -1
- package/worker/include/RTC/RTP/Codecs/Opus.hpp +2 -2
- package/worker/include/RTC/RTP/Codecs/PayloadDescriptorHandler.hpp +3 -3
- package/worker/include/RTC/RTP/Codecs/VP8.hpp +2 -2
- package/worker/include/RTC/RTP/Codecs/VP9.hpp +2 -2
- package/worker/include/RTC/RTP/HeaderExtensionIds.hpp +12 -12
- package/worker/include/RTC/RTP/Packet.hpp +13 -13
- package/worker/include/RTC/RTP/ProbationGenerator.hpp +1 -1
- package/worker/include/RTC/RTP/RetransmissionBuffer.hpp +7 -7
- package/worker/include/RTC/RTP/RtpStream.hpp +37 -51
- package/worker/include/RTC/RTP/RtpStreamRecv.hpp +59 -41
- package/worker/include/RTC/RTP/RtpStreamSend.hpp +20 -14
- package/worker/include/RTC/RTP/RtxStream.hpp +12 -13
- package/worker/include/RTC/RateCalculator.hpp +50 -44
- package/worker/include/RTC/RemoteCaptureTimeEstimator.hpp +5 -4
- package/worker/include/RTC/RemoteClockOffsetEstimator.hpp +11 -11
- package/worker/include/RTC/Router.hpp +6 -0
- package/worker/include/RTC/RtcLogger.hpp +1 -1
- package/worker/include/RTC/RtpDictionaries.hpp +10 -10
- package/worker/include/RTC/SCTP/association/Association.hpp +56 -28
- package/worker/include/RTC/SCTP/association/HeartbeatHandler.hpp +4 -4
- package/worker/include/RTC/SCTP/association/StateCookie.hpp +14 -14
- package/worker/include/RTC/SCTP/association/StreamResetHandler.hpp +2 -2
- package/worker/include/RTC/SCTP/association/TransmissionControlBlock.hpp +12 -12
- package/worker/include/RTC/SCTP/association/TransmissionControlBlockContextInterface.hpp +4 -4
- package/worker/include/RTC/SCTP/packet/TLV.hpp +1 -1
- package/worker/include/RTC/SCTP/packet/parameters/StateCookieParameter.hpp +3 -3
- package/worker/include/RTC/SCTP/public/AssociationInterface.hpp +4 -1
- package/worker/include/RTC/SCTP/public/AssociationMetrics.hpp +1 -1
- package/worker/include/RTC/SCTP/public/SctpOptions.hpp +12 -12
- package/worker/include/RTC/SCTP/public/SctpTypes.hpp +1 -1
- package/worker/include/RTC/SCTP/tx/OutstandingData.hpp +15 -16
- package/worker/include/RTC/SCTP/tx/RetransmissionQueue.hpp +7 -8
- package/worker/include/RTC/SCTP/tx/RetransmissionTimeout.hpp +20 -16
- package/worker/include/RTC/SCTP/tx/RoundRobinSendQueue.hpp +5 -6
- package/worker/include/RTC/SCTP/tx/SendQueueInterface.hpp +2 -2
- package/worker/include/RTC/SCTP/tx/StreamScheduler.hpp +5 -5
- package/worker/include/RTC/SctpDictionaries.hpp +3 -3
- package/worker/include/RTC/Serializable.hpp +1 -1
- package/worker/include/RTC/SimpleProducerStreamManager.hpp +3 -4
- package/worker/include/RTC/SimulcastProducerStreamManager.hpp +6 -7
- package/worker/include/RTC/SvcProducerStreamManager.hpp +6 -5
- package/worker/include/RTC/TcpConnection.hpp +9 -3
- package/worker/include/RTC/TcpServer.hpp +3 -0
- package/worker/include/RTC/Transport.hpp +52 -45
- package/worker/include/RTC/TransportCongestionControlClient.hpp +30 -25
- package/worker/include/RTC/TransportCongestionControlServer.hpp +17 -17
- package/worker/include/RTC/TrendCalculator.hpp +5 -5
- package/worker/include/RTC/UdpSocket.hpp +11 -2
- package/worker/include/RTC/WebRtcServer.hpp +20 -5
- package/worker/include/RTC/WebRtcTransport.hpp +35 -10
- package/worker/include/Settings.hpp +4 -2
- package/worker/include/Shared.hpp +5 -20
- package/worker/include/SharedInterface.hpp +6 -28
- package/worker/include/Utils.hpp +40 -21
- package/worker/include/common.hpp +4 -0
- package/worker/include/handles/BackoffTimerHandle.hpp +4 -4
- package/worker/include/handles/BackoffTimerHandleInterface.hpp +5 -5
- package/worker/include/handles/TcpConnectionHandle.hpp +6 -6
- package/worker/include/handles/TcpServerHandle.hpp +1 -1
- package/worker/include/handles/TimerHandle.hpp +15 -9
- package/worker/include/handles/TimerHandleInterface.hpp +10 -4
- package/worker/include/handles/UdpSocketHandle.hpp +3 -3
- package/worker/include/handles/UnixStreamSocketHandle.hpp +2 -2
- package/worker/meson.build +81 -36
- package/worker/meson_options.txt +1 -0
- package/worker/mocks/include/MockShared.hpp +24 -23
- package/worker/mocks/include/RTC/SCTP/association/MockTransmissionControlBlockContext.hpp +51 -27
- package/worker/mocks/include/RTC/SCTP/tx/MockSendQueue.hpp +11 -11
- package/worker/mocks/include/handles/MockBackoffTimerHandle.hpp +10 -10
- package/worker/mocks/include/handles/MockTimerHandle.hpp +60 -22
- package/worker/mocks/src/MockShared.cpp +51 -5
- package/worker/mocks/src/handles/MockBackoffTimerHandle.cpp +29 -15
- package/worker/mocks/src/handles/MockTimerHandle.cpp +117 -0
- package/worker/scripts/clang-scripts.mjs +2 -2
- package/worker/src/Channel/ChannelNotification.cpp +5 -6
- package/worker/src/Channel/ChannelSocket.cpp +20 -2
- package/worker/src/DepLibUV.cpp +4 -5
- package/worker/src/RTC/ActiveSpeakerObserver.cpp +59 -47
- package/worker/src/RTC/AudioLevelObserver.cpp +7 -7
- package/worker/src/RTC/BWE/AimdRateControl.cpp +468 -0
- package/worker/src/RTC/BWE/BweTypes.cpp +61 -0
- package/worker/src/RTC/BWE/DelayBasedBwe.cpp +275 -0
- package/worker/src/RTC/BWE/FeedbackAdapter.cpp +148 -0
- package/worker/src/RTC/BWE/InterArrivalDelta.cpp +181 -0
- package/worker/src/RTC/BWE/LinkCapacityEstimator.cpp +133 -0
- package/worker/src/RTC/BWE/RobustThroughputEstimator.cpp +245 -0
- package/worker/src/RTC/BWE/SendPacketHistory.cpp +184 -0
- package/worker/src/RTC/BWE/TrendlineEstimator.cpp +233 -0
- package/worker/src/RTC/Consumer.cpp +48 -35
- package/worker/src/RTC/DataConsumer.cpp +4 -4
- package/worker/src/RTC/DataProducer.cpp +3 -3
- package/worker/src/RTC/DirectTransport.cpp +2 -2
- package/worker/src/RTC/DtlsTransport.cpp +14 -11
- package/worker/src/RTC/ICE/IceServer.cpp +2 -2
- package/worker/src/RTC/KeyFrameRequestManager.cpp +16 -12
- package/worker/src/RTC/NackGenerator.cpp +12 -12
- package/worker/src/RTC/PipeProducerStreamManager.cpp +6 -6
- package/worker/src/RTC/PipeTransport.cpp +16 -13
- package/worker/src/RTC/PlainTransport.cpp +25 -16
- package/worker/src/RTC/Producer.cpp +50 -36
- package/worker/src/RTC/RTCP/FeedbackPsRemb.cpp +13 -6
- package/worker/src/RTC/RTCP/FeedbackRtpTmmb.cpp +14 -5
- package/worker/src/RTC/RTCP/FeedbackRtpTransport.cpp +76 -50
- package/worker/src/RTC/RTP/Codecs/VP8.cpp +1 -1
- package/worker/src/RTC/RTP/Codecs/VP9.cpp +4 -4
- package/worker/src/RTC/RTP/Packet.cpp +9 -10
- package/worker/src/RTC/RTP/RetransmissionBuffer.cpp +6 -6
- package/worker/src/RTC/RTP/RtpStream.cpp +19 -19
- package/worker/src/RTC/RTP/RtpStreamRecv.cpp +146 -81
- package/worker/src/RTC/RTP/RtpStreamSend.cpp +49 -44
- package/worker/src/RTC/RTP/RtxStream.cpp +7 -10
- package/worker/src/RTC/RateCalculator.cpp +99 -136
- package/worker/src/RTC/RemoteCaptureTimeEstimator.cpp +13 -13
- package/worker/src/RTC/RemoteClockOffsetEstimator.cpp +18 -17
- package/worker/src/RTC/Router.cpp +18 -1
- package/worker/src/RTC/RtpDictionaries/RtpEncodingParameters.cpp +5 -2
- package/worker/src/RTC/SCTP/association/Association.cpp +131 -102
- package/worker/src/RTC/SCTP/association/AssociationListenerDeferrer.cpp +4 -4
- package/worker/src/RTC/SCTP/association/Capabilities.cpp +1 -1
- package/worker/src/RTC/SCTP/association/HeartbeatHandler.cpp +25 -18
- package/worker/src/RTC/SCTP/association/StateCookie.cpp +7 -6
- package/worker/src/RTC/SCTP/association/StreamResetHandler.cpp +16 -13
- package/worker/src/RTC/SCTP/association/TransmissionControlBlock.cpp +28 -26
- package/worker/src/RTC/SCTP/packet/chunks/SackChunk.cpp +0 -1
- package/worker/src/RTC/SCTP/packet/parameters/StateCookieParameter.cpp +2 -2
- package/worker/src/RTC/SCTP/public/AssociationMetrics.cpp +1 -1
- package/worker/src/RTC/SCTP/public/SctpOptions.cpp +13 -13
- package/worker/src/RTC/SCTP/rx/DataTracker.cpp +1 -1
- package/worker/src/RTC/SCTP/rx/ReassemblyQueue.cpp +5 -5
- package/worker/src/RTC/SCTP/tx/OutstandingData.cpp +15 -15
- package/worker/src/RTC/SCTP/tx/RetransmissionQueue.cpp +15 -15
- package/worker/src/RTC/SCTP/tx/RetransmissionTimeout.cpp +29 -26
- package/worker/src/RTC/SCTP/tx/RoundRobinSendQueue.cpp +12 -11
- package/worker/src/RTC/SCTP/tx/StreamScheduler.cpp +4 -4
- package/worker/src/RTC/SctpDictionaries/SctpStreamParameters.cpp +2 -2
- package/worker/src/RTC/SimpleProducerStreamManager.cpp +10 -10
- package/worker/src/RTC/SimulcastProducerStreamManager.cpp +39 -37
- package/worker/src/RTC/SvcProducerStreamManager.cpp +39 -25
- package/worker/src/RTC/TcpConnection.cpp +9 -3
- package/worker/src/RTC/TcpServer.cpp +7 -2
- package/worker/src/RTC/Transport.cpp +242 -302
- package/worker/src/RTC/TransportCongestionControlClient.cpp +78 -71
- package/worker/src/RTC/TransportCongestionControlServer.cpp +38 -40
- package/worker/src/RTC/TrendCalculator.cpp +3 -3
- package/worker/src/RTC/UdpSocket.cpp +14 -3
- package/worker/src/RTC/WebRtcServer.cpp +20 -14
- package/worker/src/RTC/WebRtcTransport.cpp +35 -30
- package/worker/src/Settings.cpp +10 -0
- package/worker/src/Shared.cpp +2 -2
- package/worker/src/Utils/Crypto.cpp +2 -2
- package/worker/src/Worker.cpp +5 -1
- package/worker/src/handles/BackoffTimerHandle.cpp +24 -11
- package/worker/src/handles/TimerHandle.cpp +74 -25
- package/worker/src/lib.cpp +6 -0
- package/worker/tasks.py +171 -44
- package/worker/test/include/RTC/BWE/helpers/LinkSimulator.hpp +117 -0
- package/worker/test/src/RTC/BWE/TestAimdRateControl.cpp +400 -0
- package/worker/test/src/RTC/BWE/TestDelayBasedBwe.cpp +568 -0
- package/worker/test/src/RTC/BWE/TestFeedbackAdapter.cpp +546 -0
- package/worker/test/src/RTC/BWE/TestInterArrivalDelta.cpp +301 -0
- package/worker/test/src/RTC/BWE/TestLinkCapacityEstimator.cpp +115 -0
- package/worker/test/src/RTC/BWE/TestRobustThroughputEstimator.cpp +433 -0
- package/worker/test/src/RTC/BWE/TestSendPacketHistory.cpp +259 -0
- package/worker/test/src/RTC/BWE/TestTrendlineEstimator.cpp +137 -0
- package/worker/test/src/RTC/BWE/helpers/LinkSimulator.cpp +171 -0
- package/worker/test/src/RTC/RTCP/TestFeedbackPsRemb.cpp +1 -1
- package/worker/test/src/RTC/RTCP/TestFeedbackRtpTmmb.cpp +1 -1
- package/worker/test/src/RTC/RTCP/TestFeedbackRtpTransport.cpp +246 -208
- package/worker/test/src/RTC/RTP/TestPacket.cpp +11 -11
- package/worker/test/src/RTC/RTP/TestRetransmissionBuffer.cpp +12 -12
- package/worker/test/src/RTC/RTP/TestRtpStreamRecv.cpp +23 -16
- package/worker/test/src/RTC/RTP/TestRtpStreamSend.cpp +13 -13
- package/worker/test/src/RTC/SCTP/association/TestAssociation.cpp +27 -22
- package/worker/test/src/RTC/SCTP/association/TestHeartbeatHandler.cpp +21 -15
- package/worker/test/src/RTC/SCTP/association/TestStateCookie.cpp +6 -6
- package/worker/test/src/RTC/SCTP/association/TestStreamResetHandler.cpp +17 -13
- package/worker/test/src/RTC/SCTP/association/TestTransmissionControlBlock.cpp +3 -3
- package/worker/test/src/RTC/SCTP/packet/chunks/TestForwardTsnChunk.cpp +2 -2
- package/worker/test/src/RTC/SCTP/packet/chunks/TestIForwardTsnChunk.cpp +23 -23
- package/worker/test/src/RTC/SCTP/packet/chunks/TestInitChunk.cpp +1 -1
- package/worker/test/src/RTC/SCTP/packet/chunks/TestSackChunk.cpp +1 -1
- package/worker/test/src/RTC/SCTP/packet/parameters/TestIPv6AddressParameter.cpp +1 -1
- package/worker/test/src/RTC/SCTP/rx/TestDataTracker.cpp +37 -37
- package/worker/test/src/RTC/SCTP/rx/TestInterleavedReassemblyStreams.cpp +10 -10
- package/worker/test/src/RTC/SCTP/rx/TestReassemblyQueue.cpp +1 -1
- package/worker/test/src/RTC/SCTP/tx/TestOutstandingData.cpp +93 -93
- package/worker/test/src/RTC/SCTP/tx/TestRetransmissionQueue.cpp +247 -247
- package/worker/test/src/RTC/SCTP/tx/TestRetransmissionTimeout.cpp +100 -80
- package/worker/test/src/RTC/SCTP/tx/TestRoundRobinSendQueue.cpp +163 -163
- package/worker/test/src/RTC/SCTP/tx/TestStreamScheduler.cpp +76 -77
- package/worker/test/src/RTC/TestConsumer.cpp +8 -3
- package/worker/test/src/RTC/TestKeyFrameRequestManager.cpp +3 -3
- package/worker/test/src/RTC/TestNackGenerator.cpp +3 -3
- package/worker/test/src/RTC/TestPipeProducerStreamManager.cpp +5 -5
- package/worker/test/src/RTC/TestRateCalculator.cpp +110 -14
- package/worker/test/src/RTC/TestRemoteCaptureTimeEstimator.cpp +22 -17
- package/worker/test/src/RTC/TestRemoteClockOffsetEstimator.cpp +87 -85
- package/worker/test/src/RTC/TestSimpleProducerStreamManager.cpp +54 -47
- package/worker/test/src/RTC/TestSimulcastProducerStreamManager.cpp +83 -69
- package/worker/test/src/RTC/TestSvcProducerStreamManager.cpp +76 -65
- package/worker/test/src/RTC/TestTransportCongestionControlServer.cpp +72 -66
- package/worker/test/src/RTC/TestTransportTuple.cpp +19 -4
- package/worker/test/src/TestDepLibUV.cpp +19 -0
- package/worker/test/src/Utils/TestTime.cpp +57 -26
- package/worker/test/src/testHelpers.cpp +1 -1
- package/worker/test/src/tests.cpp +6 -0
- package/worker/include/RTC/SenderBandwidthEstimator.hpp +0 -118
- package/worker/src/RTC/SenderBandwidthEstimator.cpp +0 -269
|
@@ -5,32 +5,33 @@
|
|
|
5
5
|
SCENARIO("RemoteClockOffsetEstimator", "[rtp][rtcp][remoteclockoffsetestimator]")
|
|
6
6
|
{
|
|
7
7
|
// Remote sender wall clock, as reported in the NTP field of its Sender Reports
|
|
8
|
-
// (
|
|
9
|
-
constexpr
|
|
8
|
+
// (microseconds since 1900).
|
|
9
|
+
constexpr int64_t RemoteBaseUs{ 3976000000000 * 1000 };
|
|
10
10
|
// Our own monotonic clock.
|
|
11
|
-
constexpr
|
|
11
|
+
constexpr int64_t LocalBaseUs{ 1000000 * 1000 };
|
|
12
12
|
// Offset expected when Sender Reports reach us with no delay at all.
|
|
13
|
-
constexpr int64_t
|
|
14
|
-
static_cast<int64_t>(RemoteBaseMs) };
|
|
13
|
+
constexpr int64_t BaseOffsetUs{ LocalBaseUs - RemoteBaseUs };
|
|
15
14
|
|
|
16
15
|
const auto minSampleCount = RTC::RemoteClockOffsetEstimator::MinSampleCount;
|
|
17
16
|
const auto windowSize = RTC::RemoteClockOffsetEstimator::WindowSize;
|
|
18
17
|
|
|
19
|
-
// Feeds `count` Sender Reports one second apart, each one reaching us `
|
|
18
|
+
// Feeds `count` Sender Reports one second apart, each one reaching us `owdUs`
|
|
20
19
|
// after having been generated by the sender.
|
|
20
|
+
//
|
|
21
|
+
// NOTE: The RTT is given in milliseconds, being that the unit of the argument.
|
|
21
22
|
auto feed = [](
|
|
22
23
|
RTC::RemoteClockOffsetEstimator& estimator,
|
|
23
|
-
|
|
24
|
-
|
|
24
|
+
int64_t remoteNtpUs,
|
|
25
|
+
int64_t localArrivalAtUs,
|
|
25
26
|
size_t count,
|
|
26
|
-
|
|
27
|
-
|
|
27
|
+
int64_t owdUs,
|
|
28
|
+
int64_t rttMs) -> void
|
|
28
29
|
{
|
|
29
30
|
for (size_t idx{ 0 }; idx < count; ++idx)
|
|
30
31
|
{
|
|
31
|
-
const
|
|
32
|
+
const int64_t elapsedUs = static_cast<int64_t>(idx) * 1000000;
|
|
32
33
|
|
|
33
|
-
estimator.AddSenderReport(
|
|
34
|
+
estimator.AddSenderReport(remoteNtpUs + elapsedUs, localArrivalAtUs + elapsedUs + owdUs, rttMs);
|
|
34
35
|
}
|
|
35
36
|
};
|
|
36
37
|
|
|
@@ -38,101 +39,101 @@ SCENARIO("RemoteClockOffsetEstimator", "[rtp][rtcp][remoteclockoffsetestimator]"
|
|
|
38
39
|
|
|
39
40
|
SECTION("no offset until MinSampleCount Sender Reports have been received")
|
|
40
41
|
{
|
|
41
|
-
feed(estimator,
|
|
42
|
+
feed(estimator, RemoteBaseUs, LocalBaseUs, minSampleCount - 1, 0, 0);
|
|
42
43
|
|
|
43
|
-
REQUIRE_FALSE(estimator.
|
|
44
|
+
REQUIRE_FALSE(estimator.GetOffsetUs().has_value());
|
|
44
45
|
|
|
45
46
|
// One more Sender Report reaches the minimum.
|
|
46
|
-
const
|
|
47
|
+
const int64_t elapsedUs = static_cast<int64_t>(minSampleCount - 1) * 1000000;
|
|
47
48
|
|
|
48
|
-
feed(estimator,
|
|
49
|
+
feed(estimator, RemoteBaseUs + elapsedUs, LocalBaseUs + elapsedUs, 1, 0, 0);
|
|
49
50
|
|
|
50
|
-
REQUIRE(estimator.
|
|
51
|
+
REQUIRE(estimator.GetOffsetUs().has_value());
|
|
51
52
|
// NOLINTNEXTLINE(bugprone-unchecked-optional-access)
|
|
52
|
-
REQUIRE(estimator.
|
|
53
|
+
REQUIRE(estimator.GetOffsetUs().value() == BaseOffsetUs);
|
|
53
54
|
}
|
|
54
55
|
|
|
55
56
|
SECTION("the offset carries the Sender Report one way delay when the RTT is unknown")
|
|
56
57
|
{
|
|
57
|
-
feed(estimator,
|
|
58
|
+
feed(estimator, RemoteBaseUs, LocalBaseUs, minSampleCount, 40 * 1000, 0);
|
|
58
59
|
|
|
59
|
-
REQUIRE(estimator.
|
|
60
|
+
REQUIRE(estimator.GetOffsetUs().has_value());
|
|
60
61
|
// NOLINTNEXTLINE(bugprone-unchecked-optional-access)
|
|
61
|
-
REQUIRE(estimator.
|
|
62
|
+
REQUIRE(estimator.GetOffsetUs().value() == BaseOffsetUs + (40 * 1000));
|
|
62
63
|
}
|
|
63
64
|
|
|
64
65
|
SECTION("half of the RTT is removed from the offset")
|
|
65
66
|
{
|
|
66
|
-
feed(estimator,
|
|
67
|
+
feed(estimator, RemoteBaseUs, LocalBaseUs, minSampleCount, 40 * 1000, 80);
|
|
67
68
|
|
|
68
|
-
REQUIRE(estimator.
|
|
69
|
+
REQUIRE(estimator.GetOffsetUs().has_value());
|
|
69
70
|
// NOLINTNEXTLINE(bugprone-unchecked-optional-access)
|
|
70
|
-
REQUIRE(estimator.
|
|
71
|
+
REQUIRE(estimator.GetOffsetUs().value() == BaseOffsetUs);
|
|
71
72
|
}
|
|
72
73
|
|
|
73
74
|
SECTION("a single delayed Sender Report does not move the offset")
|
|
74
75
|
{
|
|
75
|
-
feed(estimator,
|
|
76
|
+
feed(estimator, RemoteBaseUs, LocalBaseUs, windowSize, 20 * 1000, 0);
|
|
76
77
|
|
|
77
|
-
REQUIRE(estimator.
|
|
78
|
+
REQUIRE(estimator.GetOffsetUs().has_value());
|
|
78
79
|
// NOLINTNEXTLINE(bugprone-unchecked-optional-access)
|
|
79
|
-
REQUIRE(estimator.
|
|
80
|
+
REQUIRE(estimator.GetOffsetUs().value() == BaseOffsetUs + (20 * 1000));
|
|
80
81
|
|
|
81
82
|
// A Sender Report that took much longer to reach us must be rejected by the
|
|
82
83
|
// median.
|
|
83
|
-
const
|
|
84
|
+
const int64_t elapsedUs = static_cast<int64_t>(windowSize) * 1000000;
|
|
84
85
|
|
|
85
|
-
feed(estimator,
|
|
86
|
+
feed(estimator, RemoteBaseUs + elapsedUs, LocalBaseUs + elapsedUs, 1, 500 * 1000, 0);
|
|
86
87
|
|
|
87
|
-
REQUIRE(estimator.
|
|
88
|
+
REQUIRE(estimator.GetOffsetUs().has_value());
|
|
88
89
|
// NOLINTNEXTLINE(bugprone-unchecked-optional-access)
|
|
89
|
-
REQUIRE(estimator.
|
|
90
|
+
REQUIRE(estimator.GetOffsetUs().value() == BaseOffsetUs + (20 * 1000));
|
|
90
91
|
}
|
|
91
92
|
|
|
92
93
|
SECTION("the offset follows a sustained change in delay")
|
|
93
94
|
{
|
|
94
|
-
feed(estimator,
|
|
95
|
+
feed(estimator, RemoteBaseUs, LocalBaseUs, windowSize, 0, 0);
|
|
95
96
|
|
|
96
|
-
REQUIRE(estimator.
|
|
97
|
+
REQUIRE(estimator.GetOffsetUs().has_value());
|
|
97
98
|
// NOLINTNEXTLINE(bugprone-unchecked-optional-access)
|
|
98
|
-
REQUIRE(estimator.
|
|
99
|
+
REQUIRE(estimator.GetOffsetUs().value() == BaseOffsetUs);
|
|
99
100
|
|
|
100
101
|
// Once the whole window has been replaced the new delay is fully reflected.
|
|
101
|
-
const
|
|
102
|
+
const int64_t elapsedUs = static_cast<int64_t>(windowSize) * 1000000;
|
|
102
103
|
|
|
103
|
-
feed(estimator,
|
|
104
|
+
feed(estimator, RemoteBaseUs + elapsedUs, LocalBaseUs + elapsedUs, windowSize, 100 * 1000, 0);
|
|
104
105
|
|
|
105
|
-
REQUIRE(estimator.
|
|
106
|
+
REQUIRE(estimator.GetOffsetUs().has_value());
|
|
106
107
|
// NOLINTNEXTLINE(bugprone-unchecked-optional-access)
|
|
107
|
-
REQUIRE(estimator.
|
|
108
|
+
REQUIRE(estimator.GetOffsetUs().value() == BaseOffsetUs + (100 * 1000));
|
|
108
109
|
}
|
|
109
110
|
|
|
110
111
|
SECTION("delayed Sender Reports move the offset once they are the majority")
|
|
111
112
|
{
|
|
112
|
-
feed(estimator,
|
|
113
|
+
feed(estimator, RemoteBaseUs, LocalBaseUs, windowSize, 0, 0);
|
|
113
114
|
|
|
114
|
-
REQUIRE(estimator.
|
|
115
|
+
REQUIRE(estimator.GetOffsetUs().has_value());
|
|
115
116
|
// NOLINTNEXTLINE(bugprone-unchecked-optional-access)
|
|
116
|
-
REQUIRE(estimator.
|
|
117
|
+
REQUIRE(estimator.GetOffsetUs().value() == BaseOffsetUs);
|
|
117
118
|
|
|
118
119
|
// Less than half of the window delayed, so the median still falls on a
|
|
119
120
|
// Sender Report that reached us with no delay.
|
|
120
|
-
|
|
121
|
+
int64_t elapsedUs = static_cast<int64_t>(windowSize) * 1000000;
|
|
121
122
|
|
|
122
|
-
feed(estimator,
|
|
123
|
+
feed(estimator, RemoteBaseUs + elapsedUs, LocalBaseUs + elapsedUs, windowSize / 2, 300 * 1000, 0);
|
|
123
124
|
|
|
124
|
-
REQUIRE(estimator.
|
|
125
|
+
REQUIRE(estimator.GetOffsetUs().has_value());
|
|
125
126
|
// NOLINTNEXTLINE(bugprone-unchecked-optional-access)
|
|
126
|
-
REQUIRE(estimator.
|
|
127
|
+
REQUIRE(estimator.GetOffsetUs().value() == BaseOffsetUs);
|
|
127
128
|
|
|
128
129
|
// One more delayed Sender Report makes them the majority.
|
|
129
|
-
|
|
130
|
+
elapsedUs += static_cast<int64_t>(windowSize / 2) * 1000000;
|
|
130
131
|
|
|
131
|
-
feed(estimator,
|
|
132
|
+
feed(estimator, RemoteBaseUs + elapsedUs, LocalBaseUs + elapsedUs, 1, 300 * 1000, 0);
|
|
132
133
|
|
|
133
|
-
REQUIRE(estimator.
|
|
134
|
+
REQUIRE(estimator.GetOffsetUs().has_value());
|
|
134
135
|
// NOLINTNEXTLINE(bugprone-unchecked-optional-access)
|
|
135
|
-
REQUIRE(estimator.
|
|
136
|
+
REQUIRE(estimator.GetOffsetUs().value() == BaseOffsetUs + (300 * 1000));
|
|
136
137
|
}
|
|
137
138
|
|
|
138
139
|
SECTION("the offset tracks a drifting remote clock")
|
|
@@ -143,99 +144,100 @@ SCENARIO("RemoteClockOffsetEstimator", "[rtp][rtcp][remoteclockoffsetestimator]"
|
|
|
143
144
|
for (size_t idx{ 0 }; idx < windowSize; ++idx)
|
|
144
145
|
{
|
|
145
146
|
estimator.AddSenderReport(
|
|
146
|
-
|
|
147
|
-
|
|
147
|
+
RemoteBaseUs + (static_cast<int64_t>(idx) * 1000000),
|
|
148
|
+
LocalBaseUs + (static_cast<int64_t>(idx) * 1001000),
|
|
148
149
|
0);
|
|
149
150
|
}
|
|
150
151
|
|
|
151
|
-
REQUIRE(estimator.
|
|
152
|
+
REQUIRE(estimator.GetOffsetUs().has_value());
|
|
152
153
|
// The samples in the window grow by one millisecond each, so the median is
|
|
153
154
|
// the middle of that ramp.
|
|
154
|
-
|
|
155
|
-
|
|
155
|
+
REQUIRE(
|
|
156
|
+
// NOLINTNEXTLINE(bugprone-unchecked-optional-access)
|
|
157
|
+
estimator.GetOffsetUs().value() == BaseOffsetUs + (static_cast<int64_t>(windowSize / 2) * 1000));
|
|
156
158
|
|
|
157
159
|
// The drift keeps going, so the offset keeps up with it rather than sticking
|
|
158
160
|
// to the value it already had.
|
|
159
161
|
for (size_t idx{ windowSize }; idx < windowSize * 2; ++idx)
|
|
160
162
|
{
|
|
161
163
|
estimator.AddSenderReport(
|
|
162
|
-
|
|
163
|
-
|
|
164
|
+
RemoteBaseUs + (static_cast<int64_t>(idx) * 1000000),
|
|
165
|
+
LocalBaseUs + (static_cast<int64_t>(idx) * 1001000),
|
|
164
166
|
0);
|
|
165
167
|
}
|
|
166
168
|
|
|
167
|
-
REQUIRE(estimator.
|
|
169
|
+
REQUIRE(estimator.GetOffsetUs().has_value());
|
|
168
170
|
REQUIRE(
|
|
169
171
|
// NOLINTNEXTLINE(bugprone-unchecked-optional-access)
|
|
170
|
-
estimator.
|
|
171
|
-
|
|
172
|
+
estimator.GetOffsetUs().value() ==
|
|
173
|
+
BaseOffsetUs + (static_cast<int64_t>(windowSize + (windowSize / 2)) * 1000));
|
|
172
174
|
}
|
|
173
175
|
|
|
174
176
|
SECTION("all the Sender Reports of a compound packet produce a single sample")
|
|
175
177
|
{
|
|
176
178
|
// Three Sender Reports of a same compound packet, hence a single arrival
|
|
177
179
|
// time.
|
|
178
|
-
estimator.AddSenderReport(
|
|
179
|
-
estimator.AddSenderReport(
|
|
180
|
-
estimator.AddSenderReport(
|
|
180
|
+
estimator.AddSenderReport(RemoteBaseUs, LocalBaseUs, 0);
|
|
181
|
+
estimator.AddSenderReport(RemoteBaseUs + 1000, LocalBaseUs, 0);
|
|
182
|
+
estimator.AddSenderReport(RemoteBaseUs + 2000, LocalBaseUs, 0);
|
|
181
183
|
|
|
182
|
-
REQUIRE_FALSE(estimator.
|
|
184
|
+
REQUIRE_FALSE(estimator.GetOffsetUs().has_value());
|
|
183
185
|
|
|
184
186
|
// Two more compound packets reach the minimum.
|
|
185
|
-
estimator.AddSenderReport(
|
|
186
|
-
estimator.AddSenderReport(
|
|
187
|
-
estimator.AddSenderReport(
|
|
187
|
+
estimator.AddSenderReport(RemoteBaseUs + 1000000, LocalBaseUs + 1000000, 0);
|
|
188
|
+
estimator.AddSenderReport(RemoteBaseUs + 1001000, LocalBaseUs + 1000000, 0);
|
|
189
|
+
estimator.AddSenderReport(RemoteBaseUs + 2000000, LocalBaseUs + 2000000, 0);
|
|
188
190
|
|
|
189
|
-
REQUIRE(estimator.
|
|
191
|
+
REQUIRE(estimator.GetOffsetUs().has_value());
|
|
190
192
|
// NOLINTNEXTLINE(bugprone-unchecked-optional-access)
|
|
191
|
-
REQUIRE(estimator.
|
|
193
|
+
REQUIRE(estimator.GetOffsetUs().value() == BaseOffsetUs);
|
|
192
194
|
}
|
|
193
195
|
|
|
194
196
|
SECTION("Sender Reports with no NTP timestamp are ignored")
|
|
195
197
|
{
|
|
196
198
|
// NOTE: Not using feed() here since it would advance the NTP timestamp.
|
|
197
|
-
estimator.AddSenderReport(0,
|
|
198
|
-
estimator.AddSenderReport(0,
|
|
199
|
-
estimator.AddSenderReport(0,
|
|
199
|
+
estimator.AddSenderReport(0, LocalBaseUs, 0);
|
|
200
|
+
estimator.AddSenderReport(0, LocalBaseUs + 1000000, 0);
|
|
201
|
+
estimator.AddSenderReport(0, LocalBaseUs + 2000000, 0);
|
|
200
202
|
|
|
201
|
-
REQUIRE_FALSE(estimator.
|
|
203
|
+
REQUIRE_FALSE(estimator.GetOffsetUs().has_value());
|
|
202
204
|
}
|
|
203
205
|
|
|
204
206
|
SECTION("remote times are translated into our clock")
|
|
205
207
|
{
|
|
206
208
|
const RTC::RemoteClockOffsetEstimator untrainedEstimator;
|
|
207
209
|
|
|
208
|
-
REQUIRE_FALSE(untrainedEstimator.
|
|
210
|
+
REQUIRE_FALSE(untrainedEstimator.RemoteUsToLocalUs(RemoteBaseUs).has_value());
|
|
209
211
|
|
|
210
|
-
feed(estimator,
|
|
212
|
+
feed(estimator, RemoteBaseUs, LocalBaseUs, minSampleCount, 0, 0);
|
|
211
213
|
|
|
212
|
-
REQUIRE(estimator.
|
|
214
|
+
REQUIRE(estimator.RemoteUsToLocalUs(RemoteBaseUs).has_value());
|
|
213
215
|
// NOLINTNEXTLINE(bugprone-unchecked-optional-access)
|
|
214
|
-
REQUIRE(estimator.
|
|
215
|
-
REQUIRE(estimator.
|
|
216
|
+
REQUIRE(estimator.RemoteUsToLocalUs(RemoteBaseUs).value() == LocalBaseUs);
|
|
217
|
+
REQUIRE(estimator.RemoteUsToLocalUs(RemoteBaseUs + 500000).has_value());
|
|
216
218
|
// NOLINTNEXTLINE(bugprone-unchecked-optional-access)
|
|
217
|
-
REQUIRE(estimator.
|
|
219
|
+
REQUIRE(estimator.RemoteUsToLocalUs(RemoteBaseUs + 500000).value() == LocalBaseUs + 500000);
|
|
218
220
|
|
|
219
221
|
// A remote time older than the origin of our clock cannot be translated.
|
|
220
|
-
REQUIRE_FALSE(estimator.
|
|
222
|
+
REQUIRE_FALSE(estimator.RemoteUsToLocalUs(0).has_value());
|
|
221
223
|
}
|
|
222
224
|
|
|
223
225
|
SECTION("Reset() clears the estimation")
|
|
224
226
|
{
|
|
225
|
-
feed(estimator,
|
|
227
|
+
feed(estimator, RemoteBaseUs, LocalBaseUs, minSampleCount, 0, 0);
|
|
226
228
|
|
|
227
|
-
REQUIRE(estimator.
|
|
229
|
+
REQUIRE(estimator.GetOffsetUs().has_value());
|
|
228
230
|
|
|
229
231
|
estimator.Reset();
|
|
230
232
|
|
|
231
|
-
REQUIRE_FALSE(estimator.
|
|
233
|
+
REQUIRE_FALSE(estimator.GetOffsetUs().has_value());
|
|
232
234
|
|
|
233
235
|
// The last arrival time is forgotten as well, so Sender Reports arriving at
|
|
234
236
|
// the very same times as before the reset are not taken as duplicates.
|
|
235
|
-
feed(estimator,
|
|
237
|
+
feed(estimator, RemoteBaseUs, LocalBaseUs, minSampleCount, 0, 0);
|
|
236
238
|
|
|
237
|
-
REQUIRE(estimator.
|
|
239
|
+
REQUIRE(estimator.GetOffsetUs().has_value());
|
|
238
240
|
// NOLINTNEXTLINE(bugprone-unchecked-optional-access)
|
|
239
|
-
REQUIRE(estimator.
|
|
241
|
+
REQUIRE(estimator.GetOffsetUs().value() == BaseOffsetUs);
|
|
240
242
|
}
|
|
241
243
|
}
|
|
@@ -65,6 +65,11 @@ namespace
|
|
|
65
65
|
{
|
|
66
66
|
return 0;
|
|
67
67
|
}
|
|
68
|
+
|
|
69
|
+
void OnRtpStreamSpatialLayerActivityChanged(
|
|
70
|
+
RTC::RTP::RtpStreamRecv* /*rtpStream*/, uint8_t /*spatialLayer*/, bool /*isActive*/) override
|
|
71
|
+
{
|
|
72
|
+
}
|
|
68
73
|
};
|
|
69
74
|
|
|
70
75
|
class MockEncodingContext : public RTC::RTP::Codecs::EncodingContext
|
|
@@ -135,10 +140,10 @@ namespace
|
|
|
135
140
|
RtpStreamRecvListener streamRecvListener; // NOLINT(readability-identifier-naming)
|
|
136
141
|
|
|
137
142
|
// NOLINTNEXTLINE(readability-identifier-naming)
|
|
138
|
-
mocks::MockShared shared(/*
|
|
139
|
-
[]()
|
|
143
|
+
mocks::MockShared shared(/*getTimeUs*/
|
|
144
|
+
[]() -> int64_t
|
|
140
145
|
{
|
|
141
|
-
return DepLibUV::
|
|
146
|
+
return DepLibUV::GetTimeUs();
|
|
142
147
|
}); // NOLINT(readability-identifier-naming)
|
|
143
148
|
|
|
144
149
|
std::unique_ptr<RTC::SimpleProducerStreamManager> createManager(
|
|
@@ -160,7 +165,7 @@ namespace
|
|
|
160
165
|
kind,
|
|
161
166
|
keyFrameSupported,
|
|
162
167
|
listener,
|
|
163
|
-
|
|
168
|
+
std::addressof(shared));
|
|
164
169
|
}
|
|
165
170
|
|
|
166
171
|
std::unique_ptr<RTC::RTP::RtpStreamRecv> createRtpStreamRecv()
|
|
@@ -170,7 +175,8 @@ namespace
|
|
|
170
175
|
params.ssrc = MappedSsrc;
|
|
171
176
|
params.clockRate = 90000;
|
|
172
177
|
|
|
173
|
-
return std::make_unique<RTC::RTP::RtpStreamRecv>(
|
|
178
|
+
return std::make_unique<RTC::RTP::RtpStreamRecv>(
|
|
179
|
+
std::addressof(streamRecvListener), std::addressof(shared), params, 0u, false);
|
|
174
180
|
}
|
|
175
181
|
|
|
176
182
|
// Feed packets into the RtpStreamRecv so GetBitrate() returns non-zero.
|
|
@@ -182,15 +188,15 @@ namespace
|
|
|
182
188
|
for (uint16_t seq = firstSeq; Utils::Number::IsLowerThan<uint16_t>(seq, lastSeq); ++seq)
|
|
183
189
|
{
|
|
184
190
|
packet->SetSequenceNumber(seq);
|
|
185
|
-
rtpStream->ReceivePacket(packet);
|
|
191
|
+
rtpStream->ReceivePacket(packet, shared.GetTimeUs());
|
|
186
192
|
}
|
|
187
193
|
|
|
188
|
-
|
|
194
|
+
const int64_t nowMs = DepLibUV::GetTimeMs();
|
|
189
195
|
|
|
190
196
|
// bitrate (bps) = totalBytes * 8000 / windowSizeMs.
|
|
191
197
|
// windowSizeMs for RtpStreamRecv is 2500.
|
|
192
|
-
auto expectedBitrate =
|
|
193
|
-
static_cast<
|
|
198
|
+
const auto expectedBitrate =
|
|
199
|
+
static_cast<int64_t>(std::trunc((count * packet->GetLength() * 8000.0f / 2500) + 0.5f));
|
|
194
200
|
|
|
195
201
|
REQUIRE(rtpStream->GetBitrate(nowMs) == expectedBitrate);
|
|
196
202
|
}
|
|
@@ -208,7 +214,7 @@ SCENARIO("SimpleProducerStreamManager", "[rtp][producerstreammanager][simple]")
|
|
|
208
214
|
SECTION("returns BUFFER when sync required and packet is not a keyframe")
|
|
209
215
|
{
|
|
210
216
|
MockListener listener;
|
|
211
|
-
auto manager = createManager(
|
|
217
|
+
auto manager = createManager(std::addressof(listener));
|
|
212
218
|
auto rtpStream = createRtpStreamRecv();
|
|
213
219
|
|
|
214
220
|
manager->ProducerRtpStream(rtpStream.get(), MappedSsrc);
|
|
@@ -223,7 +229,7 @@ SCENARIO("SimpleProducerStreamManager", "[rtp][producerstreammanager][simple]")
|
|
|
223
229
|
SECTION("returns FORWARD with sendBufferedPackets when syncing with a keyframe")
|
|
224
230
|
{
|
|
225
231
|
MockListener listener;
|
|
226
|
-
auto manager = createManager(
|
|
232
|
+
auto manager = createManager(std::addressof(listener));
|
|
227
233
|
auto rtpStream = createRtpStreamRecv();
|
|
228
234
|
|
|
229
235
|
manager->ProducerRtpStream(rtpStream.get(), MappedSsrc);
|
|
@@ -249,7 +255,7 @@ SCENARIO("SimpleProducerStreamManager", "[rtp][producerstreammanager][simple]")
|
|
|
249
255
|
SECTION("returns DROP for empty payload packets")
|
|
250
256
|
{
|
|
251
257
|
MockListener listener;
|
|
252
|
-
auto manager = createManager(
|
|
258
|
+
auto manager = createManager(std::addressof(listener), /*keyFrameSupported*/ false);
|
|
253
259
|
auto rtpStream = createRtpStreamRecv();
|
|
254
260
|
|
|
255
261
|
manager->ProducerRtpStream(rtpStream.get(), MappedSsrc);
|
|
@@ -293,7 +299,7 @@ SCENARIO("SimpleProducerStreamManager", "[rtp][producerstreammanager][simple]")
|
|
|
293
299
|
SECTION("returns FORWARD and completes sync when keyFrameSupported is false for the first packet")
|
|
294
300
|
{
|
|
295
301
|
MockListener listener;
|
|
296
|
-
auto manager = createManager(
|
|
302
|
+
auto manager = createManager(std::addressof(listener), /*keyFrameSupported*/ false);
|
|
297
303
|
auto rtpStream = createRtpStreamRecv();
|
|
298
304
|
|
|
299
305
|
manager->ProducerRtpStream(rtpStream.get(), MappedSsrc);
|
|
@@ -316,7 +322,7 @@ SCENARIO("SimpleProducerStreamManager", "[rtp][producerstreammanager][simple]")
|
|
|
316
322
|
SECTION("returns FORWARD for normal packets after sync")
|
|
317
323
|
{
|
|
318
324
|
MockListener listener;
|
|
319
|
-
auto manager = createManager(
|
|
325
|
+
auto manager = createManager(std::addressof(listener), /*keyFrameSupported*/ false);
|
|
320
326
|
auto rtpStream = createRtpStreamRecv();
|
|
321
327
|
|
|
322
328
|
manager->ProducerRtpStream(rtpStream.get(), MappedSsrc);
|
|
@@ -342,7 +348,7 @@ SCENARIO("SimpleProducerStreamManager", "[rtp][producerstreammanager][simple]")
|
|
|
342
348
|
SECTION("OnTransportConnected() requests keyframe when active")
|
|
343
349
|
{
|
|
344
350
|
MockListener listener;
|
|
345
|
-
auto manager = createManager(
|
|
351
|
+
auto manager = createManager(std::addressof(listener));
|
|
346
352
|
auto rtpStream = createRtpStreamRecv();
|
|
347
353
|
|
|
348
354
|
manager->ProducerRtpStream(rtpStream.get(), MappedSsrc);
|
|
@@ -359,7 +365,7 @@ SCENARIO("SimpleProducerStreamManager", "[rtp][producerstreammanager][simple]")
|
|
|
359
365
|
MockListener listener;
|
|
360
366
|
listener.isActive = false;
|
|
361
367
|
|
|
362
|
-
auto manager = createManager(
|
|
368
|
+
auto manager = createManager(std::addressof(listener));
|
|
363
369
|
|
|
364
370
|
// Don't wire producerRtpStream — manager is not active.
|
|
365
371
|
manager->OnTransportConnected();
|
|
@@ -370,7 +376,7 @@ SCENARIO("SimpleProducerStreamManager", "[rtp][producerstreammanager][simple]")
|
|
|
370
376
|
SECTION("OnResumed() sets syncRequired and requests keyframe")
|
|
371
377
|
{
|
|
372
378
|
MockListener listener;
|
|
373
|
-
auto manager = createManager(
|
|
379
|
+
auto manager = createManager(std::addressof(listener));
|
|
374
380
|
auto rtpStream = createRtpStreamRecv();
|
|
375
381
|
|
|
376
382
|
manager->ProducerRtpStream(rtpStream.get(), MappedSsrc);
|
|
@@ -395,7 +401,7 @@ SCENARIO("SimpleProducerStreamManager", "[rtp][producerstreammanager][simple]")
|
|
|
395
401
|
SECTION("IncreaseLayer() returns producer bitrate when it is less than available bitrate")
|
|
396
402
|
{
|
|
397
403
|
MockListener listener;
|
|
398
|
-
auto manager = createManager(
|
|
404
|
+
auto manager = createManager(std::addressof(listener));
|
|
399
405
|
auto rtpStream = createRtpStreamRecv();
|
|
400
406
|
|
|
401
407
|
manager->ProducerRtpStream(rtpStream.get(), MappedSsrc);
|
|
@@ -405,18 +411,18 @@ SCENARIO("SimpleProducerStreamManager", "[rtp][producerstreammanager][simple]")
|
|
|
405
411
|
// Feed packets so the stream has non-zero bitrate.
|
|
406
412
|
feedRtpStreamRecv(rtpStream.get(), packet.get(), 100);
|
|
407
413
|
|
|
408
|
-
|
|
409
|
-
auto
|
|
410
|
-
auto usedBitrate
|
|
411
|
-
/*bitrate*/
|
|
414
|
+
const int64_t nowMs = DepLibUV::GetTimeMs();
|
|
415
|
+
const auto streamBitrate = rtpStream->GetBitrate(nowMs);
|
|
416
|
+
const auto usedBitrate = manager->IncreaseLayer(
|
|
417
|
+
/*bitrate*/ streamBitrate + 1, /*considerLoss*/ false, /*lossPercentage*/ 0.0f, nowMs);
|
|
412
418
|
|
|
413
|
-
REQUIRE(usedBitrate ==
|
|
419
|
+
REQUIRE(usedBitrate == streamBitrate);
|
|
414
420
|
}
|
|
415
421
|
|
|
416
422
|
SECTION("IncreaseLayer() returns available bitrate when it is less than producer bitrate")
|
|
417
423
|
{
|
|
418
424
|
MockListener listener;
|
|
419
|
-
auto manager = createManager(
|
|
425
|
+
auto manager = createManager(std::addressof(listener));
|
|
420
426
|
auto rtpStream = createRtpStreamRecv();
|
|
421
427
|
|
|
422
428
|
manager->ProducerRtpStream(rtpStream.get(), MappedSsrc);
|
|
@@ -426,10 +432,10 @@ SCENARIO("SimpleProducerStreamManager", "[rtp][producerstreammanager][simple]")
|
|
|
426
432
|
// Feed packets so the stream has non-zero bitrate.
|
|
427
433
|
feedRtpStreamRecv(rtpStream.get(), packet.get(), 100);
|
|
428
434
|
|
|
429
|
-
|
|
430
|
-
const auto streamBitrate
|
|
431
|
-
const
|
|
432
|
-
auto usedBitrate
|
|
435
|
+
const int64_t nowMs = DepLibUV::GetTimeMs();
|
|
436
|
+
const auto streamBitrate = rtpStream->GetBitrate(nowMs);
|
|
437
|
+
const int64_t availableBitrate = streamBitrate - 1;
|
|
438
|
+
auto usedBitrate = manager->IncreaseLayer(
|
|
433
439
|
/*bitrate*/ availableBitrate, /*considerLoss*/ false, /*lossPercentage*/ 0.0f, nowMs);
|
|
434
440
|
|
|
435
441
|
REQUIRE(usedBitrate == availableBitrate);
|
|
@@ -438,7 +444,7 @@ SCENARIO("SimpleProducerStreamManager", "[rtp][producerstreammanager][simple]")
|
|
|
438
444
|
SECTION("IncreaseLayer() returns 0 on second call in same iteration")
|
|
439
445
|
{
|
|
440
446
|
MockListener listener;
|
|
441
|
-
auto manager = createManager(
|
|
447
|
+
auto manager = createManager(std::addressof(listener));
|
|
442
448
|
auto rtpStream = createRtpStreamRecv();
|
|
443
449
|
|
|
444
450
|
manager->ProducerRtpStream(rtpStream.get(), MappedSsrc);
|
|
@@ -448,25 +454,25 @@ SCENARIO("SimpleProducerStreamManager", "[rtp][producerstreammanager][simple]")
|
|
|
448
454
|
// Feed packets so the stream has non-zero bitrate.
|
|
449
455
|
feedRtpStreamRecv(rtpStream.get(), packet.get(), 100);
|
|
450
456
|
|
|
451
|
-
|
|
457
|
+
const int64_t nowMs = DepLibUV::GetTimeMs();
|
|
452
458
|
|
|
453
459
|
// First call claims bitrate.
|
|
454
460
|
auto usedBitrate = manager->IncreaseLayer(
|
|
455
|
-
/*bitrate*/
|
|
461
|
+
/*bitrate*/ 1000000, /*considerLoss*/ false, /*lossPercentage*/ 0.0f, nowMs);
|
|
456
462
|
|
|
457
|
-
REQUIRE(usedBitrate >
|
|
463
|
+
REQUIRE(usedBitrate > 0);
|
|
458
464
|
|
|
459
465
|
// Second call in same iteration should return 0.
|
|
460
466
|
auto usedBitrate2 = manager->IncreaseLayer(
|
|
461
|
-
/*bitrate*/
|
|
467
|
+
/*bitrate*/ 1000000, /*considerLoss*/ false, /*lossPercentage*/ 0.0f, nowMs);
|
|
462
468
|
|
|
463
|
-
REQUIRE(usedBitrate2 ==
|
|
469
|
+
REQUIRE(usedBitrate2 == 0);
|
|
464
470
|
}
|
|
465
471
|
|
|
466
472
|
SECTION("IncreaseLayer() works again after ApplyLayers()")
|
|
467
473
|
{
|
|
468
474
|
MockListener listener;
|
|
469
|
-
auto manager = createManager(
|
|
475
|
+
auto manager = createManager(std::addressof(listener));
|
|
470
476
|
auto rtpStream = createRtpStreamRecv();
|
|
471
477
|
|
|
472
478
|
manager->ProducerRtpStream(rtpStream.get(), MappedSsrc);
|
|
@@ -476,24 +482,24 @@ SCENARIO("SimpleProducerStreamManager", "[rtp][producerstreammanager][simple]")
|
|
|
476
482
|
// Feed packets so the stream has non-zero bitrate.
|
|
477
483
|
feedRtpStreamRecv(rtpStream.get(), packet.get(), 100);
|
|
478
484
|
|
|
479
|
-
|
|
485
|
+
const int64_t nowMs = DepLibUV::GetTimeMs();
|
|
480
486
|
|
|
481
487
|
// First iteration: claim bitrate and apply.
|
|
482
488
|
manager->IncreaseLayer(
|
|
483
|
-
/*bitrate*/
|
|
489
|
+
/*bitrate*/ 1000000, /*considerLoss*/ false, /*lossPercentage*/ 0.0f, nowMs);
|
|
484
490
|
manager->ApplyLayers(/*rtpStreamActiveMs*/ 0u);
|
|
485
491
|
|
|
486
492
|
// After ApplyLayers, IncreaseLayer should work again.
|
|
487
493
|
auto usedBitrate = manager->IncreaseLayer(
|
|
488
|
-
/*bitrate*/
|
|
494
|
+
/*bitrate*/ 1000000, /*considerLoss*/ false, /*lossPercentage*/ 0.0f, nowMs);
|
|
489
495
|
|
|
490
|
-
REQUIRE(usedBitrate >
|
|
496
|
+
REQUIRE(usedBitrate > 0);
|
|
491
497
|
}
|
|
492
498
|
|
|
493
499
|
SECTION("GetDesiredBitrate() returns producer bitrate for video")
|
|
494
500
|
{
|
|
495
501
|
MockListener listener;
|
|
496
|
-
auto manager = createManager(
|
|
502
|
+
auto manager = createManager(std::addressof(listener));
|
|
497
503
|
auto rtpStream = createRtpStreamRecv();
|
|
498
504
|
|
|
499
505
|
manager->ProducerRtpStream(rtpStream.get(), MappedSsrc);
|
|
@@ -503,17 +509,18 @@ SCENARIO("SimpleProducerStreamManager", "[rtp][producerstreammanager][simple]")
|
|
|
503
509
|
// Feed packets so the stream has non-zero bitrate.
|
|
504
510
|
feedRtpStreamRecv(rtpStream.get(), packet.get(), 100);
|
|
505
511
|
|
|
506
|
-
|
|
507
|
-
auto
|
|
508
|
-
auto desiredBitrate = manager->GetDesiredBitrate(nowMs);
|
|
512
|
+
const int64_t nowMs = DepLibUV::GetTimeMs();
|
|
513
|
+
const auto streamBitrate = rtpStream->GetBitrate(nowMs);
|
|
514
|
+
const auto desiredBitrate = manager->GetDesiredBitrate(nowMs);
|
|
509
515
|
|
|
510
|
-
REQUIRE(desiredBitrate ==
|
|
516
|
+
REQUIRE(desiredBitrate == streamBitrate);
|
|
511
517
|
}
|
|
512
518
|
|
|
513
519
|
SECTION("GetDesiredBitrate() returns 0 for audio kind")
|
|
514
520
|
{
|
|
515
521
|
MockListener listener;
|
|
516
|
-
auto manager
|
|
522
|
+
auto manager =
|
|
523
|
+
createManager(std::addressof(listener), /*keyFrameSupported*/ false, RTC::Media::Kind::AUDIO);
|
|
517
524
|
auto rtpStream = createRtpStreamRecv();
|
|
518
525
|
|
|
519
526
|
manager->ProducerRtpStream(rtpStream.get(), MappedSsrc);
|
|
@@ -523,9 +530,9 @@ SCENARIO("SimpleProducerStreamManager", "[rtp][producerstreammanager][simple]")
|
|
|
523
530
|
// Feed packets so the stream has non-zero bitrate.
|
|
524
531
|
feedRtpStreamRecv(rtpStream.get(), packet.get(), 100);
|
|
525
532
|
|
|
526
|
-
|
|
533
|
+
const int64_t nowMs = DepLibUV::GetTimeMs();
|
|
527
534
|
auto desiredBitrate = manager->GetDesiredBitrate(nowMs);
|
|
528
535
|
|
|
529
|
-
REQUIRE(desiredBitrate ==
|
|
536
|
+
REQUIRE(desiredBitrate == 0);
|
|
530
537
|
}
|
|
531
538
|
}
|