mediasoup 3.26.0 → 3.27.1
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 +16 -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/FBS/meson.build +25 -0
- package/worker/fbs/meson.build +15 -18
- 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/LossBasedController.hpp +520 -0
- package/worker/include/RTC/BWE/RobustThroughputEstimator.hpp +94 -0
- package/worker/include/RTC/BWE/SendPacketHistory.hpp +137 -0
- package/worker/include/RTC/BWE/TargetRateController.hpp +306 -0
- package/worker/include/RTC/BWE/TrendlineEstimator.hpp +143 -0
- package/worker/include/RTC/BWE/Utils.hpp +39 -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 +38 -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 +6 -6
- package/worker/include/RTC/SCTP/rx/ReassemblyQueue.hpp +10 -0
- 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 +87 -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/LossBasedController.cpp +1046 -0
- package/worker/src/RTC/BWE/RobustThroughputEstimator.cpp +245 -0
- package/worker/src/RTC/BWE/SendPacketHistory.cpp +184 -0
- package/worker/src/RTC/BWE/TargetRateController.cpp +435 -0
- package/worker/src/RTC/BWE/TrendlineEstimator.cpp +311 -0
- package/worker/src/RTC/BWE/Utils.cpp +54 -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 +146 -103
- 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 +122 -14
- 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 +2 -2
- 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 +266 -307
- 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 +197 -45
- 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/TestLossBasedController.cpp +1199 -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/TestTargetRateController.cpp +337 -0
- package/worker/test/src/RTC/BWE/TestTrendlineEstimator.cpp +182 -0
- package/worker/test/src/RTC/BWE/TestUtils.cpp +61 -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 +128 -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
|
@@ -70,6 +70,11 @@ namespace
|
|
|
70
70
|
{
|
|
71
71
|
return 0;
|
|
72
72
|
}
|
|
73
|
+
|
|
74
|
+
void OnRtpStreamSpatialLayerActivityChanged(
|
|
75
|
+
RTC::RTP::RtpStreamRecv* /*rtpStream*/, uint8_t /*spatialLayer*/, bool /*isActive*/) override
|
|
76
|
+
{
|
|
77
|
+
}
|
|
73
78
|
};
|
|
74
79
|
|
|
75
80
|
class MockEncodingContext : public RTC::RTP::Codecs::EncodingContext
|
|
@@ -150,10 +155,10 @@ namespace
|
|
|
150
155
|
RtpStreamRecvListener streamRecvListener; // NOLINT(readability-identifier-naming)
|
|
151
156
|
|
|
152
157
|
// NOLINTNEXTLINE(readability-identifier-naming)
|
|
153
|
-
mocks::MockShared shared(/*
|
|
154
|
-
[]()
|
|
158
|
+
mocks::MockShared shared(/*getTimeUs*/
|
|
159
|
+
[]() -> int64_t
|
|
155
160
|
{
|
|
156
|
-
return DepLibUV::
|
|
161
|
+
return DepLibUV::GetTimeUs();
|
|
157
162
|
}); // NOLINT(readability-identifier-naming)
|
|
158
163
|
|
|
159
164
|
std::unique_ptr<RTC::SvcProducerStreamManager> createManager(
|
|
@@ -179,7 +184,7 @@ namespace
|
|
|
179
184
|
kind,
|
|
180
185
|
keyFrameSupported,
|
|
181
186
|
listener,
|
|
182
|
-
|
|
187
|
+
std::addressof(shared));
|
|
183
188
|
}
|
|
184
189
|
|
|
185
190
|
std::unique_ptr<RTC::RTP::RtpStreamRecv> createRtpStreamRecv(
|
|
@@ -192,7 +197,8 @@ namespace
|
|
|
192
197
|
params.spatialLayers = spatialLayers;
|
|
193
198
|
params.temporalLayers = temporalLayers;
|
|
194
199
|
|
|
195
|
-
return std::make_unique<RTC::RTP::RtpStreamRecv>(
|
|
200
|
+
return std::make_unique<RTC::RTP::RtpStreamRecv>(
|
|
201
|
+
std::addressof(streamRecvListener), std::addressof(shared), params, 0u, false);
|
|
196
202
|
}
|
|
197
203
|
|
|
198
204
|
// Feed packets into the RtpStreamRecv so GetBitrate() returns non-zero.
|
|
@@ -204,15 +210,15 @@ namespace
|
|
|
204
210
|
for (uint16_t seq = firstSeq; Utils::Number::IsLowerThan<uint16_t>(seq, lastSeq); ++seq)
|
|
205
211
|
{
|
|
206
212
|
packet->SetSequenceNumber(seq);
|
|
207
|
-
rtpStream->ReceivePacket(packet);
|
|
213
|
+
rtpStream->ReceivePacket(packet, shared.GetTimeUs());
|
|
208
214
|
}
|
|
209
215
|
|
|
210
|
-
|
|
216
|
+
const int64_t nowMs = DepLibUV::GetTimeMs();
|
|
211
217
|
|
|
212
218
|
// bitrate (bps) = totalBytes * 8000 / windowSizeMs.
|
|
213
219
|
// windowSizeMs for RtpStreamRecv is 2500.
|
|
214
|
-
auto expectedBitrate =
|
|
215
|
-
static_cast<
|
|
220
|
+
const auto expectedBitrate =
|
|
221
|
+
static_cast<int64_t>(std::trunc((count * packet->GetLength() * 8000.0f / 2500) + 0.5f));
|
|
216
222
|
|
|
217
223
|
REQUIRE(rtpStream->GetBitrate(nowMs) == expectedBitrate);
|
|
218
224
|
}
|
|
@@ -231,7 +237,7 @@ SCENARIO("SvcProducerStreamManager", "[rtp][producerstreammanager][svc]")
|
|
|
231
237
|
SECTION("ProcessRtpPacket() returns DROP when target spatial layer is -1")
|
|
232
238
|
{
|
|
233
239
|
MockListener listener;
|
|
234
|
-
auto manager = createManager(
|
|
240
|
+
auto manager = createManager(std::addressof(listener));
|
|
235
241
|
auto rtpStream = createRtpStreamRecv();
|
|
236
242
|
|
|
237
243
|
manager->ProducerRtpStream(rtpStream.get(), MappedSsrc);
|
|
@@ -247,7 +253,7 @@ SCENARIO("SvcProducerStreamManager", "[rtp][producerstreammanager][svc]")
|
|
|
247
253
|
SECTION("ProcessRtpPacket() returns DROP when target temporal layer is -1")
|
|
248
254
|
{
|
|
249
255
|
MockListener listener;
|
|
250
|
-
auto manager = createManager(
|
|
256
|
+
auto manager = createManager(std::addressof(listener));
|
|
251
257
|
auto rtpStream = createRtpStreamRecv();
|
|
252
258
|
|
|
253
259
|
manager->ProducerRtpStream(rtpStream.get(), MappedSsrc);
|
|
@@ -265,7 +271,7 @@ SCENARIO("SvcProducerStreamManager", "[rtp][producerstreammanager][svc]")
|
|
|
265
271
|
SECTION("ProcessRtpPacket() returns BUFFER when sync required and packet is not a keyframe")
|
|
266
272
|
{
|
|
267
273
|
MockListener listener;
|
|
268
|
-
auto manager = createManager(
|
|
274
|
+
auto manager = createManager(std::addressof(listener));
|
|
269
275
|
auto rtpStream = createRtpStreamRecv();
|
|
270
276
|
|
|
271
277
|
manager->ProducerRtpStream(rtpStream.get(), MappedSsrc);
|
|
@@ -289,7 +295,7 @@ SCENARIO("SvcProducerStreamManager", "[rtp][producerstreammanager][svc]")
|
|
|
289
295
|
"ProcessRtpPacket() returns FORWARD with isSyncPacket and sendBufferedPackets on keyframe sync")
|
|
290
296
|
{
|
|
291
297
|
MockListener listener;
|
|
292
|
-
auto manager = createManager(
|
|
298
|
+
auto manager = createManager(std::addressof(listener));
|
|
293
299
|
auto rtpStream = createRtpStreamRecv();
|
|
294
300
|
|
|
295
301
|
manager->ProducerRtpStream(rtpStream.get(), MappedSsrc);
|
|
@@ -510,7 +516,7 @@ SCENARIO("SvcProducerStreamManager", "[rtp][producerstreammanager][svc]")
|
|
|
510
516
|
SECTION("UpdateTargetLayers() to -1 resets current and target layers")
|
|
511
517
|
{
|
|
512
518
|
MockListener listener;
|
|
513
|
-
auto manager = createManager(
|
|
519
|
+
auto manager = createManager(std::addressof(listener));
|
|
514
520
|
auto rtpStream = createRtpStreamRecv();
|
|
515
521
|
|
|
516
522
|
manager->ProducerRtpStream(rtpStream.get(), MappedSsrc);
|
|
@@ -529,7 +535,7 @@ SCENARIO("SvcProducerStreamManager", "[rtp][producerstreammanager][svc]")
|
|
|
529
535
|
SECTION("UpdateTargetLayers() fires OnProducerStreamManagerLayersChanged() when setting -1")
|
|
530
536
|
{
|
|
531
537
|
MockListener listener;
|
|
532
|
-
auto manager = createManager(
|
|
538
|
+
auto manager = createManager(std::addressof(listener));
|
|
533
539
|
auto rtpStream = createRtpStreamRecv();
|
|
534
540
|
|
|
535
541
|
manager->ProducerRtpStream(rtpStream.get(), MappedSsrc);
|
|
@@ -544,7 +550,7 @@ SCENARIO("SvcProducerStreamManager", "[rtp][producerstreammanager][svc]")
|
|
|
544
550
|
SECTION("UpdateTargetLayers() requests keyframe for full-SVC spatial upgrade")
|
|
545
551
|
{
|
|
546
552
|
MockListener listener;
|
|
547
|
-
auto manager = createManager(
|
|
553
|
+
auto manager = createManager(std::addressof(listener));
|
|
548
554
|
auto rtpStream = createRtpStreamRecv();
|
|
549
555
|
|
|
550
556
|
manager->ProducerRtpStream(rtpStream.get(), MappedSsrc);
|
|
@@ -564,7 +570,7 @@ SCENARIO("SvcProducerStreamManager", "[rtp][producerstreammanager][svc]")
|
|
|
564
570
|
SECTION("GetProducerCurrentRtpStream() returns nullptr when current spatial layer is -1")
|
|
565
571
|
{
|
|
566
572
|
MockListener listener;
|
|
567
|
-
auto manager = createManager(
|
|
573
|
+
auto manager = createManager(std::addressof(listener));
|
|
568
574
|
auto rtpStream = createRtpStreamRecv();
|
|
569
575
|
|
|
570
576
|
manager->ProducerRtpStream(rtpStream.get(), MappedSsrc);
|
|
@@ -577,7 +583,7 @@ SCENARIO("SvcProducerStreamManager", "[rtp][producerstreammanager][svc]")
|
|
|
577
583
|
SECTION("GetProducerTargetRtpStream() returns nullptr when target spatial layer is -1")
|
|
578
584
|
{
|
|
579
585
|
MockListener listener;
|
|
580
|
-
auto manager = createManager(
|
|
586
|
+
auto manager = createManager(std::addressof(listener));
|
|
581
587
|
auto rtpStream = createRtpStreamRecv();
|
|
582
588
|
|
|
583
589
|
manager->ProducerRtpStream(rtpStream.get(), MappedSsrc);
|
|
@@ -588,7 +594,7 @@ SCENARIO("SvcProducerStreamManager", "[rtp][producerstreammanager][svc]")
|
|
|
588
594
|
SECTION("GetProducerTargetRtpStream() returns the producer stream after UpdateTargetLayers()")
|
|
589
595
|
{
|
|
590
596
|
MockListener listener;
|
|
591
|
-
auto manager = createManager(
|
|
597
|
+
auto manager = createManager(std::addressof(listener));
|
|
592
598
|
auto rtpStream = createRtpStreamRecv();
|
|
593
599
|
|
|
594
600
|
manager->ProducerRtpStream(rtpStream.get(), MappedSsrc);
|
|
@@ -604,7 +610,7 @@ SCENARIO("SvcProducerStreamManager", "[rtp][producerstreammanager][svc]")
|
|
|
604
610
|
MockListener listener;
|
|
605
611
|
listener.isActive = false;
|
|
606
612
|
|
|
607
|
-
auto manager = createManager(
|
|
613
|
+
auto manager = createManager(std::addressof(listener));
|
|
608
614
|
auto rtpStream = createRtpStreamRecv();
|
|
609
615
|
|
|
610
616
|
manager->ProducerRtpStream(rtpStream.get(), MappedSsrc);
|
|
@@ -615,7 +621,7 @@ SCENARIO("SvcProducerStreamManager", "[rtp][producerstreammanager][svc]")
|
|
|
615
621
|
SECTION("IsActive() returns false when no producer stream is set")
|
|
616
622
|
{
|
|
617
623
|
MockListener listener;
|
|
618
|
-
auto manager = createManager(
|
|
624
|
+
auto manager = createManager(std::addressof(listener));
|
|
619
625
|
|
|
620
626
|
// No ProducerRtpStream call.
|
|
621
627
|
REQUIRE(manager->IsActive() == false);
|
|
@@ -624,7 +630,7 @@ SCENARIO("SvcProducerStreamManager", "[rtp][producerstreammanager][svc]")
|
|
|
624
630
|
SECTION("RequestKeyFrame() always uses the single SVC mapped SSRC")
|
|
625
631
|
{
|
|
626
632
|
MockListener listener;
|
|
627
|
-
auto manager = createManager(
|
|
633
|
+
auto manager = createManager(std::addressof(listener));
|
|
628
634
|
auto rtpStream = createRtpStreamRecv();
|
|
629
635
|
|
|
630
636
|
manager->ProducerRtpStream(rtpStream.get(), MappedSsrc);
|
|
@@ -640,7 +646,7 @@ SCENARIO("SvcProducerStreamManager", "[rtp][producerstreammanager][svc]")
|
|
|
640
646
|
SECTION("RequestKeyFrameForTargetSpatialLayer() delegates to single-SSRC RequestKeyFrame()")
|
|
641
647
|
{
|
|
642
648
|
MockListener listener;
|
|
643
|
-
auto manager = createManager(
|
|
649
|
+
auto manager = createManager(std::addressof(listener));
|
|
644
650
|
auto rtpStream = createRtpStreamRecv();
|
|
645
651
|
|
|
646
652
|
manager->ProducerRtpStream(rtpStream.get(), MappedSsrc);
|
|
@@ -725,7 +731,7 @@ SCENARIO("SvcProducerStreamManager", "[rtp][producerstreammanager][svc]")
|
|
|
725
731
|
{
|
|
726
732
|
MockListener listener;
|
|
727
733
|
// Use preferred layer 0 so RecalculateTargetLayers can find it with spatial-layer-0 bitrate.
|
|
728
|
-
auto manager = createManager(
|
|
734
|
+
auto manager = createManager(std::addressof(listener), /*preferredLayers*/ { 0, 0 });
|
|
729
735
|
auto rtpStream = createRtpStreamRecv(MappedSsrc, /*spatialLayers*/ 1u, /*temporalLayers*/ 1u);
|
|
730
736
|
|
|
731
737
|
manager->ProducerRtpStream(rtpStream.get(), MappedSsrc);
|
|
@@ -750,7 +756,7 @@ SCENARIO("SvcProducerStreamManager", "[rtp][producerstreammanager][svc]")
|
|
|
750
756
|
MockListener listener;
|
|
751
757
|
listener.isActive = false;
|
|
752
758
|
|
|
753
|
-
auto manager = createManager(
|
|
759
|
+
auto manager = createManager(std::addressof(listener));
|
|
754
760
|
|
|
755
761
|
// Don't wire producerRtpStream — manager is not active.
|
|
756
762
|
manager->OnTransportConnected();
|
|
@@ -761,7 +767,7 @@ SCENARIO("SvcProducerStreamManager", "[rtp][producerstreammanager][svc]")
|
|
|
761
767
|
SECTION("OnTransportDisconnected() resets target and current layers to -1")
|
|
762
768
|
{
|
|
763
769
|
MockListener listener;
|
|
764
|
-
auto manager = createManager(
|
|
770
|
+
auto manager = createManager(std::addressof(listener));
|
|
765
771
|
auto rtpStream = createRtpStreamRecv();
|
|
766
772
|
|
|
767
773
|
manager->ProducerRtpStream(rtpStream.get(), MappedSsrc);
|
|
@@ -779,7 +785,7 @@ SCENARIO("SvcProducerStreamManager", "[rtp][producerstreammanager][svc]")
|
|
|
779
785
|
SECTION("OnPaused() resets target and current layers to -1")
|
|
780
786
|
{
|
|
781
787
|
MockListener listener;
|
|
782
|
-
auto manager = createManager(
|
|
788
|
+
auto manager = createManager(std::addressof(listener));
|
|
783
789
|
auto rtpStream = createRtpStreamRecv();
|
|
784
790
|
|
|
785
791
|
manager->ProducerRtpStream(rtpStream.get(), MappedSsrc);
|
|
@@ -798,7 +804,7 @@ SCENARIO("SvcProducerStreamManager", "[rtp][producerstreammanager][svc]")
|
|
|
798
804
|
{
|
|
799
805
|
MockListener listener;
|
|
800
806
|
// Use preferred layer 0 so RecalculateTargetLayers can find it with spatial-layer-0 bitrate.
|
|
801
|
-
auto manager = createManager(
|
|
807
|
+
auto manager = createManager(std::addressof(listener), /*preferredLayers*/ { 0, 0 });
|
|
802
808
|
auto rtpStream = createRtpStreamRecv(MappedSsrc, /*spatialLayers*/ 1u, /*temporalLayers*/ 1u);
|
|
803
809
|
|
|
804
810
|
manager->ProducerRtpStream(rtpStream.get(), MappedSsrc);
|
|
@@ -873,12 +879,17 @@ SCENARIO("SvcProducerStreamManager", "[rtp][producerstreammanager][svc]")
|
|
|
873
879
|
SECTION("ProducerNewRtpStream() updates the producer stream and fires score event")
|
|
874
880
|
{
|
|
875
881
|
MockListener listener;
|
|
876
|
-
auto manager = createManager(
|
|
882
|
+
auto manager = createManager(std::addressof(listener));
|
|
877
883
|
auto rtpStream0 = createRtpStreamRecv();
|
|
878
|
-
auto rtpStream1 = createRtpStreamRecv();
|
|
879
884
|
|
|
880
885
|
manager->ProducerRtpStream(rtpStream0.get(), MappedSsrc);
|
|
881
886
|
|
|
887
|
+
// MockShared indexes timers by label, so the stream being replaced must be
|
|
888
|
+
// gone before creating the one replacing it.
|
|
889
|
+
rtpStream0.reset();
|
|
890
|
+
|
|
891
|
+
auto rtpStream1 = createRtpStreamRecv();
|
|
892
|
+
|
|
882
893
|
// Replace with a new stream.
|
|
883
894
|
manager->ProducerNewRtpStream(rtpStream1.get(), MappedSsrc);
|
|
884
895
|
|
|
@@ -891,7 +902,7 @@ SCENARIO("SvcProducerStreamManager", "[rtp][producerstreammanager][svc]")
|
|
|
891
902
|
SECTION("ProducerRtpStreamScore() triggers MayChangeLayers() when stream dies (score==0)")
|
|
892
903
|
{
|
|
893
904
|
MockListener listener;
|
|
894
|
-
auto manager = createManager(
|
|
905
|
+
auto manager = createManager(std::addressof(listener));
|
|
895
906
|
auto rtpStream = createRtpStreamRecv();
|
|
896
907
|
|
|
897
908
|
manager->ProducerRtpStream(rtpStream.get(), MappedSsrc);
|
|
@@ -910,7 +921,7 @@ SCENARIO("SvcProducerStreamManager", "[rtp][producerstreammanager][svc]")
|
|
|
910
921
|
SECTION("ProducerRtpStreamScore() triggers MayChangeLayers() when stream revives (previousScore==0)")
|
|
911
922
|
{
|
|
912
923
|
MockListener listener;
|
|
913
|
-
auto manager = createManager(
|
|
924
|
+
auto manager = createManager(std::addressof(listener));
|
|
914
925
|
auto rtpStream = createRtpStreamRecv();
|
|
915
926
|
|
|
916
927
|
manager->ProducerRtpStream(rtpStream.get(), MappedSsrc);
|
|
@@ -928,32 +939,32 @@ SCENARIO("SvcProducerStreamManager", "[rtp][producerstreammanager][svc]")
|
|
|
928
939
|
SECTION("IncreaseLayer() returns 0 when no producer stream is set")
|
|
929
940
|
{
|
|
930
941
|
MockListener listener;
|
|
931
|
-
auto manager = createManager(
|
|
942
|
+
auto manager = createManager(std::addressof(listener));
|
|
932
943
|
|
|
933
944
|
manager->SetExternallyManagedBitrate();
|
|
934
945
|
|
|
935
|
-
|
|
936
|
-
auto usedBitrate
|
|
937
|
-
/*bitrate*/
|
|
946
|
+
const int64_t nowMs = DepLibUV::GetTimeMs();
|
|
947
|
+
auto usedBitrate = manager->IncreaseLayer(
|
|
948
|
+
/*bitrate*/ 1000000, /*considerLoss*/ false, /*lossPercentage*/ 0.0f, nowMs);
|
|
938
949
|
|
|
939
|
-
REQUIRE(usedBitrate ==
|
|
950
|
+
REQUIRE(usedBitrate == 0);
|
|
940
951
|
}
|
|
941
952
|
|
|
942
953
|
SECTION("IncreaseLayer() returns 0 when producer stream has score 0")
|
|
943
954
|
{
|
|
944
955
|
MockListener listener;
|
|
945
|
-
auto manager = createManager(
|
|
956
|
+
auto manager = createManager(std::addressof(listener));
|
|
946
957
|
auto rtpStream = createRtpStreamRecv();
|
|
947
958
|
|
|
948
959
|
manager->ProducerRtpStream(rtpStream.get(), MappedSsrc);
|
|
949
960
|
manager->SetExternallyManagedBitrate();
|
|
950
961
|
|
|
951
962
|
// Score is 0 by default (no RTP received + inactivity check disabled).
|
|
952
|
-
|
|
953
|
-
auto usedBitrate
|
|
954
|
-
/*bitrate*/
|
|
963
|
+
const int64_t nowMs = DepLibUV::GetTimeMs();
|
|
964
|
+
auto usedBitrate = manager->IncreaseLayer(
|
|
965
|
+
/*bitrate*/ 1000000, /*considerLoss*/ false, /*lossPercentage*/ 0.0f, nowMs);
|
|
955
966
|
|
|
956
|
-
REQUIRE(usedBitrate ==
|
|
967
|
+
REQUIRE(usedBitrate == 0);
|
|
957
968
|
}
|
|
958
969
|
|
|
959
970
|
SECTION("IncreaseLayer() returns 0 on second call in same iteration (already at preferred layers)")
|
|
@@ -976,19 +987,19 @@ SCENARIO("SvcProducerStreamManager", "[rtp][producerstreammanager][svc]")
|
|
|
976
987
|
// Feed packets so the stream has non-zero bitrate.
|
|
977
988
|
feedRtpStreamRecv(rtpStream.get(), packet.get(), 100);
|
|
978
989
|
|
|
979
|
-
|
|
990
|
+
const int64_t nowMs = DepLibUV::GetTimeMs();
|
|
980
991
|
|
|
981
992
|
// First call claims bitrate.
|
|
982
993
|
auto usedBitrate = manager->IncreaseLayer(
|
|
983
|
-
/*bitrate*/
|
|
994
|
+
/*bitrate*/ 1000000, /*considerLoss*/ false, /*lossPercentage*/ 0.0f, nowMs);
|
|
984
995
|
|
|
985
|
-
REQUIRE(usedBitrate >
|
|
996
|
+
REQUIRE(usedBitrate > 0);
|
|
986
997
|
|
|
987
998
|
// Second call in same iteration should return 0 (already at preferred layers).
|
|
988
999
|
auto usedBitrate2 = manager->IncreaseLayer(
|
|
989
|
-
/*bitrate*/
|
|
1000
|
+
/*bitrate*/ 1000000, /*considerLoss*/ false, /*lossPercentage*/ 0.0f, nowMs);
|
|
990
1001
|
|
|
991
|
-
REQUIRE(usedBitrate2 ==
|
|
1002
|
+
REQUIRE(usedBitrate2 == 0);
|
|
992
1003
|
}
|
|
993
1004
|
|
|
994
1005
|
SECTION("IncreaseLayer() works again after ApplyLayers()")
|
|
@@ -1010,18 +1021,18 @@ SCENARIO("SvcProducerStreamManager", "[rtp][producerstreammanager][svc]")
|
|
|
1010
1021
|
// Feed packets so the stream has non-zero bitrate.
|
|
1011
1022
|
feedRtpStreamRecv(rtpStream.get(), packet.get(), 100);
|
|
1012
1023
|
|
|
1013
|
-
|
|
1024
|
+
const int64_t nowMs = DepLibUV::GetTimeMs();
|
|
1014
1025
|
|
|
1015
1026
|
// First iteration.
|
|
1016
1027
|
manager->IncreaseLayer(
|
|
1017
|
-
/*bitrate*/
|
|
1028
|
+
/*bitrate*/ 1000000, /*considerLoss*/ false, /*lossPercentage*/ 0.0f, nowMs);
|
|
1018
1029
|
manager->ApplyLayers(/*rtpStreamActiveMs*/ 0u);
|
|
1019
1030
|
|
|
1020
1031
|
// After ApplyLayers, IncreaseLayer should work again.
|
|
1021
1032
|
auto usedBitrate = manager->IncreaseLayer(
|
|
1022
|
-
/*bitrate*/
|
|
1033
|
+
/*bitrate*/ 1000000, /*considerLoss*/ false, /*lossPercentage*/ 0.0f, nowMs);
|
|
1023
1034
|
|
|
1024
|
-
REQUIRE(usedBitrate >
|
|
1035
|
+
REQUIRE(usedBitrate > 0);
|
|
1025
1036
|
}
|
|
1026
1037
|
|
|
1027
1038
|
SECTION("ApplyLayers() records BWE downgrade when spatial layer drops below current")
|
|
@@ -1069,12 +1080,12 @@ SCENARIO("SvcProducerStreamManager", "[rtp][producerstreammanager][svc]")
|
|
|
1069
1080
|
SECTION("GetDesiredBitrate() returns 0 when no producer stream is set")
|
|
1070
1081
|
{
|
|
1071
1082
|
MockListener listener;
|
|
1072
|
-
auto manager = createManager(
|
|
1083
|
+
auto manager = createManager(std::addressof(listener));
|
|
1073
1084
|
|
|
1074
|
-
|
|
1085
|
+
const int64_t nowMs = DepLibUV::GetTimeMs();
|
|
1075
1086
|
auto desiredBitrate = manager->GetDesiredBitrate(nowMs);
|
|
1076
1087
|
|
|
1077
|
-
REQUIRE(desiredBitrate ==
|
|
1088
|
+
REQUIRE(desiredBitrate == 0);
|
|
1078
1089
|
}
|
|
1079
1090
|
|
|
1080
1091
|
SECTION("GetDesiredBitrate() (full SVC) returns total stream bitrate")
|
|
@@ -1095,7 +1106,7 @@ SCENARIO("SvcProducerStreamManager", "[rtp][producerstreammanager][svc]")
|
|
|
1095
1106
|
|
|
1096
1107
|
feedRtpStreamRecv(rtpStream.get(), packet.get(), 100);
|
|
1097
1108
|
|
|
1098
|
-
|
|
1109
|
+
const int64_t nowMs = DepLibUV::GetTimeMs();
|
|
1099
1110
|
auto streamBitrate = rtpStream->GetBitrate(nowMs);
|
|
1100
1111
|
auto desiredBitrate = manager->GetDesiredBitrate(nowMs);
|
|
1101
1112
|
|
|
@@ -1121,19 +1132,19 @@ SCENARIO("SvcProducerStreamManager", "[rtp][producerstreammanager][svc]")
|
|
|
1121
1132
|
// Feed packets so total stream bitrate > 0.
|
|
1122
1133
|
feedRtpStreamRecv(rtpStream.get(), packet.get(), 100);
|
|
1123
1134
|
|
|
1124
|
-
|
|
1135
|
+
const int64_t nowMs = DepLibUV::GetTimeMs();
|
|
1125
1136
|
auto desiredBitrate = manager->GetDesiredBitrate(nowMs);
|
|
1126
1137
|
|
|
1127
1138
|
// K-SVC returns the max per-spatial-layer bitrate. With a plain RtpStreamRecv
|
|
1128
1139
|
// and no per-layer packet tagging the returned value may be 0 or > 0.
|
|
1129
1140
|
// The contract is just: no crash and type is uint32_t.
|
|
1130
|
-
REQUIRE(desiredBitrate >=
|
|
1141
|
+
REQUIRE(desiredBitrate >= 0);
|
|
1131
1142
|
}
|
|
1132
1143
|
|
|
1133
1144
|
SECTION("RecalculateTargetLayers() returns false when no producer stream is set")
|
|
1134
1145
|
{
|
|
1135
1146
|
MockListener listener;
|
|
1136
|
-
auto manager = createManager(
|
|
1147
|
+
auto manager = createManager(std::addressof(listener));
|
|
1137
1148
|
|
|
1138
1149
|
RTC::ConsumerTypes::VideoLayers newTargetLayers;
|
|
1139
1150
|
const bool changed = manager->RecalculateTargetLayers(newTargetLayers);
|
|
@@ -1146,7 +1157,7 @@ SCENARIO("SvcProducerStreamManager", "[rtp][producerstreammanager][svc]")
|
|
|
1146
1157
|
SECTION("RecalculateTargetLayers() resets layers when stream score is 0")
|
|
1147
1158
|
{
|
|
1148
1159
|
MockListener listener;
|
|
1149
|
-
auto manager = createManager(
|
|
1160
|
+
auto manager = createManager(std::addressof(listener));
|
|
1150
1161
|
auto rtpStream = createRtpStreamRecv();
|
|
1151
1162
|
|
|
1152
1163
|
manager->ProducerRtpStream(rtpStream.get(), MappedSsrc);
|
|
@@ -1232,8 +1243,8 @@ SCENARIO("SvcProducerStreamManager", "[rtp][producerstreammanager][svc]")
|
|
|
1232
1243
|
|
|
1233
1244
|
feedRtpStreamRecv(rtpStream.get(), packet.get(), 100);
|
|
1234
1245
|
|
|
1235
|
-
|
|
1236
|
-
auto streamBitrate
|
|
1246
|
+
const int64_t nowMs = DepLibUV::GetTimeMs();
|
|
1247
|
+
auto streamBitrate = rtpStream->GetBitrate(nowMs);
|
|
1237
1248
|
|
|
1238
1249
|
// With 1% loss virtualBitrate = 1.08 * bitrate, so we can afford the stream
|
|
1239
1250
|
// even with slightly less physical bitrate available.
|
|
@@ -1243,7 +1254,7 @@ SCENARIO("SvcProducerStreamManager", "[rtp][producerstreammanager][svc]")
|
|
|
1243
1254
|
availableBitrate, /*considerLoss*/ true, /*lossPercentage*/ 1.0f, nowMs);
|
|
1244
1255
|
|
|
1245
1256
|
// virtualBitrate = 1.08 * availableBitrate >= streamBitrate, so the layer is taken.
|
|
1246
|
-
REQUIRE(usedBitrate >
|
|
1257
|
+
REQUIRE(usedBitrate > 0);
|
|
1247
1258
|
}
|
|
1248
1259
|
|
|
1249
1260
|
SECTION("IncreaseLayer() uses reduced virtual bitrate when considerLoss is true and loss > 10%")
|
|
@@ -1263,8 +1274,8 @@ SCENARIO("SvcProducerStreamManager", "[rtp][producerstreammanager][svc]")
|
|
|
1263
1274
|
|
|
1264
1275
|
feedRtpStreamRecv(rtpStream.get(), packet.get(), 100);
|
|
1265
1276
|
|
|
1266
|
-
|
|
1267
|
-
auto streamBitrate
|
|
1277
|
+
const int64_t nowMs = DepLibUV::GetTimeMs();
|
|
1278
|
+
auto streamBitrate = rtpStream->GetBitrate(nowMs);
|
|
1268
1279
|
|
|
1269
1280
|
// With 50% loss virtualBitrate = (1 - 0.5*0.5) * bitrate = 0.75 * bitrate.
|
|
1270
1281
|
// Pass available = streamBitrate but virtual will be reduced below required.
|
|
@@ -1273,6 +1284,6 @@ SCENARIO("SvcProducerStreamManager", "[rtp][producerstreammanager][svc]")
|
|
|
1273
1284
|
|
|
1274
1285
|
// virtualBitrate = 0.75 * streamBitrate < streamBitrate (requiredBitrate),
|
|
1275
1286
|
// so the layer cannot be taken → 0.
|
|
1276
|
-
REQUIRE(usedBitrate ==
|
|
1287
|
+
REQUIRE(usedBitrate == 0);
|
|
1277
1288
|
}
|
|
1278
1289
|
}
|