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
|
@@ -74,6 +74,11 @@ namespace
|
|
|
74
74
|
{
|
|
75
75
|
return 0;
|
|
76
76
|
}
|
|
77
|
+
|
|
78
|
+
void OnRtpStreamSpatialLayerActivityChanged(
|
|
79
|
+
RTC::RTP::RtpStreamRecv* /*rtpStream*/, uint8_t /*spatialLayer*/, bool /*isActive*/) override
|
|
80
|
+
{
|
|
81
|
+
}
|
|
77
82
|
};
|
|
78
83
|
|
|
79
84
|
class MockEncodingContext : public RTC::RTP::Codecs::EncodingContext
|
|
@@ -144,10 +149,10 @@ namespace
|
|
|
144
149
|
RtpStreamRecvListener streamRecvListener; // NOLINT(readability-identifier-naming)
|
|
145
150
|
|
|
146
151
|
// NOLINTNEXTLINE(readability-identifier-naming)
|
|
147
|
-
mocks::MockShared shared(/*
|
|
148
|
-
[]()
|
|
152
|
+
mocks::MockShared shared(/*getTimeUs*/
|
|
153
|
+
[]() -> int64_t
|
|
149
154
|
{
|
|
150
|
-
return DepLibUV::
|
|
155
|
+
return DepLibUV::GetTimeUs();
|
|
151
156
|
}); // NOLINT(readability-identifier-naming)
|
|
152
157
|
|
|
153
158
|
std::unique_ptr<RTC::SimulcastProducerStreamManager> 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(uint32_t ssrc)
|
|
@@ -189,7 +194,8 @@ namespace
|
|
|
189
194
|
params.ssrc = ssrc;
|
|
190
195
|
params.clockRate = 90000;
|
|
191
196
|
|
|
192
|
-
return std::make_unique<RTC::RTP::RtpStreamRecv>(
|
|
197
|
+
return std::make_unique<RTC::RTP::RtpStreamRecv>(
|
|
198
|
+
std::addressof(streamRecvListener), std::addressof(shared), params, 0u, false);
|
|
193
199
|
}
|
|
194
200
|
|
|
195
201
|
// Feed packets into the RtpStreamRecv so GetBitrate() returns non-zero.
|
|
@@ -201,15 +207,15 @@ namespace
|
|
|
201
207
|
for (uint16_t seq = firstSeq; Utils::Number::IsLowerThan<uint16_t>(seq, lastSeq); ++seq)
|
|
202
208
|
{
|
|
203
209
|
packet->SetSequenceNumber(seq);
|
|
204
|
-
rtpStream->ReceivePacket(packet);
|
|
210
|
+
rtpStream->ReceivePacket(packet, shared.GetTimeUs());
|
|
205
211
|
}
|
|
206
212
|
|
|
207
|
-
|
|
213
|
+
const int64_t nowMs = DepLibUV::GetTimeMs();
|
|
208
214
|
|
|
209
215
|
// bitrate (bps) = totalBytes * 8000 / windowSizeMs.
|
|
210
216
|
// windowSizeMs for RtpStreamRecv is 2500.
|
|
211
|
-
auto expectedBitrate =
|
|
212
|
-
static_cast<
|
|
217
|
+
const auto expectedBitrate =
|
|
218
|
+
static_cast<int64_t>(std::trunc((count * packet->GetLength() * 8000.0f / 2500) + 0.5f));
|
|
213
219
|
|
|
214
220
|
REQUIRE(rtpStream->GetBitrate(nowMs) == expectedBitrate);
|
|
215
221
|
}
|
|
@@ -228,7 +234,7 @@ SCENARIO("SimulcastProducerStreamManager", "[rtp][producerstreammanager][simulca
|
|
|
228
234
|
SECTION("ProcessRtpPacket() returns DROP when target temporal layer is -1")
|
|
229
235
|
{
|
|
230
236
|
MockListener listener;
|
|
231
|
-
auto manager = createManager(
|
|
237
|
+
auto manager = createManager(std::addressof(listener));
|
|
232
238
|
auto rtpStream0 = createRtpStreamRecv(MappedSsrc0);
|
|
233
239
|
|
|
234
240
|
manager->ProducerRtpStream(rtpStream0.get(), MappedSsrc0);
|
|
@@ -261,7 +267,7 @@ SCENARIO("SimulcastProducerStreamManager", "[rtp][producerstreammanager][simulca
|
|
|
261
267
|
"ProcessRtpPacket() returns BUFFER when sync required and packet is from target spatial layer but not keyframe")
|
|
262
268
|
{
|
|
263
269
|
MockListener listener;
|
|
264
|
-
auto manager = createManager(
|
|
270
|
+
auto manager = createManager(std::addressof(listener));
|
|
265
271
|
auto rtpStream0 = createRtpStreamRecv(MappedSsrc0);
|
|
266
272
|
|
|
267
273
|
manager->ProducerRtpStream(rtpStream0.get(), MappedSsrc0);
|
|
@@ -281,7 +287,7 @@ SCENARIO("SimulcastProducerStreamManager", "[rtp][producerstreammanager][simulca
|
|
|
281
287
|
SECTION("ProcessRtpPacket() requires keyframe for spatial layer switch")
|
|
282
288
|
{
|
|
283
289
|
MockListener listener;
|
|
284
|
-
auto manager = createManager(
|
|
290
|
+
auto manager = createManager(std::addressof(listener));
|
|
285
291
|
auto rtpStream0 = createRtpStreamRecv(MappedSsrc0);
|
|
286
292
|
auto rtpStream1 = createRtpStreamRecv(MappedSsrc1);
|
|
287
293
|
|
|
@@ -338,7 +344,7 @@ SCENARIO("SimulcastProducerStreamManager", "[rtp][producerstreammanager][simulca
|
|
|
338
344
|
SECTION("ProcessRtpPacket() returns SILENT_DROP for non-target and non-current spatial layer packet")
|
|
339
345
|
{
|
|
340
346
|
MockListener listener;
|
|
341
|
-
auto manager = createManager(
|
|
347
|
+
auto manager = createManager(std::addressof(listener));
|
|
342
348
|
auto rtpStream0 = createRtpStreamRecv(MappedSsrc0);
|
|
343
349
|
|
|
344
350
|
manager->ProducerRtpStream(rtpStream0.get(), MappedSsrc0);
|
|
@@ -373,7 +379,7 @@ SCENARIO("SimulcastProducerStreamManager", "[rtp][producerstreammanager][simulca
|
|
|
373
379
|
"ProcessRtpPacket() returns SILENT_DROP when sync required and packet is from non-target spatial layer")
|
|
374
380
|
{
|
|
375
381
|
MockListener listener;
|
|
376
|
-
auto manager = createManager(
|
|
382
|
+
auto manager = createManager(std::addressof(listener), /*ssrcs*/ TwoSsrcs);
|
|
377
383
|
auto rtpStream0 = createRtpStreamRecv(MappedSsrc0);
|
|
378
384
|
auto rtpStream1 = createRtpStreamRecv(MappedSsrc1);
|
|
379
385
|
|
|
@@ -396,7 +402,7 @@ SCENARIO("SimulcastProducerStreamManager", "[rtp][producerstreammanager][simulca
|
|
|
396
402
|
SECTION("ProcessRtpPacket() returns FORWARD with sendBufferedPackets when syncing with a keyframe")
|
|
397
403
|
{
|
|
398
404
|
MockListener listener;
|
|
399
|
-
auto manager = createManager(
|
|
405
|
+
auto manager = createManager(std::addressof(listener));
|
|
400
406
|
auto rtpStream0 = createRtpStreamRecv(MappedSsrc0);
|
|
401
407
|
|
|
402
408
|
manager->ProducerRtpStream(rtpStream0.get(), MappedSsrc0);
|
|
@@ -423,7 +429,7 @@ SCENARIO("SimulcastProducerStreamManager", "[rtp][producerstreammanager][simulca
|
|
|
423
429
|
{
|
|
424
430
|
MockListener listener;
|
|
425
431
|
auto manager = createManager(
|
|
426
|
-
|
|
432
|
+
std::addressof(listener),
|
|
427
433
|
/*ssrcs*/ ThreeSsrcs,
|
|
428
434
|
/*preferredLayers*/ { 2, 2 },
|
|
429
435
|
/*keyFrameSupported*/ false);
|
|
@@ -449,7 +455,7 @@ SCENARIO("SimulcastProducerStreamManager", "[rtp][producerstreammanager][simulca
|
|
|
449
455
|
{
|
|
450
456
|
MockListener listener;
|
|
451
457
|
auto manager = createManager(
|
|
452
|
-
|
|
458
|
+
std::addressof(listener),
|
|
453
459
|
/*ssrcs*/ ThreeSsrcs,
|
|
454
460
|
/*preferredLayers*/ { 2, 2 },
|
|
455
461
|
/*keyFrameSupported*/ false);
|
|
@@ -478,7 +484,7 @@ SCENARIO("SimulcastProducerStreamManager", "[rtp][producerstreammanager][simulca
|
|
|
478
484
|
{
|
|
479
485
|
MockListener listener;
|
|
480
486
|
auto manager = createManager(
|
|
481
|
-
|
|
487
|
+
std::addressof(listener),
|
|
482
488
|
/*ssrcs*/ ThreeSsrcs,
|
|
483
489
|
/*preferredLayers*/ { 2, 2 },
|
|
484
490
|
/*keyFrameSupported*/ false);
|
|
@@ -507,7 +513,7 @@ SCENARIO("SimulcastProducerStreamManager", "[rtp][producerstreammanager][simulca
|
|
|
507
513
|
{
|
|
508
514
|
MockListener listener;
|
|
509
515
|
auto manager = createManager(
|
|
510
|
-
|
|
516
|
+
std::addressof(listener),
|
|
511
517
|
/*ssrcs*/ ThreeSsrcs,
|
|
512
518
|
/*preferredLayers*/ { 2, 2 },
|
|
513
519
|
/*keyFrameSupported*/ false);
|
|
@@ -537,7 +543,7 @@ SCENARIO("SimulcastProducerStreamManager", "[rtp][producerstreammanager][simulca
|
|
|
537
543
|
{
|
|
538
544
|
MockListener listener;
|
|
539
545
|
auto manager = createManager(
|
|
540
|
-
|
|
546
|
+
std::addressof(listener),
|
|
541
547
|
/*ssrcs*/ TwoSsrcs,
|
|
542
548
|
/*preferredLayers*/ { 1, 0 },
|
|
543
549
|
/*keyFrameSupported*/ false);
|
|
@@ -590,7 +596,7 @@ SCENARIO("SimulcastProducerStreamManager", "[rtp][producerstreammanager][simulca
|
|
|
590
596
|
{
|
|
591
597
|
MockListener listener;
|
|
592
598
|
auto manager = createManager(
|
|
593
|
-
|
|
599
|
+
std::addressof(listener),
|
|
594
600
|
/*ssrcs*/ OneSsrc,
|
|
595
601
|
/*preferredLayers*/ { 0, 0 },
|
|
596
602
|
/*keyFrameSupported*/ false);
|
|
@@ -632,7 +638,8 @@ SCENARIO("SimulcastProducerStreamManager", "[rtp][producerstreammanager][simulca
|
|
|
632
638
|
SECTION("OnTransportConnected() requests keyframe when active and target changes")
|
|
633
639
|
{
|
|
634
640
|
MockListener listener;
|
|
635
|
-
auto manager
|
|
641
|
+
auto manager =
|
|
642
|
+
createManager(std::addressof(listener), /*ssrcs*/ TwoSsrcs, /*preferredLayers*/ { 1, 0 });
|
|
636
643
|
auto rtpStream0 = createRtpStreamRecv(MappedSsrc0);
|
|
637
644
|
auto rtpStream1 = createRtpStreamRecv(MappedSsrc1);
|
|
638
645
|
|
|
@@ -673,7 +680,7 @@ SCENARIO("SimulcastProducerStreamManager", "[rtp][producerstreammanager][simulca
|
|
|
673
680
|
MockListener listener;
|
|
674
681
|
listener.isActive = false;
|
|
675
682
|
|
|
676
|
-
auto manager = createManager(
|
|
683
|
+
auto manager = createManager(std::addressof(listener));
|
|
677
684
|
|
|
678
685
|
// Don't wire producerRtpStream — manager is not active.
|
|
679
686
|
manager->OnTransportConnected();
|
|
@@ -684,7 +691,8 @@ SCENARIO("SimulcastProducerStreamManager", "[rtp][producerstreammanager][simulca
|
|
|
684
691
|
SECTION("RecalculateTargetLayers() skips spatial layer without capture instant")
|
|
685
692
|
{
|
|
686
693
|
MockListener listener;
|
|
687
|
-
auto manager
|
|
694
|
+
auto manager =
|
|
695
|
+
createManager(std::addressof(listener), /*ssrcs*/ TwoSsrcs, /*preferredLayers*/ { 1, 0 });
|
|
688
696
|
auto rtpStream0 = createRtpStreamRecv(MappedSsrc0);
|
|
689
697
|
auto rtpStream1 = createRtpStreamRecv(MappedSsrc1);
|
|
690
698
|
|
|
@@ -736,7 +744,8 @@ SCENARIO("SimulcastProducerStreamManager", "[rtp][producerstreammanager][simulca
|
|
|
736
744
|
SECTION("RecalculateTargetLayers() switches to preferred layer once its capture instant is known")
|
|
737
745
|
{
|
|
738
746
|
MockListener listener;
|
|
739
|
-
auto manager
|
|
747
|
+
auto manager =
|
|
748
|
+
createManager(std::addressof(listener), /*ssrcs*/ TwoSsrcs, /*preferredLayers*/ { 1, 0 });
|
|
740
749
|
auto rtpStream0 = createRtpStreamRecv(MappedSsrc0);
|
|
741
750
|
auto rtpStream1 = createRtpStreamRecv(MappedSsrc1);
|
|
742
751
|
|
|
@@ -762,8 +771,8 @@ SCENARIO("SimulcastProducerStreamManager", "[rtp][producerstreammanager][simulca
|
|
|
762
771
|
|
|
763
772
|
// Both layers hold RTP timestamp 1000 and both were captured at the same instant,
|
|
764
773
|
// which is what makes them alignable to each other.
|
|
765
|
-
rtpStream0->SetCaptureMapping(/*
|
|
766
|
-
rtpStream1->SetCaptureMapping(/*
|
|
774
|
+
rtpStream0->SetCaptureMapping(/*captureAtUs*/ 1000 * 1000, /*ts*/ 1000);
|
|
775
|
+
rtpStream1->SetCaptureMapping(/*captureAtUs*/ 1000 * 1000, /*ts*/ 1000);
|
|
767
776
|
|
|
768
777
|
// Feed packets to both streams so ReceiveRtcpSenderReport's UpdateScore
|
|
769
778
|
// doesn't drop the score to 0.
|
|
@@ -779,14 +788,14 @@ SCENARIO("SimulcastProducerStreamManager", "[rtp][producerstreammanager][simulca
|
|
|
779
788
|
sr0.SetNtpSec(1000);
|
|
780
789
|
sr0.SetNtpFrac(0);
|
|
781
790
|
sr0.SetRtpTs(90000);
|
|
782
|
-
rtpStream0->ReceiveRtcpSenderReport(
|
|
791
|
+
rtpStream0->ReceiveRtcpSenderReport(std::addressof(sr0), shared.GetTimeUs());
|
|
783
792
|
|
|
784
793
|
RTC::RTCP::SenderReport sr1;
|
|
785
794
|
sr1.SetSsrc(MappedSsrc1);
|
|
786
795
|
sr1.SetNtpSec(1000);
|
|
787
796
|
sr1.SetNtpFrac(0);
|
|
788
797
|
sr1.SetRtpTs(90000);
|
|
789
|
-
rtpStream1->ReceiveRtcpSenderReport(
|
|
798
|
+
rtpStream1->ReceiveRtcpSenderReport(std::addressof(sr1), shared.GetTimeUs());
|
|
790
799
|
|
|
791
800
|
// Notify the manager about the first Sender Report for layer 1.
|
|
792
801
|
// This triggers MayChangeLayers() -> RecalculateTargetLayers().
|
|
@@ -817,7 +826,8 @@ SCENARIO("SimulcastProducerStreamManager", "[rtp][producerstreammanager][simulca
|
|
|
817
826
|
SECTION("ProcessRtpPacket() calculates tsOffset from the capture instant of both layers")
|
|
818
827
|
{
|
|
819
828
|
MockListener listener;
|
|
820
|
-
auto manager
|
|
829
|
+
auto manager =
|
|
830
|
+
createManager(std::addressof(listener), /*ssrcs*/ TwoSsrcs, /*preferredLayers*/ { 1, 0 });
|
|
821
831
|
auto rtpStream0 = createRtpStreamRecv(MappedSsrc0);
|
|
822
832
|
auto rtpStream1 = createRtpStreamRecv(MappedSsrc1);
|
|
823
833
|
|
|
@@ -840,8 +850,8 @@ SCENARIO("SimulcastProducerStreamManager", "[rtp][producerstreammanager][simulca
|
|
|
840
850
|
|
|
841
851
|
// Both layers hold RTP timestamp 1000, but the one of layer 1 was captured 500 ms
|
|
842
852
|
// before the one of layer 0, so its RTP timeline runs 45000 ticks ahead.
|
|
843
|
-
rtpStream0->SetCaptureMapping(/*
|
|
844
|
-
rtpStream1->SetCaptureMapping(/*
|
|
853
|
+
rtpStream0->SetCaptureMapping(/*captureAtUs*/ 1000 * 1000, /*ts*/ 1000);
|
|
854
|
+
rtpStream1->SetCaptureMapping(/*captureAtUs*/ 500 * 1000, /*ts*/ 1000);
|
|
845
855
|
|
|
846
856
|
packet->SetSsrc(MappedSsrc0);
|
|
847
857
|
feedRtpStreamRecv(rtpStream0.get(), packet.get(), 10);
|
|
@@ -855,14 +865,14 @@ SCENARIO("SimulcastProducerStreamManager", "[rtp][producerstreammanager][simulca
|
|
|
855
865
|
sr0.SetNtpSec(1000);
|
|
856
866
|
sr0.SetNtpFrac(0);
|
|
857
867
|
sr0.SetRtpTs(90000);
|
|
858
|
-
rtpStream0->ReceiveRtcpSenderReport(
|
|
868
|
+
rtpStream0->ReceiveRtcpSenderReport(std::addressof(sr0), shared.GetTimeUs());
|
|
859
869
|
|
|
860
870
|
RTC::RTCP::SenderReport sr1;
|
|
861
871
|
sr1.SetSsrc(MappedSsrc1);
|
|
862
872
|
sr1.SetNtpSec(1000);
|
|
863
873
|
sr1.SetNtpFrac(0);
|
|
864
874
|
sr1.SetRtpTs(90000);
|
|
865
|
-
rtpStream1->ReceiveRtcpSenderReport(
|
|
875
|
+
rtpStream1->ReceiveRtcpSenderReport(std::addressof(sr1), shared.GetTimeUs());
|
|
866
876
|
|
|
867
877
|
manager->ProducerRtcpSenderReport(rtpStream1.get(), /*first*/ true);
|
|
868
878
|
|
|
@@ -891,7 +901,7 @@ SCENARIO("SimulcastProducerStreamManager", "[rtp][producerstreammanager][simulca
|
|
|
891
901
|
{
|
|
892
902
|
MockListener listener;
|
|
893
903
|
auto manager = createManager(
|
|
894
|
-
|
|
904
|
+
std::addressof(listener),
|
|
895
905
|
/*ssrcs*/ TwoSsrcs,
|
|
896
906
|
/*preferredLayers*/ { 1, 0 },
|
|
897
907
|
/*keyFrameSupported*/ false);
|
|
@@ -903,7 +913,7 @@ SCENARIO("SimulcastProducerStreamManager", "[rtp][producerstreammanager][simulca
|
|
|
903
913
|
|
|
904
914
|
// Only layer 0 can tell its capture instant, so it remains the TS reference one and
|
|
905
915
|
// layer 1 cannot be aligned to it yet.
|
|
906
|
-
rtpStream0->SetCaptureMapping(/*
|
|
916
|
+
rtpStream0->SetCaptureMapping(/*captureAtUs*/ 1000 * 1000, /*ts*/ 1000);
|
|
907
917
|
|
|
908
918
|
// Set target layer to 0 and sync. This sets tsReferenceSpatialLayer = 0.
|
|
909
919
|
manager->UpdateTargetLayers(0, 0);
|
|
@@ -933,7 +943,7 @@ SCENARIO("SimulcastProducerStreamManager", "[rtp][producerstreammanager][simulca
|
|
|
933
943
|
|
|
934
944
|
// Once layer 1 can tell its capture instant the switch completes with the proper
|
|
935
945
|
// offset.
|
|
936
|
-
rtpStream1->SetCaptureMapping(/*
|
|
946
|
+
rtpStream1->SetCaptureMapping(/*captureAtUs*/ 500 * 1000, /*ts*/ 1000);
|
|
937
947
|
|
|
938
948
|
packet->SetSequenceNumber(2);
|
|
939
949
|
|
|
@@ -952,7 +962,7 @@ SCENARIO("SimulcastProducerStreamManager", "[rtp][producerstreammanager][simulca
|
|
|
952
962
|
{
|
|
953
963
|
MockListener listener;
|
|
954
964
|
auto manager = createManager(
|
|
955
|
-
|
|
965
|
+
std::addressof(listener),
|
|
956
966
|
/*ssrcs*/ TwoSsrcs,
|
|
957
967
|
/*preferredLayers*/ { 1, 0 },
|
|
958
968
|
/*keyFrameSupported*/ false);
|
|
@@ -976,7 +986,7 @@ SCENARIO("SimulcastProducerStreamManager", "[rtp][producerstreammanager][simulca
|
|
|
976
986
|
sr.SetNtpSec(1000);
|
|
977
987
|
sr.SetNtpFrac(0);
|
|
978
988
|
sr.SetRtpTs(90000);
|
|
979
|
-
rtpStream->ReceiveRtcpSenderReport(
|
|
989
|
+
rtpStream->ReceiveRtcpSenderReport(std::addressof(sr), shared.GetTimeUs());
|
|
980
990
|
}
|
|
981
991
|
|
|
982
992
|
// Set target layer to 0 and sync. This sets tsReferenceSpatialLayer = 0.
|
|
@@ -1016,15 +1026,16 @@ SCENARIO("SimulcastProducerStreamManager", "[rtp][producerstreammanager][simulca
|
|
|
1016
1026
|
"one of its stream")
|
|
1017
1027
|
{
|
|
1018
1028
|
MockListener listener;
|
|
1019
|
-
auto manager
|
|
1029
|
+
auto manager =
|
|
1030
|
+
createManager(std::addressof(listener), /*ssrcs*/ TwoSsrcs, /*preferredLayers*/ { 1, 0 });
|
|
1020
1031
|
auto rtpStream0 = createRtpStreamRecv(MappedSsrc0);
|
|
1021
1032
|
auto rtpStream1 = createRtpStreamRecv(MappedSsrc1);
|
|
1022
1033
|
|
|
1023
1034
|
manager->ProducerRtpStream(rtpStream0.get(), MappedSsrc0);
|
|
1024
1035
|
manager->ProducerRtpStream(rtpStream1.get(), MappedSsrc1);
|
|
1025
1036
|
|
|
1026
|
-
rtpStream0->SetCaptureMapping(/*
|
|
1027
|
-
rtpStream1->SetCaptureMapping(/*
|
|
1037
|
+
rtpStream0->SetCaptureMapping(/*captureAtUs*/ 1000 * 1000, /*ts*/ 1000);
|
|
1038
|
+
rtpStream1->SetCaptureMapping(/*captureAtUs*/ 1000 * 1000, /*ts*/ 1000);
|
|
1028
1039
|
|
|
1029
1040
|
// Feed packets and a Sender Report to both streams so that they get a score and
|
|
1030
1041
|
// RecalculateTargetLayers() takes them into account.
|
|
@@ -1038,7 +1049,7 @@ SCENARIO("SimulcastProducerStreamManager", "[rtp][producerstreammanager][simulca
|
|
|
1038
1049
|
sr.SetNtpSec(1000);
|
|
1039
1050
|
sr.SetNtpFrac(0);
|
|
1040
1051
|
sr.SetRtpTs(90000);
|
|
1041
|
-
rtpStream->ReceiveRtcpSenderReport(
|
|
1052
|
+
rtpStream->ReceiveRtcpSenderReport(std::addressof(sr), shared.GetTimeUs());
|
|
1042
1053
|
}
|
|
1043
1054
|
|
|
1044
1055
|
// Set target layer to 0. This sets tsReferenceSpatialLayer = 0.
|
|
@@ -1058,7 +1069,7 @@ SCENARIO("SimulcastProducerStreamManager", "[rtp][producerstreammanager][simulca
|
|
|
1058
1069
|
{
|
|
1059
1070
|
MockListener listener;
|
|
1060
1071
|
auto manager = createManager(
|
|
1061
|
-
|
|
1072
|
+
std::addressof(listener),
|
|
1062
1073
|
/*ssrcs*/ ThreeSsrcs,
|
|
1063
1074
|
/*preferredLayers*/ { 2, 0 },
|
|
1064
1075
|
/*keyFrameSupported*/ false);
|
|
@@ -1072,9 +1083,9 @@ SCENARIO("SimulcastProducerStreamManager", "[rtp][producerstreammanager][simulca
|
|
|
1072
1083
|
|
|
1073
1084
|
// All layers hold RTP timestamp 1000. Layer 1 was captured 500 ms before layer 0
|
|
1074
1085
|
// and layer 2 a whole second before it, so their offsets differ.
|
|
1075
|
-
rtpStream0->SetCaptureMapping(/*
|
|
1076
|
-
rtpStream1->SetCaptureMapping(/*
|
|
1077
|
-
rtpStream2->SetCaptureMapping(/*
|
|
1086
|
+
rtpStream0->SetCaptureMapping(/*captureAtUs*/ 1000 * 1000, /*ts*/ 1000);
|
|
1087
|
+
rtpStream1->SetCaptureMapping(/*captureAtUs*/ 500 * 1000, /*ts*/ 1000);
|
|
1088
|
+
rtpStream2->SetCaptureMapping(/*captureAtUs*/ 0, /*ts*/ 1000);
|
|
1078
1089
|
|
|
1079
1090
|
// Feed packets and a Sender Report to every stream so that they all get a score
|
|
1080
1091
|
// and RecalculateTargetLayers() takes them into account.
|
|
@@ -1088,7 +1099,7 @@ SCENARIO("SimulcastProducerStreamManager", "[rtp][producerstreammanager][simulca
|
|
|
1088
1099
|
sr.SetNtpSec(1000);
|
|
1089
1100
|
sr.SetNtpFrac(0);
|
|
1090
1101
|
sr.SetRtpTs(90000);
|
|
1091
|
-
rtpStream->ReceiveRtcpSenderReport(
|
|
1102
|
+
rtpStream->ReceiveRtcpSenderReport(std::addressof(sr), shared.GetTimeUs());
|
|
1092
1103
|
}
|
|
1093
1104
|
|
|
1094
1105
|
// Set target layer to 0 and sync. This sets tsReferenceSpatialLayer = 0, which
|
|
@@ -1138,7 +1149,7 @@ SCENARIO("SimulcastProducerStreamManager", "[rtp][producerstreammanager][simulca
|
|
|
1138
1149
|
{
|
|
1139
1150
|
MockListener listener;
|
|
1140
1151
|
auto manager = createManager(
|
|
1141
|
-
|
|
1152
|
+
std::addressof(listener),
|
|
1142
1153
|
/*ssrcs*/ ThreeSsrcs,
|
|
1143
1154
|
/*preferredLayers*/ { 2, 2 },
|
|
1144
1155
|
/*keyFrameSupported*/ false);
|
|
@@ -1180,7 +1191,7 @@ SCENARIO("SimulcastProducerStreamManager", "[rtp][producerstreammanager][simulca
|
|
|
1180
1191
|
SECTION("OnTransportDisconnected() resets target layers")
|
|
1181
1192
|
{
|
|
1182
1193
|
MockListener listener;
|
|
1183
|
-
auto manager = createManager(
|
|
1194
|
+
auto manager = createManager(std::addressof(listener));
|
|
1184
1195
|
auto rtpStream0 = createRtpStreamRecv(MappedSsrc0);
|
|
1185
1196
|
|
|
1186
1197
|
manager->ProducerRtpStream(rtpStream0.get(), MappedSsrc0);
|
|
@@ -1197,7 +1208,7 @@ SCENARIO("SimulcastProducerStreamManager", "[rtp][producerstreammanager][simulca
|
|
|
1197
1208
|
SECTION("OnPaused() resets target layers")
|
|
1198
1209
|
{
|
|
1199
1210
|
MockListener listener;
|
|
1200
|
-
auto manager = createManager(
|
|
1211
|
+
auto manager = createManager(std::addressof(listener));
|
|
1201
1212
|
auto rtpStream0 = createRtpStreamRecv(MappedSsrc0);
|
|
1202
1213
|
|
|
1203
1214
|
manager->ProducerRtpStream(rtpStream0.get(), MappedSsrc0);
|
|
@@ -1214,7 +1225,8 @@ SCENARIO("SimulcastProducerStreamManager", "[rtp][producerstreammanager][simulca
|
|
|
1214
1225
|
SECTION("IncreaseLayer() returns 0 on second call in same iteration")
|
|
1215
1226
|
{
|
|
1216
1227
|
MockListener listener;
|
|
1217
|
-
auto manager
|
|
1228
|
+
auto manager =
|
|
1229
|
+
createManager(std::addressof(listener), /*ssrcs*/ OneSsrc, /*preferredLayers*/ { 0, 0 });
|
|
1218
1230
|
auto rtpStream0 = createRtpStreamRecv(MappedSsrc0);
|
|
1219
1231
|
|
|
1220
1232
|
manager->ProducerRtpStream(rtpStream0.get(), MappedSsrc0);
|
|
@@ -1224,25 +1236,26 @@ SCENARIO("SimulcastProducerStreamManager", "[rtp][producerstreammanager][simulca
|
|
|
1224
1236
|
packet->SetSsrc(MappedSsrc0);
|
|
1225
1237
|
feedRtpStreamRecv(rtpStream0.get(), packet.get(), 100);
|
|
1226
1238
|
|
|
1227
|
-
|
|
1239
|
+
const int64_t nowMs = DepLibUV::GetTimeMs();
|
|
1228
1240
|
|
|
1229
1241
|
// First call claims bitrate.
|
|
1230
1242
|
auto usedBitrate = manager->IncreaseLayer(
|
|
1231
|
-
/*bitrate*/
|
|
1243
|
+
/*bitrate*/ 1000000, /*considerLoss*/ false, /*lossPercentage*/ 0.0f, nowMs);
|
|
1232
1244
|
|
|
1233
|
-
REQUIRE(usedBitrate >
|
|
1245
|
+
REQUIRE(usedBitrate > 0);
|
|
1234
1246
|
|
|
1235
1247
|
// Second call in same iteration should return 0 (already at preferred layers).
|
|
1236
1248
|
auto usedBitrate2 = manager->IncreaseLayer(
|
|
1237
|
-
/*bitrate*/
|
|
1249
|
+
/*bitrate*/ 1000000, /*considerLoss*/ false, /*lossPercentage*/ 0.0f, nowMs);
|
|
1238
1250
|
|
|
1239
|
-
REQUIRE(usedBitrate2 ==
|
|
1251
|
+
REQUIRE(usedBitrate2 == 0);
|
|
1240
1252
|
}
|
|
1241
1253
|
|
|
1242
1254
|
SECTION("IncreaseLayer() works again after ApplyLayers()")
|
|
1243
1255
|
{
|
|
1244
1256
|
MockListener listener;
|
|
1245
|
-
auto manager
|
|
1257
|
+
auto manager =
|
|
1258
|
+
createManager(std::addressof(listener), /*ssrcs*/ TwoSsrcs, /*preferredLayers*/ { 1, 0 });
|
|
1246
1259
|
auto rtpStream0 = createRtpStreamRecv(MappedSsrc0);
|
|
1247
1260
|
auto rtpStream1 = createRtpStreamRecv(MappedSsrc1);
|
|
1248
1261
|
|
|
@@ -1254,11 +1267,11 @@ SCENARIO("SimulcastProducerStreamManager", "[rtp][producerstreammanager][simulca
|
|
|
1254
1267
|
packet->SetSsrc(MappedSsrc0);
|
|
1255
1268
|
feedRtpStreamRecv(rtpStream0.get(), packet.get(), 100);
|
|
1256
1269
|
|
|
1257
|
-
|
|
1270
|
+
const int64_t nowMs = DepLibUV::GetTimeMs();
|
|
1258
1271
|
|
|
1259
1272
|
// First iteration: claim layer 0.
|
|
1260
1273
|
manager->IncreaseLayer(
|
|
1261
|
-
/*bitrate*/
|
|
1274
|
+
/*bitrate*/ 1000000, /*considerLoss*/ false, /*lossPercentage*/ 0.0f, nowMs);
|
|
1262
1275
|
manager->ApplyLayers(/*rtpStreamActiveMs*/ 0u);
|
|
1263
1276
|
|
|
1264
1277
|
// Feed packets to layer 1.
|
|
@@ -1267,15 +1280,16 @@ SCENARIO("SimulcastProducerStreamManager", "[rtp][producerstreammanager][simulca
|
|
|
1267
1280
|
|
|
1268
1281
|
// After ApplyLayers, IncreaseLayer should work again for layer 1.
|
|
1269
1282
|
auto usedBitrate = manager->IncreaseLayer(
|
|
1270
|
-
/*bitrate*/
|
|
1283
|
+
/*bitrate*/ 1000000, /*considerLoss*/ false, /*lossPercentage*/ 0.0f, nowMs);
|
|
1271
1284
|
|
|
1272
|
-
REQUIRE(usedBitrate >
|
|
1285
|
+
REQUIRE(usedBitrate > 0);
|
|
1273
1286
|
}
|
|
1274
1287
|
|
|
1275
1288
|
SECTION("GetDesiredBitrate() returns max bitrate across all producer streams")
|
|
1276
1289
|
{
|
|
1277
1290
|
MockListener listener;
|
|
1278
|
-
auto manager
|
|
1291
|
+
auto manager =
|
|
1292
|
+
createManager(std::addressof(listener), /*ssrcs*/ TwoSsrcs, /*preferredLayers*/ { 1, 0 });
|
|
1279
1293
|
auto rtpStream0 = createRtpStreamRecv(MappedSsrc0);
|
|
1280
1294
|
auto rtpStream1 = createRtpStreamRecv(MappedSsrc1);
|
|
1281
1295
|
|
|
@@ -1290,9 +1304,9 @@ SCENARIO("SimulcastProducerStreamManager", "[rtp][producerstreammanager][simulca
|
|
|
1290
1304
|
packet->SetSsrc(MappedSsrc1);
|
|
1291
1305
|
feedRtpStreamRecv(rtpStream1.get(), packet.get(), 100);
|
|
1292
1306
|
|
|
1293
|
-
|
|
1294
|
-
auto bitrate0
|
|
1295
|
-
auto bitrate1
|
|
1307
|
+
const int64_t nowMs = DepLibUV::GetTimeMs();
|
|
1308
|
+
auto bitrate0 = rtpStream0->GetBitrate(nowMs);
|
|
1309
|
+
auto bitrate1 = rtpStream1->GetBitrate(nowMs);
|
|
1296
1310
|
|
|
1297
1311
|
REQUIRE(bitrate1 > bitrate0);
|
|
1298
1312
|
|
|
@@ -1304,7 +1318,7 @@ SCENARIO("SimulcastProducerStreamManager", "[rtp][producerstreammanager][simulca
|
|
|
1304
1318
|
SECTION("GetProducerCurrentRtpStream() returns nullptr before sync")
|
|
1305
1319
|
{
|
|
1306
1320
|
MockListener listener;
|
|
1307
|
-
auto manager = createManager(
|
|
1321
|
+
auto manager = createManager(std::addressof(listener));
|
|
1308
1322
|
auto rtpStream0 = createRtpStreamRecv(MappedSsrc0);
|
|
1309
1323
|
|
|
1310
1324
|
manager->ProducerRtpStream(rtpStream0.get(), MappedSsrc0);
|
|
@@ -1316,7 +1330,7 @@ SCENARIO("SimulcastProducerStreamManager", "[rtp][producerstreammanager][simulca
|
|
|
1316
1330
|
SECTION("GetProducerTargetRtpStream() returns correct stream after UpdateTargetLayers()")
|
|
1317
1331
|
{
|
|
1318
1332
|
MockListener listener;
|
|
1319
|
-
auto manager = createManager(
|
|
1333
|
+
auto manager = createManager(std::addressof(listener));
|
|
1320
1334
|
auto rtpStream0 = createRtpStreamRecv(MappedSsrc0);
|
|
1321
1335
|
auto rtpStream1 = createRtpStreamRecv(MappedSsrc1);
|
|
1322
1336
|
|
|
@@ -1334,7 +1348,7 @@ SCENARIO("SimulcastProducerStreamManager", "[rtp][producerstreammanager][simulca
|
|
|
1334
1348
|
{
|
|
1335
1349
|
MockListener listener;
|
|
1336
1350
|
auto manager = createManager(
|
|
1337
|
-
|
|
1351
|
+
std::addressof(listener),
|
|
1338
1352
|
/*ssrcs*/ TwoSsrcs,
|
|
1339
1353
|
/*preferredLayers*/ { 1, 0 },
|
|
1340
1354
|
/*keyFrameSupported*/ false);
|