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
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
#ifndef MS_RTC_BWE_UTILS_HPP
|
|
2
|
+
#define MS_RTC_BWE_UTILS_HPP
|
|
3
|
+
|
|
4
|
+
#include "common.hpp"
|
|
5
|
+
|
|
6
|
+
namespace RTC
|
|
7
|
+
{
|
|
8
|
+
namespace BWE
|
|
9
|
+
{
|
|
10
|
+
class Utils
|
|
11
|
+
{
|
|
12
|
+
public:
|
|
13
|
+
/**
|
|
14
|
+
* Bitrate that results from applying a factor to another one (bps).
|
|
15
|
+
*
|
|
16
|
+
* @remarks
|
|
17
|
+
* - The algorithm derives a bitrate from another one this way all over the
|
|
18
|
+
* place, and the result has to come back to an int64_t. A value beyond
|
|
19
|
+
* what that type holds becomes `Types::BitrateInfinite` rather than the
|
|
20
|
+
* undefined one that converting it would give.
|
|
21
|
+
* - The result is rounded, not truncated, since each bitrate is derived
|
|
22
|
+
* from the previous one and dropping the fraction every time would drift
|
|
23
|
+
* downwards.
|
|
24
|
+
*/
|
|
25
|
+
static int64_t ApplyBitrateFactor(int64_t bitrate, double factor);
|
|
26
|
+
|
|
27
|
+
/**
|
|
28
|
+
* Sum of two bitrates (bps).
|
|
29
|
+
*
|
|
30
|
+
* @remarks
|
|
31
|
+
* - A sum beyond what an int64_t can hold becomes `Types::BitrateInfinite`
|
|
32
|
+
* rather than wrapping around into a negative bitrate.
|
|
33
|
+
*/
|
|
34
|
+
static int64_t AddBitrates(int64_t bitrate, int64_t otherBitrate);
|
|
35
|
+
};
|
|
36
|
+
} // namespace BWE
|
|
37
|
+
} // namespace RTC
|
|
38
|
+
|
|
39
|
+
#endif
|
|
@@ -10,7 +10,7 @@ namespace RTC
|
|
|
10
10
|
/**
|
|
11
11
|
* Max MTU size.
|
|
12
12
|
*/
|
|
13
|
-
constexpr size_t MtuSize{
|
|
13
|
+
constexpr size_t MtuSize{ 1500 };
|
|
14
14
|
|
|
15
15
|
/**
|
|
16
16
|
* Maximum size for a RTCP compound packet.
|
|
@@ -21,23 +21,23 @@ namespace RTC
|
|
|
21
21
|
* be added to an RTCP packet by srtp_protect_rtcp().
|
|
22
22
|
* - srtp.h: SRTP_MAX_TRAILER_LEN (SRTP_MAX_TAG_LEN + SRTP_MAX_MKI_LEN).
|
|
23
23
|
*/
|
|
24
|
-
constexpr size_t RtcpPacketMaxSize{ RTC::Consts::MtuSize - 40 - 20 -
|
|
24
|
+
constexpr size_t RtcpPacketMaxSize{ RTC::Consts::MtuSize - 40 - 20 - 148 };
|
|
25
25
|
|
|
26
26
|
/**
|
|
27
27
|
* Max length for a 1 byte RTP header extension.
|
|
28
28
|
*/
|
|
29
|
-
constexpr uint8_t OneByteRtpExtensionMaxLength{
|
|
29
|
+
constexpr uint8_t OneByteRtpExtensionMaxLength{ 16 };
|
|
30
30
|
|
|
31
31
|
/**
|
|
32
32
|
* Max length for a 2 bytes RTP header extension.
|
|
33
33
|
*/
|
|
34
|
-
constexpr uint8_t TwoBytesRtpExtensionMaxLength{
|
|
34
|
+
constexpr uint8_t TwoBytesRtpExtensionMaxLength{ 255 };
|
|
35
35
|
|
|
36
36
|
/**
|
|
37
37
|
* MID RTP header extension max length (just used when setting/updating MID
|
|
38
38
|
* extension).
|
|
39
39
|
*/
|
|
40
|
-
constexpr uint8_t MidRtpExtensionMaxLength{
|
|
40
|
+
constexpr uint8_t MidRtpExtensionMaxLength{ 8 };
|
|
41
41
|
|
|
42
42
|
/**
|
|
43
43
|
* Largest safe SCTP packet. Starting from the minimum guaranteed MTU value
|
|
@@ -59,7 +59,7 @@ namespace RTC
|
|
|
59
59
|
* @remarks
|
|
60
60
|
* Value copied from dcSCTP library.
|
|
61
61
|
*/
|
|
62
|
-
constexpr size_t MaxSafeMtuSizeForSctp{
|
|
62
|
+
constexpr size_t MaxSafeMtuSizeForSctp{ 1191 };
|
|
63
63
|
} // namespace Consts
|
|
64
64
|
} // namespace RTC
|
|
65
65
|
|
|
@@ -18,7 +18,6 @@
|
|
|
18
18
|
#include "RTC/RTP/SharedPacket.hpp"
|
|
19
19
|
#include "RTC/RtpDictionaries.hpp"
|
|
20
20
|
#include "RTC/SeqManager.hpp"
|
|
21
|
-
#include "Shared.hpp"
|
|
22
21
|
#include "SharedInterface.hpp"
|
|
23
22
|
#include <ankerl/unordered_dense.h>
|
|
24
23
|
#include <bitset>
|
|
@@ -134,6 +133,8 @@ namespace RTC
|
|
|
134
133
|
void ProducerRtpStreamScores(const std::vector<uint8_t>* scores);
|
|
135
134
|
void ProducerRtpStreamScore(RTC::RTP::RtpStreamRecv* rtpStream, uint8_t score, uint8_t previousScore);
|
|
136
135
|
void ProducerRtcpSenderReport(RTC::RTP::RtpStreamRecv* rtpStream, bool first);
|
|
136
|
+
void ProducerSpatialLayerActivityChanged(
|
|
137
|
+
RTC::RTP::RtpStreamRecv* rtpStream, uint8_t spatialLayer, bool isActive);
|
|
137
138
|
void ProducerClosed();
|
|
138
139
|
void SetExternallyManagedBitrate()
|
|
139
140
|
{
|
|
@@ -141,21 +142,22 @@ namespace RTC
|
|
|
141
142
|
this->producerStreamManager->SetExternallyManagedBitrate();
|
|
142
143
|
}
|
|
143
144
|
uint8_t GetBitratePriority() const;
|
|
144
|
-
|
|
145
|
+
int64_t IncreaseLayer(int64_t bitrate, bool considerLoss);
|
|
145
146
|
void ApplyLayers();
|
|
146
|
-
|
|
147
|
+
int64_t GetDesiredBitrate() const;
|
|
147
148
|
void SendRtpPacket(RTC::RTP::Packet* packet, RTC::RTP::SharedPacket& sharedPacket);
|
|
148
|
-
bool GetRtcp(RTC::RTCP::CompoundPacket* packet,
|
|
149
|
+
bool GetRtcp(RTC::RTCP::CompoundPacket* packet, int64_t nowUs);
|
|
149
150
|
/**
|
|
150
151
|
* Worst remote fraction lost among the RTP streams of this Consumer.
|
|
151
152
|
*/
|
|
152
153
|
uint8_t GetWorstRemoteFractionLost(uint32_t mappedSsrc) const;
|
|
153
154
|
void ReceiveNack(RTC::RTCP::FeedbackRtpNackPacket* nackPacket);
|
|
154
155
|
void ReceiveKeyFrameRequest(RTC::RTCP::FeedbackPs::MessageType messageType, uint32_t ssrc);
|
|
155
|
-
void ReceiveRtcpReceiverReport(RTC::RTCP::ReceiverReport* report);
|
|
156
|
-
void ReceiveRtcpXrReceiverReferenceTime(
|
|
157
|
-
|
|
158
|
-
|
|
156
|
+
void ReceiveRtcpReceiverReport(RTC::RTCP::ReceiverReport* report, int64_t receivedAtUs);
|
|
157
|
+
void ReceiveRtcpXrReceiverReferenceTime(
|
|
158
|
+
RTC::RTCP::ReceiverReferenceTime* report, int64_t receivedAtUs);
|
|
159
|
+
int64_t GetTransmissionRate(int64_t nowMs);
|
|
160
|
+
float GetRttMs() const;
|
|
159
161
|
|
|
160
162
|
/* Methods inherited from Channel::ChannelSocket::RequestHandler. */
|
|
161
163
|
public:
|
|
@@ -215,11 +217,11 @@ namespace RTC
|
|
|
215
217
|
struct RTC::RTP::HeaderExtensionIds rtpHeaderExtensionIds;
|
|
216
218
|
const std::vector<uint8_t>* producerRtpStreamScores{ nullptr };
|
|
217
219
|
// Others.
|
|
218
|
-
std::bitset<
|
|
219
|
-
|
|
220
|
-
|
|
220
|
+
std::bitset<128> supportedCodecPayloadTypes;
|
|
221
|
+
int64_t lastRtcpSentAtUs{ 0 };
|
|
222
|
+
int64_t maxRtcpIntervalMs{ 0 };
|
|
221
223
|
bool externallyManagedBitrate{ false };
|
|
222
|
-
uint8_t priority{
|
|
224
|
+
uint8_t priority{ 1 };
|
|
223
225
|
struct TraceEventTypes traceEventTypes;
|
|
224
226
|
|
|
225
227
|
private:
|
|
@@ -125,7 +125,7 @@ namespace RTC
|
|
|
125
125
|
// Passed by argument.
|
|
126
126
|
SharedInterface* shared{ nullptr };
|
|
127
127
|
RTC::DataConsumer::Listener* listener{ nullptr };
|
|
128
|
-
size_t maxMessageSize{
|
|
128
|
+
size_t maxMessageSize{ 0 };
|
|
129
129
|
bool pipe{ false };
|
|
130
130
|
// Others.
|
|
131
131
|
Type type;
|
|
@@ -137,8 +137,8 @@ namespace RTC
|
|
|
137
137
|
bool paused{ false };
|
|
138
138
|
bool dataProducerPaused{ false };
|
|
139
139
|
bool dataProducerClosed{ false };
|
|
140
|
-
size_t messagesSent{
|
|
141
|
-
size_t bytesSent{
|
|
140
|
+
size_t messagesSent{ 0 };
|
|
141
|
+
size_t bytesSent{ 0 };
|
|
142
142
|
};
|
|
143
143
|
} // namespace RTC
|
|
144
144
|
|
|
@@ -87,7 +87,7 @@ namespace RTC
|
|
|
87
87
|
private:
|
|
88
88
|
// Passed by argument.
|
|
89
89
|
SharedInterface* shared{ nullptr };
|
|
90
|
-
size_t maxMessageSize{
|
|
90
|
+
size_t maxMessageSize{ 0 };
|
|
91
91
|
RTC::DataProducer::Listener* listener{ nullptr };
|
|
92
92
|
// Others.
|
|
93
93
|
Type type;
|
|
@@ -95,8 +95,8 @@ namespace RTC
|
|
|
95
95
|
std::string label;
|
|
96
96
|
std::string protocol;
|
|
97
97
|
bool paused{ false };
|
|
98
|
-
size_t messagesReceived{
|
|
99
|
-
size_t bytesReceived{
|
|
98
|
+
size_t messagesReceived{ 0 };
|
|
99
|
+
size_t bytesReceived{ 0 };
|
|
100
100
|
};
|
|
101
101
|
} // namespace RTC
|
|
102
102
|
|
|
@@ -91,7 +91,10 @@ namespace RTC
|
|
|
91
91
|
const RTC::DtlsTransport* dtlsTransport, const uint8_t* data, size_t len) = 0;
|
|
92
92
|
// DTLS application data received.
|
|
93
93
|
virtual void OnDtlsTransportApplicationDataReceived(
|
|
94
|
-
const RTC::DtlsTransport* dtlsTransport,
|
|
94
|
+
const RTC::DtlsTransport* dtlsTransport,
|
|
95
|
+
const uint8_t* data,
|
|
96
|
+
size_t len,
|
|
97
|
+
int64_t receivedAtUs) = 0;
|
|
95
98
|
};
|
|
96
99
|
|
|
97
100
|
public:
|
|
@@ -143,7 +146,7 @@ namespace RTC
|
|
|
143
146
|
void Dump(int indentation = 0) const;
|
|
144
147
|
void Run(Role localRole);
|
|
145
148
|
bool SetRemoteFingerprint(const Fingerprint& fingerprint);
|
|
146
|
-
void ProcessDtlsData(const uint8_t* data, size_t len);
|
|
149
|
+
void ProcessDtlsData(const uint8_t* data, size_t len, int64_t receivedAtUs);
|
|
147
150
|
DtlsState GetState() const
|
|
148
151
|
{
|
|
149
152
|
return this->state;
|
|
@@ -80,10 +80,10 @@ namespace RTC
|
|
|
80
80
|
private:
|
|
81
81
|
// Others.
|
|
82
82
|
std::string foundation;
|
|
83
|
-
uint32_t priority{
|
|
83
|
+
uint32_t priority{ 0 };
|
|
84
84
|
std::string address;
|
|
85
85
|
Protocol protocol;
|
|
86
|
-
uint16_t port{
|
|
86
|
+
uint16_t port{ 0 };
|
|
87
87
|
CandidateType type{ CandidateType::HOST };
|
|
88
88
|
TcpCandidateType tcpType{ TcpCandidateType::PASSIVE };
|
|
89
89
|
};
|
|
@@ -121,7 +121,7 @@ namespace RTC
|
|
|
121
121
|
void SetSelectedTuple(RTC::TransportTuple* storedTuple);
|
|
122
122
|
bool IsConsentCheckSupported() const
|
|
123
123
|
{
|
|
124
|
-
return this->consentTimeoutMs !=
|
|
124
|
+
return this->consentTimeoutMs != 0;
|
|
125
125
|
}
|
|
126
126
|
bool IsConsentCheckRunning() const
|
|
127
127
|
{
|
|
@@ -141,12 +141,12 @@ namespace RTC
|
|
|
141
141
|
SharedInterface* shared{ nullptr };
|
|
142
142
|
std::string usernameFragment;
|
|
143
143
|
std::string password;
|
|
144
|
-
|
|
144
|
+
int64_t consentTimeoutMs{ 30000 };
|
|
145
145
|
// Others.
|
|
146
146
|
std::string oldUsernameFragment;
|
|
147
147
|
std::string oldPassword;
|
|
148
148
|
IceState state{ IceState::NEW };
|
|
149
|
-
uint32_t remoteNomination{
|
|
149
|
+
uint32_t remoteNomination{ 0 };
|
|
150
150
|
std::list<RTC::TransportTuple> tuples;
|
|
151
151
|
RTC::TransportTuple* selectedTuple{ nullptr };
|
|
152
152
|
TimerHandleInterface* consentCheckTimer{ nullptr };
|
|
@@ -64,7 +64,7 @@ namespace RTC
|
|
|
64
64
|
};
|
|
65
65
|
|
|
66
66
|
public:
|
|
67
|
-
KeyFrameRequestDelayer(Listener* listener, SharedInterface* shared, uint32_t ssrc,
|
|
67
|
+
KeyFrameRequestDelayer(Listener* listener, SharedInterface* shared, uint32_t ssrc, int64_t delayMs);
|
|
68
68
|
~KeyFrameRequestDelayer() override;
|
|
69
69
|
|
|
70
70
|
uint32_t GetSsrc() const
|
|
@@ -106,7 +106,7 @@ namespace RTC
|
|
|
106
106
|
|
|
107
107
|
public:
|
|
108
108
|
explicit KeyFrameRequestManager(
|
|
109
|
-
Listener* listener, SharedInterface* shared,
|
|
109
|
+
Listener* listener, SharedInterface* shared, int64_t keyFrameRequestDelayMs);
|
|
110
110
|
~KeyFrameRequestManager() override;
|
|
111
111
|
|
|
112
112
|
void KeyFrameNeeded(uint32_t ssrc);
|
|
@@ -124,7 +124,7 @@ namespace RTC
|
|
|
124
124
|
private:
|
|
125
125
|
Listener* listener{ nullptr };
|
|
126
126
|
SharedInterface* shared{ nullptr };
|
|
127
|
-
|
|
127
|
+
int64_t keyFrameRequestDelayMs{ 0 }; // 0 means disabled.
|
|
128
128
|
ankerl::unordered_dense::map<uint32_t, PendingKeyFrameInfo*> mapSsrcPendingKeyFrameInfo;
|
|
129
129
|
ankerl::unordered_dense::map<uint32_t, KeyFrameRequestDelayer*> mapSsrcKeyFrameRequestDelayer;
|
|
130
130
|
};
|
|
@@ -28,16 +28,16 @@ namespace RTC
|
|
|
28
28
|
private:
|
|
29
29
|
struct NackInfo
|
|
30
30
|
{
|
|
31
|
-
explicit NackInfo(
|
|
31
|
+
explicit NackInfo(int64_t createdAtMs, uint16_t seq, uint16_t sendAtSeq)
|
|
32
32
|
: createdAtMs(createdAtMs), seq(seq), sendAtSeq(sendAtSeq)
|
|
33
33
|
{
|
|
34
34
|
}
|
|
35
35
|
|
|
36
|
-
|
|
37
|
-
uint16_t seq{
|
|
38
|
-
uint16_t sendAtSeq{
|
|
39
|
-
|
|
40
|
-
uint8_t retries{
|
|
36
|
+
int64_t createdAtMs{ 0 };
|
|
37
|
+
uint16_t seq{ 0 };
|
|
38
|
+
uint16_t sendAtSeq{ 0 };
|
|
39
|
+
int64_t sentAtMs{ 0 };
|
|
40
|
+
uint8_t retries{ 0 };
|
|
41
41
|
};
|
|
42
42
|
|
|
43
43
|
enum class NackFilter : uint8_t
|
|
@@ -47,7 +47,7 @@ namespace RTC
|
|
|
47
47
|
};
|
|
48
48
|
|
|
49
49
|
public:
|
|
50
|
-
explicit NackGenerator(Listener* listener, SharedInterface* shared,
|
|
50
|
+
explicit NackGenerator(Listener* listener, SharedInterface* shared, int64_t sendNackDelayMs);
|
|
51
51
|
~NackGenerator() override;
|
|
52
52
|
|
|
53
53
|
bool ReceivePacket(const RTC::RTP::Packet* packet, bool isRecovered);
|
|
@@ -55,9 +55,9 @@ namespace RTC
|
|
|
55
55
|
{
|
|
56
56
|
return this->nackList.size();
|
|
57
57
|
}
|
|
58
|
-
void
|
|
58
|
+
void UpdateRttMs(int64_t rttMs)
|
|
59
59
|
{
|
|
60
|
-
this->
|
|
60
|
+
this->rttMs = rttMs;
|
|
61
61
|
}
|
|
62
62
|
void Reset();
|
|
63
63
|
|
|
@@ -75,7 +75,7 @@ namespace RTC
|
|
|
75
75
|
// Passed by argument.
|
|
76
76
|
Listener* listener{ nullptr };
|
|
77
77
|
SharedInterface* shared{ nullptr };
|
|
78
|
-
|
|
78
|
+
int64_t sendNackDelayMs{ 0 };
|
|
79
79
|
// Allocated by this.
|
|
80
80
|
TimerHandleInterface* timer{ nullptr };
|
|
81
81
|
// Others.
|
|
@@ -83,8 +83,8 @@ namespace RTC
|
|
|
83
83
|
std::set<uint16_t, RTC::SeqManager<uint16_t>::SeqLowerThan> keyFrameList;
|
|
84
84
|
std::set<uint16_t, RTC::SeqManager<uint16_t>::SeqLowerThan> recoveredList;
|
|
85
85
|
bool started{ false };
|
|
86
|
-
uint16_t lastSeq{
|
|
87
|
-
|
|
86
|
+
uint16_t lastSeq{ 0 }; // Seq number of last valid packet.
|
|
87
|
+
int64_t rttMs{ 0 };
|
|
88
88
|
};
|
|
89
89
|
} // namespace RTC
|
|
90
90
|
|
|
@@ -50,10 +50,9 @@ namespace RTC
|
|
|
50
50
|
void ProducerRtpStreamScore(
|
|
51
51
|
RTC::RTP::RtpStreamRecv* rtpStream, uint8_t score, uint8_t previousScore) override;
|
|
52
52
|
void ProducerRtcpSenderReport(RTC::RTP::RtpStreamRecv* rtpStream, bool first) override;
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
uint32_t GetDesiredBitrate(uint64_t nowMs) const override;
|
|
53
|
+
int64_t IncreaseLayer(int64_t bitrate, bool considerLoss, float lossPercentage, int64_t nowMs) override;
|
|
54
|
+
void ApplyLayers(int64_t rtpStreamActiveMs) override;
|
|
55
|
+
int64_t GetDesiredBitrate(int64_t nowMs) const override;
|
|
57
56
|
RtpPacketProcessResult ProcessRtpPacket(
|
|
58
57
|
RTC::RTP::Packet* packet,
|
|
59
58
|
bool lastSentPacketHasMarker,
|
|
@@ -59,10 +59,22 @@ namespace RTC
|
|
|
59
59
|
bool SendData(const uint8_t* data, size_t len) override;
|
|
60
60
|
void RecvStreamClosed(uint32_t ssrc) override;
|
|
61
61
|
void SendStreamClosed(uint32_t ssrc) override;
|
|
62
|
-
void OnPacketReceived(
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
62
|
+
void OnPacketReceived(
|
|
63
|
+
RTC::TransportTuple* tuple,
|
|
64
|
+
const uint8_t* data,
|
|
65
|
+
size_t len,
|
|
66
|
+
size_t bufferLen,
|
|
67
|
+
int64_t receivedAtUs);
|
|
68
|
+
void OnRtpDataReceived(
|
|
69
|
+
RTC::TransportTuple* tuple,
|
|
70
|
+
const uint8_t* data,
|
|
71
|
+
size_t len,
|
|
72
|
+
size_t bufferLen,
|
|
73
|
+
int64_t receivedAtUs);
|
|
74
|
+
void OnRtcpDataReceived(
|
|
75
|
+
RTC::TransportTuple* tuple, const uint8_t* data, size_t len, int64_t receivedAtUs);
|
|
76
|
+
void OnSctpDataReceived(
|
|
77
|
+
RTC::TransportTuple* tuple, const uint8_t* data, size_t len, int64_t receivedAtUs);
|
|
66
78
|
|
|
67
79
|
/* Pure virtual methods inherited from RTC::UdpSocket::Listener. */
|
|
68
80
|
public:
|
|
@@ -71,7 +83,8 @@ namespace RTC
|
|
|
71
83
|
const uint8_t* data,
|
|
72
84
|
size_t len,
|
|
73
85
|
size_t bufferLen,
|
|
74
|
-
const struct sockaddr* remoteAddr
|
|
86
|
+
const struct sockaddr* remoteAddr,
|
|
87
|
+
int64_t receivedAtUs) override;
|
|
75
88
|
|
|
76
89
|
private:
|
|
77
90
|
// Allocated by this.
|
|
@@ -48,10 +48,22 @@ namespace RTC
|
|
|
48
48
|
bool SendData(const uint8_t* data, size_t len) override;
|
|
49
49
|
void RecvStreamClosed(uint32_t ssrc) override;
|
|
50
50
|
void SendStreamClosed(uint32_t ssrc) override;
|
|
51
|
-
void OnPacketReceived(
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
51
|
+
void OnPacketReceived(
|
|
52
|
+
RTC::TransportTuple* tuple,
|
|
53
|
+
const uint8_t* data,
|
|
54
|
+
size_t len,
|
|
55
|
+
size_t bufferLen,
|
|
56
|
+
int64_t receivedAtUs);
|
|
57
|
+
void OnRtpDataReceived(
|
|
58
|
+
RTC::TransportTuple* tuple,
|
|
59
|
+
const uint8_t* data,
|
|
60
|
+
size_t len,
|
|
61
|
+
size_t bufferLen,
|
|
62
|
+
int64_t receivedAtUs);
|
|
63
|
+
void OnRtcpDataReceived(
|
|
64
|
+
RTC::TransportTuple* tuple, const uint8_t* data, size_t len, int64_t receivedAtUs);
|
|
65
|
+
void OnSctpDataReceived(
|
|
66
|
+
RTC::TransportTuple* tuple, const uint8_t* data, size_t len, int64_t receivedAtUs);
|
|
55
67
|
void EmitTuple() const;
|
|
56
68
|
void EmitRtcpTuple() const;
|
|
57
69
|
|
|
@@ -62,7 +74,8 @@ namespace RTC
|
|
|
62
74
|
const uint8_t* data,
|
|
63
75
|
size_t len,
|
|
64
76
|
size_t bufferLen,
|
|
65
|
-
const struct sockaddr* remoteAddr
|
|
77
|
+
const struct sockaddr* remoteAddr,
|
|
78
|
+
int64_t receivedAtUs) override;
|
|
66
79
|
|
|
67
80
|
private:
|
|
68
81
|
// Allocated by this.
|
|
@@ -66,8 +66,8 @@ namespace RTC
|
|
|
66
66
|
private:
|
|
67
67
|
Protocol protocol{ Protocol::UDP };
|
|
68
68
|
sockaddr_storage bindAddr{};
|
|
69
|
-
uint16_t minPort{
|
|
70
|
-
uint16_t maxPort{
|
|
69
|
+
uint16_t minPort{ 0 };
|
|
70
|
+
uint16_t maxPort{ 0 };
|
|
71
71
|
};
|
|
72
72
|
|
|
73
73
|
struct PortRangeKeyHash
|
|
@@ -92,8 +92,8 @@ namespace RTC
|
|
|
92
92
|
}
|
|
93
93
|
|
|
94
94
|
std::vector<bool> ports;
|
|
95
|
-
uint16_t minPort{
|
|
96
|
-
uint16_t numUsedPorts{
|
|
95
|
+
uint16_t minPort{ 0 };
|
|
96
|
+
uint16_t numUsedPorts{ 0 };
|
|
97
97
|
};
|
|
98
98
|
|
|
99
99
|
public:
|
|
@@ -33,9 +33,10 @@ namespace RTC
|
|
|
33
33
|
|
|
34
34
|
public:
|
|
35
35
|
virtual void OnProducerReceiveData(RTC::Producer* producer, size_t len) = 0;
|
|
36
|
-
virtual void OnProducerReceiveRtpPacket(
|
|
37
|
-
|
|
38
|
-
virtual void
|
|
36
|
+
virtual void OnProducerReceiveRtpPacket(
|
|
37
|
+
RTC::Producer* producer, RTC::RTP::Packet* packet, int64_t receivedAtUs) = 0;
|
|
38
|
+
virtual void OnProducerPaused(RTC::Producer* producer) = 0;
|
|
39
|
+
virtual void OnProducerResumed(RTC::Producer* producer) = 0;
|
|
39
40
|
virtual void OnProducerNewRtpStream(
|
|
40
41
|
RTC::Producer* producer, RTC::RTP::RtpStreamRecv* rtpStream, uint32_t mappedSsrc) = 0;
|
|
41
42
|
virtual void OnProducerRtpStreamScore(
|
|
@@ -45,6 +46,11 @@ namespace RTC
|
|
|
45
46
|
uint8_t previousScore) = 0;
|
|
46
47
|
virtual void OnProducerRtcpSenderReport(
|
|
47
48
|
RTC::Producer* producer, RTC::RTP::RtpStreamRecv* rtpStream, bool first) = 0;
|
|
49
|
+
virtual void OnProducerSpatialLayerActivityChanged(
|
|
50
|
+
RTC::Producer* producer,
|
|
51
|
+
RTC::RTP::RtpStreamRecv* rtpStream,
|
|
52
|
+
uint8_t spatialLayer,
|
|
53
|
+
bool isActive) = 0;
|
|
48
54
|
virtual void OnProducerRtpPacketReceived(RTC::Producer* producer, RTC::RTP::Packet* packet) = 0;
|
|
49
55
|
virtual void OnProducerSendRtcpPacket(RTC::Producer* producer, RTC::RTCP::Packet* packet) = 0;
|
|
50
56
|
/**
|
|
@@ -59,15 +65,15 @@ namespace RTC
|
|
|
59
65
|
*
|
|
60
66
|
* @returns No value while the capture instant cannot be told yet.
|
|
61
67
|
*/
|
|
62
|
-
virtual std::optional<
|
|
68
|
+
virtual std::optional<int64_t> OnProducerNeedLocalCaptureAtUs(
|
|
63
69
|
RTC::Producer* producer, const RTC::RTP::RtpStreamRecv* rtpStream, uint32_t ts) = 0;
|
|
64
70
|
/**
|
|
65
71
|
* Offset between the wall clock of the sender of this Producer and our own
|
|
66
|
-
* monotonic one (
|
|
72
|
+
* monotonic one (us).
|
|
67
73
|
*
|
|
68
74
|
* @returns No value while the offset cannot be told yet.
|
|
69
75
|
*/
|
|
70
|
-
virtual std::optional<int64_t>
|
|
76
|
+
virtual std::optional<int64_t> OnProducerNeedRemoteClockOffsetUs(const RTC::Producer* producer) = 0;
|
|
71
77
|
};
|
|
72
78
|
|
|
73
79
|
private:
|
|
@@ -153,10 +159,11 @@ namespace RTC
|
|
|
153
159
|
{
|
|
154
160
|
return std::addressof(this->rtpStreamScores);
|
|
155
161
|
}
|
|
156
|
-
ReceiveRtpPacketResult ReceiveRtpPacket(RTC::RTP::Packet* packet);
|
|
157
|
-
void ReceiveRtcpSenderReport(RTC::RTCP::SenderReport* report);
|
|
158
|
-
void ReceiveRtcpXrDelaySinceLastRr(
|
|
159
|
-
|
|
162
|
+
ReceiveRtpPacketResult ReceiveRtpPacket(RTC::RTP::Packet* packet, int64_t receivedAtUs);
|
|
163
|
+
void ReceiveRtcpSenderReport(RTC::RTCP::SenderReport* report, int64_t receivedAtUs);
|
|
164
|
+
void ReceiveRtcpXrDelaySinceLastRr(
|
|
165
|
+
RTC::RTCP::DelaySinceLastRr::SsrcInfo* ssrcInfo, int64_t receivedAtUs);
|
|
166
|
+
bool GetRtcp(RTC::RTCP::CompoundPacket* packet, int64_t nowUs);
|
|
160
167
|
void RequestKeyFrame(uint32_t mappedSsrc);
|
|
161
168
|
|
|
162
169
|
/* Methods inherited from Channel::ChannelSocket::RequestHandler. */
|
|
@@ -198,6 +205,8 @@ namespace RTC
|
|
|
198
205
|
void OnRtpStreamScore(RTC::RTP::RtpStream* rtpStream, uint8_t score, uint8_t previousScore) override;
|
|
199
206
|
void OnRtpStreamSendRtcpPacket(RTC::RTP::RtpStreamRecv* rtpStream, RTC::RTCP::Packet* packet) override;
|
|
200
207
|
uint8_t OnRtpStreamNeedWorstRemoteFractionLost(RTC::RTP::RtpStreamRecv* rtpStream) override;
|
|
208
|
+
void OnRtpStreamSpatialLayerActivityChanged(
|
|
209
|
+
RTC::RTP::RtpStreamRecv* rtpStream, uint8_t spatialLayer, bool isActive) override;
|
|
201
210
|
|
|
202
211
|
/* Pure virtual methods inherited from RTC::KeyFrameRequestManager::Listener. */
|
|
203
212
|
public:
|
|
@@ -229,8 +238,8 @@ namespace RTC
|
|
|
229
238
|
bool enableMediasoupPacketIdHeaderExtension{ false };
|
|
230
239
|
RTC::RTP::Packet* currentRtpPacket{ nullptr };
|
|
231
240
|
// Timestamp when last RTCP was sent.
|
|
232
|
-
|
|
233
|
-
|
|
241
|
+
int64_t lastRtcpSentAtUs{ 0 };
|
|
242
|
+
int64_t maxRtcpIntervalMs{ 0 };
|
|
234
243
|
// Video orientation.
|
|
235
244
|
bool videoOrientationDetected{ false };
|
|
236
245
|
struct VideoOrientation videoOrientation;
|
|
@@ -42,9 +42,9 @@ namespace RTC
|
|
|
42
42
|
Type type{ Type::FORWARD };
|
|
43
43
|
|
|
44
44
|
// Valid when type == FORWARD:
|
|
45
|
-
uint32_t tsOffset{
|
|
45
|
+
uint32_t tsOffset{ 0 };
|
|
46
46
|
bool isSyncPacket{ false };
|
|
47
|
-
uint16_t syncSeqValue{
|
|
47
|
+
uint16_t syncSeqValue{ 0 };
|
|
48
48
|
bool shouldSyncEncodingContext{ false };
|
|
49
49
|
bool spatialLayerSwitched{ false };
|
|
50
50
|
bool temporalLayerChanged{ false };
|
|
@@ -100,16 +100,22 @@ namespace RTC
|
|
|
100
100
|
virtual void ProducerRtpStreamScore(
|
|
101
101
|
RTC::RTP::RtpStreamRecv* rtpStream, uint8_t score, uint8_t previousScore) = 0;
|
|
102
102
|
virtual void ProducerRtcpSenderReport(RTC::RTP::RtpStreamRecv* rtpStream, bool first) = 0;
|
|
103
|
+
// Only spatial layers within a same RTP stream can start or stop separately,
|
|
104
|
+
// so just SVC cares about this.
|
|
105
|
+
virtual void ProducerSpatialLayerActivityChanged(
|
|
106
|
+
RTC::RTP::RtpStreamRecv* /*rtpStream*/, uint8_t /*spatialLayer*/, bool /*isActive*/)
|
|
107
|
+
{
|
|
108
|
+
}
|
|
103
109
|
|
|
104
110
|
void SetExternallyManagedBitrate()
|
|
105
111
|
{
|
|
106
112
|
this->externallyManagedBitrate = true;
|
|
107
113
|
}
|
|
108
114
|
|
|
109
|
-
virtual
|
|
110
|
-
|
|
111
|
-
virtual void ApplyLayers(
|
|
112
|
-
virtual
|
|
115
|
+
virtual int64_t IncreaseLayer(
|
|
116
|
+
int64_t bitrate, bool considerLoss, float lossPercentage, int64_t nowMs) = 0;
|
|
117
|
+
virtual void ApplyLayers(int64_t rtpStreamActiveMs) = 0;
|
|
118
|
+
virtual int64_t GetDesiredBitrate(int64_t nowMs) const = 0;
|
|
113
119
|
|
|
114
120
|
virtual RtpPacketProcessResult ProcessRtpPacket(
|
|
115
121
|
RTC::RTP::Packet* packet,
|
|
@@ -60,11 +60,11 @@ namespace RTC
|
|
|
60
60
|
{
|
|
61
61
|
size_t size = Packet::CommonHeaderSize;
|
|
62
62
|
|
|
63
|
-
size += ssrcs.size() *
|
|
63
|
+
size += ssrcs.size() * 4;
|
|
64
64
|
|
|
65
65
|
if (!this->reason.empty())
|
|
66
66
|
{
|
|
67
|
-
size +=
|
|
67
|
+
size += 1; // Length field.
|
|
68
68
|
size += this->reason.length();
|
|
69
69
|
}
|
|
70
70
|
|
|
@@ -52,7 +52,7 @@ namespace RTC
|
|
|
52
52
|
{
|
|
53
53
|
return this->isCorrect;
|
|
54
54
|
}
|
|
55
|
-
void SetBitrate(
|
|
55
|
+
void SetBitrate(int64_t bitrate)
|
|
56
56
|
{
|
|
57
57
|
this->bitrate = bitrate;
|
|
58
58
|
}
|
|
@@ -60,7 +60,7 @@ namespace RTC
|
|
|
60
60
|
{
|
|
61
61
|
this->ssrcs = ssrcs;
|
|
62
62
|
}
|
|
63
|
-
|
|
63
|
+
int64_t GetBitrate() const
|
|
64
64
|
{
|
|
65
65
|
return this->bitrate;
|
|
66
66
|
}
|
|
@@ -76,13 +76,13 @@ namespace RTC
|
|
|
76
76
|
size_t GetSize() const override
|
|
77
77
|
{
|
|
78
78
|
// NOLINTNEXTLINE(bugprone-parent-virtual-call)
|
|
79
|
-
return FeedbackPsPacket::GetSize() + 8 + (
|
|
79
|
+
return FeedbackPsPacket::GetSize() + 8 + (4 * this->ssrcs.size());
|
|
80
80
|
}
|
|
81
81
|
|
|
82
82
|
private:
|
|
83
83
|
std::vector<uint32_t> ssrcs;
|
|
84
84
|
// Bitrate represented in bps.
|
|
85
|
-
|
|
85
|
+
int64_t bitrate{ 0 };
|
|
86
86
|
bool isCorrect{ true };
|
|
87
87
|
};
|
|
88
88
|
} // namespace RTCP
|
|
@@ -52,11 +52,11 @@ namespace RTC
|
|
|
52
52
|
{
|
|
53
53
|
this->ssrc = ssrc;
|
|
54
54
|
}
|
|
55
|
-
|
|
55
|
+
int64_t GetBitrate() const
|
|
56
56
|
{
|
|
57
57
|
return this->bitrate;
|
|
58
58
|
}
|
|
59
|
-
void SetBitrate(
|
|
59
|
+
void SetBitrate(int64_t bitrate)
|
|
60
60
|
{
|
|
61
61
|
this->bitrate = bitrate;
|
|
62
62
|
}
|
|
@@ -80,7 +80,7 @@ namespace RTC
|
|
|
80
80
|
|
|
81
81
|
private:
|
|
82
82
|
uint32_t ssrc{ 0 };
|
|
83
|
-
|
|
83
|
+
int64_t bitrate{ 0 };
|
|
84
84
|
uint16_t overhead{ 0 };
|
|
85
85
|
};
|
|
86
86
|
|