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.
Files changed (310) hide show
  1. package/CHANGELOG.md +11 -0
  2. package/node/lib/DataConsumer.js +1 -1
  3. package/node/lib/Router.js +1 -1
  4. package/node/lib/Transport.js +15 -15
  5. package/node/lib/fbs/rtp-parameters/encoding-mapping.d.ts +2 -6
  6. package/node/lib/fbs/rtp-parameters/encoding-mapping.d.ts.map +1 -1
  7. package/node/lib/fbs/rtp-parameters/encoding-mapping.js +7 -19
  8. package/node/lib/fbs/rtp-parameters/rtp-encoding-parameters.d.ts +4 -4
  9. package/node/lib/fbs/rtp-parameters/rtp-encoding-parameters.js +2 -2
  10. package/node/lib/fbs/rtp-stream/bitrate-by-layer.d.ts +5 -5
  11. package/node/lib/fbs/rtp-stream/bitrate-by-layer.d.ts.map +1 -1
  12. package/node/lib/fbs/rtp-stream/bitrate-by-layer.js +3 -3
  13. package/node/lib/fbs/rtp-stream/recv-stats.d.ts +5 -5
  14. package/node/lib/fbs/rtp-stream/recv-stats.d.ts.map +1 -1
  15. package/node/lib/fbs/rtp-stream/recv-stats.js +3 -3
  16. package/node/lib/fbs/rtp-stream/send-stats.d.ts +5 -5
  17. package/node/lib/fbs/rtp-stream/send-stats.d.ts.map +1 -1
  18. package/node/lib/fbs/rtp-stream/send-stats.js +3 -3
  19. package/node/lib/fbs/transport/bwe-trace-info.d.ts +23 -23
  20. package/node/lib/fbs/transport/bwe-trace-info.d.ts.map +1 -1
  21. package/node/lib/fbs/transport/bwe-trace-info.js +15 -15
  22. package/node/lib/fbs/transport/options.d.ts +5 -5
  23. package/node/lib/fbs/transport/options.js +2 -2
  24. package/node/lib/fbs/transport/set-max-incoming-bitrate-request.d.ts +5 -5
  25. package/node/lib/fbs/transport/set-max-incoming-bitrate-request.d.ts.map +1 -1
  26. package/node/lib/fbs/transport/set-max-incoming-bitrate-request.js +3 -3
  27. package/node/lib/fbs/transport/set-max-outgoing-bitrate-request.d.ts +5 -5
  28. package/node/lib/fbs/transport/set-max-outgoing-bitrate-request.d.ts.map +1 -1
  29. package/node/lib/fbs/transport/set-max-outgoing-bitrate-request.js +3 -3
  30. package/node/lib/fbs/transport/set-min-outgoing-bitrate-request.d.ts +5 -5
  31. package/node/lib/fbs/transport/set-min-outgoing-bitrate-request.d.ts.map +1 -1
  32. package/node/lib/fbs/transport/set-min-outgoing-bitrate-request.js +3 -3
  33. package/node/lib/fbs/transport/stats.d.ts +38 -38
  34. package/node/lib/fbs/transport/stats.d.ts.map +1 -1
  35. package/node/lib/fbs/transport/stats.js +25 -25
  36. package/node/lib/ortc.d.ts +0 -1
  37. package/node/lib/ortc.d.ts.map +1 -1
  38. package/node/lib/ortc.js +1 -2
  39. package/node/lib/rtpParametersFbsUtils.d.ts.map +1 -1
  40. package/node/lib/rtpParametersFbsUtils.js +2 -2
  41. package/package.json +9 -9
  42. package/worker/deps/libwebrtc/libwebrtc/call/rtp_transport_controller_send.cc +10 -10
  43. package/worker/deps/libwebrtc/libwebrtc/mediasoup_helpers.h +6 -6
  44. package/worker/deps/libwebrtc/libwebrtc/modules/congestion_controller/goog_cc/alr_detector.cc +1 -1
  45. package/worker/deps/libwebrtc/libwebrtc/modules/pacing/paced_sender.cc +7 -7
  46. package/worker/deps/libwebrtc/libwebrtc/modules/remote_bitrate_estimator/include/remote_bitrate_estimator.h +1 -1
  47. package/worker/deps/libwebrtc/libwebrtc/modules/remote_bitrate_estimator/remote_bitrate_estimator_abs_send_time.cc +1 -1
  48. package/worker/fbs/rtpParameters.fbs +1 -2
  49. package/worker/fbs/rtpStream.fbs +3 -3
  50. package/worker/fbs/transport.fbs +23 -23
  51. package/worker/fuzzer/include/RTC/FuzzerDtlsTransport.hpp +4 -1
  52. package/worker/fuzzer/src/FuzzerUtils.cpp +5 -3
  53. package/worker/fuzzer/src/RTC/FuzzerDtlsTransport.cpp +8 -5
  54. package/worker/fuzzer/src/RTC/FuzzerRateCalculator.cpp +3 -3
  55. package/worker/fuzzer/src/RTC/FuzzerTrendCalculator.cpp +6 -6
  56. package/worker/fuzzer/src/RTC/RTCP/FuzzerFeedbackRtpTransport.cpp +3 -3
  57. package/worker/fuzzer/src/RTC/RTP/FuzzerPacket.cpp +2 -2
  58. package/worker/fuzzer/src/RTC/RTP/FuzzerRetransmissionBuffer.cpp +5 -5
  59. package/worker/fuzzer/src/RTC/RTP/FuzzerRtpStreamSend.cpp +3 -3
  60. package/worker/fuzzer/src/fuzzer.cpp +4 -0
  61. package/worker/include/Channel/ChannelNotification.hpp +3 -3
  62. package/worker/include/Channel/ChannelRequest.hpp +1 -1
  63. package/worker/include/Channel/ChannelSocket.hpp +11 -0
  64. package/worker/include/DepLibUV.hpp +16 -33
  65. package/worker/include/RTC/ActiveSpeakerObserver.hpp +11 -11
  66. package/worker/include/RTC/AudioLevelObserver.hpp +4 -4
  67. package/worker/include/RTC/BWE/AcknowledgedBitrateEstimatorInterface.hpp +55 -0
  68. package/worker/include/RTC/BWE/AimdRateControl.hpp +190 -0
  69. package/worker/include/RTC/BWE/BweTypes.hpp +211 -0
  70. package/worker/include/RTC/BWE/DelayBasedBwe.hpp +173 -0
  71. package/worker/include/RTC/BWE/FeedbackAdapter.hpp +72 -0
  72. package/worker/include/RTC/BWE/InterArrivalDelta.hpp +106 -0
  73. package/worker/include/RTC/BWE/LinkCapacityEstimator.hpp +84 -0
  74. package/worker/include/RTC/BWE/RobustThroughputEstimator.hpp +94 -0
  75. package/worker/include/RTC/BWE/SendPacketHistory.hpp +137 -0
  76. package/worker/include/RTC/BWE/TrendlineEstimator.hpp +101 -0
  77. package/worker/include/RTC/Consts.hpp +6 -6
  78. package/worker/include/RTC/Consumer.hpp +14 -12
  79. package/worker/include/RTC/DataConsumer.hpp +3 -3
  80. package/worker/include/RTC/DataProducer.hpp +3 -3
  81. package/worker/include/RTC/DtlsTransport.hpp +5 -2
  82. package/worker/include/RTC/ICE/IceCandidate.hpp +2 -2
  83. package/worker/include/RTC/ICE/IceServer.hpp +3 -3
  84. package/worker/include/RTC/KeyFrameRequestManager.hpp +3 -3
  85. package/worker/include/RTC/NEW_RTCP/packet/Packet.hpp +1 -1
  86. package/worker/include/RTC/NackGenerator.hpp +12 -12
  87. package/worker/include/RTC/PipeProducerStreamManager.hpp +3 -4
  88. package/worker/include/RTC/PipeTransport.hpp +18 -5
  89. package/worker/include/RTC/PlainTransport.hpp +18 -5
  90. package/worker/include/RTC/PortManager.hpp +4 -4
  91. package/worker/include/RTC/Producer.hpp +21 -12
  92. package/worker/include/RTC/ProducerStreamManager.hpp +12 -6
  93. package/worker/include/RTC/RTCP/Bye.hpp +2 -2
  94. package/worker/include/RTC/RTCP/FeedbackPsRemb.hpp +4 -4
  95. package/worker/include/RTC/RTCP/FeedbackRtpTmmb.hpp +3 -3
  96. package/worker/include/RTC/RTCP/FeedbackRtpTransport.hpp +54 -39
  97. package/worker/include/RTC/RTCP/Packet.hpp +3 -3
  98. package/worker/include/RTC/RTCP/ReceiverReport.hpp +3 -3
  99. package/worker/include/RTC/RTCP/Sdes.hpp +2 -2
  100. package/worker/include/RTC/RTCP/XR.hpp +2 -2
  101. package/worker/include/RTC/RTCP/XrDelaySinceLastRr.hpp +1 -1
  102. package/worker/include/RTC/RTP/Codecs/H264.hpp +1 -1
  103. package/worker/include/RTC/RTP/Codecs/Opus.hpp +2 -2
  104. package/worker/include/RTC/RTP/Codecs/PayloadDescriptorHandler.hpp +3 -3
  105. package/worker/include/RTC/RTP/Codecs/VP8.hpp +2 -2
  106. package/worker/include/RTC/RTP/Codecs/VP9.hpp +2 -2
  107. package/worker/include/RTC/RTP/HeaderExtensionIds.hpp +12 -12
  108. package/worker/include/RTC/RTP/Packet.hpp +13 -13
  109. package/worker/include/RTC/RTP/ProbationGenerator.hpp +1 -1
  110. package/worker/include/RTC/RTP/RetransmissionBuffer.hpp +7 -7
  111. package/worker/include/RTC/RTP/RtpStream.hpp +37 -51
  112. package/worker/include/RTC/RTP/RtpStreamRecv.hpp +59 -41
  113. package/worker/include/RTC/RTP/RtpStreamSend.hpp +20 -14
  114. package/worker/include/RTC/RTP/RtxStream.hpp +12 -13
  115. package/worker/include/RTC/RateCalculator.hpp +50 -44
  116. package/worker/include/RTC/RemoteCaptureTimeEstimator.hpp +5 -4
  117. package/worker/include/RTC/RemoteClockOffsetEstimator.hpp +11 -11
  118. package/worker/include/RTC/Router.hpp +6 -0
  119. package/worker/include/RTC/RtcLogger.hpp +1 -1
  120. package/worker/include/RTC/RtpDictionaries.hpp +10 -10
  121. package/worker/include/RTC/SCTP/association/Association.hpp +56 -28
  122. package/worker/include/RTC/SCTP/association/HeartbeatHandler.hpp +4 -4
  123. package/worker/include/RTC/SCTP/association/StateCookie.hpp +14 -14
  124. package/worker/include/RTC/SCTP/association/StreamResetHandler.hpp +2 -2
  125. package/worker/include/RTC/SCTP/association/TransmissionControlBlock.hpp +12 -12
  126. package/worker/include/RTC/SCTP/association/TransmissionControlBlockContextInterface.hpp +4 -4
  127. package/worker/include/RTC/SCTP/packet/TLV.hpp +1 -1
  128. package/worker/include/RTC/SCTP/packet/parameters/StateCookieParameter.hpp +3 -3
  129. package/worker/include/RTC/SCTP/public/AssociationInterface.hpp +4 -1
  130. package/worker/include/RTC/SCTP/public/AssociationMetrics.hpp +1 -1
  131. package/worker/include/RTC/SCTP/public/SctpOptions.hpp +12 -12
  132. package/worker/include/RTC/SCTP/public/SctpTypes.hpp +1 -1
  133. package/worker/include/RTC/SCTP/tx/OutstandingData.hpp +15 -16
  134. package/worker/include/RTC/SCTP/tx/RetransmissionQueue.hpp +7 -8
  135. package/worker/include/RTC/SCTP/tx/RetransmissionTimeout.hpp +20 -16
  136. package/worker/include/RTC/SCTP/tx/RoundRobinSendQueue.hpp +5 -6
  137. package/worker/include/RTC/SCTP/tx/SendQueueInterface.hpp +2 -2
  138. package/worker/include/RTC/SCTP/tx/StreamScheduler.hpp +5 -5
  139. package/worker/include/RTC/SctpDictionaries.hpp +3 -3
  140. package/worker/include/RTC/Serializable.hpp +1 -1
  141. package/worker/include/RTC/SimpleProducerStreamManager.hpp +3 -4
  142. package/worker/include/RTC/SimulcastProducerStreamManager.hpp +6 -7
  143. package/worker/include/RTC/SvcProducerStreamManager.hpp +6 -5
  144. package/worker/include/RTC/TcpConnection.hpp +9 -3
  145. package/worker/include/RTC/TcpServer.hpp +3 -0
  146. package/worker/include/RTC/Transport.hpp +52 -45
  147. package/worker/include/RTC/TransportCongestionControlClient.hpp +30 -25
  148. package/worker/include/RTC/TransportCongestionControlServer.hpp +17 -17
  149. package/worker/include/RTC/TrendCalculator.hpp +5 -5
  150. package/worker/include/RTC/UdpSocket.hpp +11 -2
  151. package/worker/include/RTC/WebRtcServer.hpp +20 -5
  152. package/worker/include/RTC/WebRtcTransport.hpp +35 -10
  153. package/worker/include/Settings.hpp +4 -2
  154. package/worker/include/Shared.hpp +5 -20
  155. package/worker/include/SharedInterface.hpp +6 -28
  156. package/worker/include/Utils.hpp +40 -21
  157. package/worker/include/common.hpp +4 -0
  158. package/worker/include/handles/BackoffTimerHandle.hpp +4 -4
  159. package/worker/include/handles/BackoffTimerHandleInterface.hpp +5 -5
  160. package/worker/include/handles/TcpConnectionHandle.hpp +6 -6
  161. package/worker/include/handles/TcpServerHandle.hpp +1 -1
  162. package/worker/include/handles/TimerHandle.hpp +15 -9
  163. package/worker/include/handles/TimerHandleInterface.hpp +10 -4
  164. package/worker/include/handles/UdpSocketHandle.hpp +3 -3
  165. package/worker/include/handles/UnixStreamSocketHandle.hpp +2 -2
  166. package/worker/meson.build +81 -36
  167. package/worker/meson_options.txt +1 -0
  168. package/worker/mocks/include/MockShared.hpp +24 -23
  169. package/worker/mocks/include/RTC/SCTP/association/MockTransmissionControlBlockContext.hpp +51 -27
  170. package/worker/mocks/include/RTC/SCTP/tx/MockSendQueue.hpp +11 -11
  171. package/worker/mocks/include/handles/MockBackoffTimerHandle.hpp +10 -10
  172. package/worker/mocks/include/handles/MockTimerHandle.hpp +60 -22
  173. package/worker/mocks/src/MockShared.cpp +51 -5
  174. package/worker/mocks/src/handles/MockBackoffTimerHandle.cpp +29 -15
  175. package/worker/mocks/src/handles/MockTimerHandle.cpp +117 -0
  176. package/worker/scripts/clang-scripts.mjs +2 -2
  177. package/worker/src/Channel/ChannelNotification.cpp +5 -6
  178. package/worker/src/Channel/ChannelSocket.cpp +20 -2
  179. package/worker/src/DepLibUV.cpp +4 -5
  180. package/worker/src/RTC/ActiveSpeakerObserver.cpp +59 -47
  181. package/worker/src/RTC/AudioLevelObserver.cpp +7 -7
  182. package/worker/src/RTC/BWE/AimdRateControl.cpp +468 -0
  183. package/worker/src/RTC/BWE/BweTypes.cpp +61 -0
  184. package/worker/src/RTC/BWE/DelayBasedBwe.cpp +275 -0
  185. package/worker/src/RTC/BWE/FeedbackAdapter.cpp +148 -0
  186. package/worker/src/RTC/BWE/InterArrivalDelta.cpp +181 -0
  187. package/worker/src/RTC/BWE/LinkCapacityEstimator.cpp +133 -0
  188. package/worker/src/RTC/BWE/RobustThroughputEstimator.cpp +245 -0
  189. package/worker/src/RTC/BWE/SendPacketHistory.cpp +184 -0
  190. package/worker/src/RTC/BWE/TrendlineEstimator.cpp +233 -0
  191. package/worker/src/RTC/Consumer.cpp +48 -35
  192. package/worker/src/RTC/DataConsumer.cpp +4 -4
  193. package/worker/src/RTC/DataProducer.cpp +3 -3
  194. package/worker/src/RTC/DirectTransport.cpp +2 -2
  195. package/worker/src/RTC/DtlsTransport.cpp +14 -11
  196. package/worker/src/RTC/ICE/IceServer.cpp +2 -2
  197. package/worker/src/RTC/KeyFrameRequestManager.cpp +16 -12
  198. package/worker/src/RTC/NackGenerator.cpp +12 -12
  199. package/worker/src/RTC/PipeProducerStreamManager.cpp +6 -6
  200. package/worker/src/RTC/PipeTransport.cpp +16 -13
  201. package/worker/src/RTC/PlainTransport.cpp +25 -16
  202. package/worker/src/RTC/Producer.cpp +50 -36
  203. package/worker/src/RTC/RTCP/FeedbackPsRemb.cpp +13 -6
  204. package/worker/src/RTC/RTCP/FeedbackRtpTmmb.cpp +14 -5
  205. package/worker/src/RTC/RTCP/FeedbackRtpTransport.cpp +76 -50
  206. package/worker/src/RTC/RTP/Codecs/VP8.cpp +1 -1
  207. package/worker/src/RTC/RTP/Codecs/VP9.cpp +4 -4
  208. package/worker/src/RTC/RTP/Packet.cpp +9 -10
  209. package/worker/src/RTC/RTP/RetransmissionBuffer.cpp +6 -6
  210. package/worker/src/RTC/RTP/RtpStream.cpp +19 -19
  211. package/worker/src/RTC/RTP/RtpStreamRecv.cpp +146 -81
  212. package/worker/src/RTC/RTP/RtpStreamSend.cpp +49 -44
  213. package/worker/src/RTC/RTP/RtxStream.cpp +7 -10
  214. package/worker/src/RTC/RateCalculator.cpp +99 -136
  215. package/worker/src/RTC/RemoteCaptureTimeEstimator.cpp +13 -13
  216. package/worker/src/RTC/RemoteClockOffsetEstimator.cpp +18 -17
  217. package/worker/src/RTC/Router.cpp +18 -1
  218. package/worker/src/RTC/RtpDictionaries/RtpEncodingParameters.cpp +5 -2
  219. package/worker/src/RTC/SCTP/association/Association.cpp +131 -102
  220. package/worker/src/RTC/SCTP/association/AssociationListenerDeferrer.cpp +4 -4
  221. package/worker/src/RTC/SCTP/association/Capabilities.cpp +1 -1
  222. package/worker/src/RTC/SCTP/association/HeartbeatHandler.cpp +25 -18
  223. package/worker/src/RTC/SCTP/association/StateCookie.cpp +7 -6
  224. package/worker/src/RTC/SCTP/association/StreamResetHandler.cpp +16 -13
  225. package/worker/src/RTC/SCTP/association/TransmissionControlBlock.cpp +28 -26
  226. package/worker/src/RTC/SCTP/packet/chunks/SackChunk.cpp +0 -1
  227. package/worker/src/RTC/SCTP/packet/parameters/StateCookieParameter.cpp +2 -2
  228. package/worker/src/RTC/SCTP/public/AssociationMetrics.cpp +1 -1
  229. package/worker/src/RTC/SCTP/public/SctpOptions.cpp +13 -13
  230. package/worker/src/RTC/SCTP/rx/DataTracker.cpp +1 -1
  231. package/worker/src/RTC/SCTP/rx/ReassemblyQueue.cpp +5 -5
  232. package/worker/src/RTC/SCTP/tx/OutstandingData.cpp +15 -15
  233. package/worker/src/RTC/SCTP/tx/RetransmissionQueue.cpp +15 -15
  234. package/worker/src/RTC/SCTP/tx/RetransmissionTimeout.cpp +29 -26
  235. package/worker/src/RTC/SCTP/tx/RoundRobinSendQueue.cpp +12 -11
  236. package/worker/src/RTC/SCTP/tx/StreamScheduler.cpp +4 -4
  237. package/worker/src/RTC/SctpDictionaries/SctpStreamParameters.cpp +2 -2
  238. package/worker/src/RTC/SimpleProducerStreamManager.cpp +10 -10
  239. package/worker/src/RTC/SimulcastProducerStreamManager.cpp +39 -37
  240. package/worker/src/RTC/SvcProducerStreamManager.cpp +39 -25
  241. package/worker/src/RTC/TcpConnection.cpp +9 -3
  242. package/worker/src/RTC/TcpServer.cpp +7 -2
  243. package/worker/src/RTC/Transport.cpp +242 -302
  244. package/worker/src/RTC/TransportCongestionControlClient.cpp +78 -71
  245. package/worker/src/RTC/TransportCongestionControlServer.cpp +38 -40
  246. package/worker/src/RTC/TrendCalculator.cpp +3 -3
  247. package/worker/src/RTC/UdpSocket.cpp +14 -3
  248. package/worker/src/RTC/WebRtcServer.cpp +20 -14
  249. package/worker/src/RTC/WebRtcTransport.cpp +35 -30
  250. package/worker/src/Settings.cpp +10 -0
  251. package/worker/src/Shared.cpp +2 -2
  252. package/worker/src/Utils/Crypto.cpp +2 -2
  253. package/worker/src/Worker.cpp +5 -1
  254. package/worker/src/handles/BackoffTimerHandle.cpp +24 -11
  255. package/worker/src/handles/TimerHandle.cpp +74 -25
  256. package/worker/src/lib.cpp +6 -0
  257. package/worker/tasks.py +171 -44
  258. package/worker/test/include/RTC/BWE/helpers/LinkSimulator.hpp +117 -0
  259. package/worker/test/src/RTC/BWE/TestAimdRateControl.cpp +400 -0
  260. package/worker/test/src/RTC/BWE/TestDelayBasedBwe.cpp +568 -0
  261. package/worker/test/src/RTC/BWE/TestFeedbackAdapter.cpp +546 -0
  262. package/worker/test/src/RTC/BWE/TestInterArrivalDelta.cpp +301 -0
  263. package/worker/test/src/RTC/BWE/TestLinkCapacityEstimator.cpp +115 -0
  264. package/worker/test/src/RTC/BWE/TestRobustThroughputEstimator.cpp +433 -0
  265. package/worker/test/src/RTC/BWE/TestSendPacketHistory.cpp +259 -0
  266. package/worker/test/src/RTC/BWE/TestTrendlineEstimator.cpp +137 -0
  267. package/worker/test/src/RTC/BWE/helpers/LinkSimulator.cpp +171 -0
  268. package/worker/test/src/RTC/RTCP/TestFeedbackPsRemb.cpp +1 -1
  269. package/worker/test/src/RTC/RTCP/TestFeedbackRtpTmmb.cpp +1 -1
  270. package/worker/test/src/RTC/RTCP/TestFeedbackRtpTransport.cpp +246 -208
  271. package/worker/test/src/RTC/RTP/TestPacket.cpp +11 -11
  272. package/worker/test/src/RTC/RTP/TestRetransmissionBuffer.cpp +12 -12
  273. package/worker/test/src/RTC/RTP/TestRtpStreamRecv.cpp +23 -16
  274. package/worker/test/src/RTC/RTP/TestRtpStreamSend.cpp +13 -13
  275. package/worker/test/src/RTC/SCTP/association/TestAssociation.cpp +27 -22
  276. package/worker/test/src/RTC/SCTP/association/TestHeartbeatHandler.cpp +21 -15
  277. package/worker/test/src/RTC/SCTP/association/TestStateCookie.cpp +6 -6
  278. package/worker/test/src/RTC/SCTP/association/TestStreamResetHandler.cpp +17 -13
  279. package/worker/test/src/RTC/SCTP/association/TestTransmissionControlBlock.cpp +3 -3
  280. package/worker/test/src/RTC/SCTP/packet/chunks/TestForwardTsnChunk.cpp +2 -2
  281. package/worker/test/src/RTC/SCTP/packet/chunks/TestIForwardTsnChunk.cpp +23 -23
  282. package/worker/test/src/RTC/SCTP/packet/chunks/TestInitChunk.cpp +1 -1
  283. package/worker/test/src/RTC/SCTP/packet/chunks/TestSackChunk.cpp +1 -1
  284. package/worker/test/src/RTC/SCTP/packet/parameters/TestIPv6AddressParameter.cpp +1 -1
  285. package/worker/test/src/RTC/SCTP/rx/TestDataTracker.cpp +37 -37
  286. package/worker/test/src/RTC/SCTP/rx/TestInterleavedReassemblyStreams.cpp +10 -10
  287. package/worker/test/src/RTC/SCTP/rx/TestReassemblyQueue.cpp +1 -1
  288. package/worker/test/src/RTC/SCTP/tx/TestOutstandingData.cpp +93 -93
  289. package/worker/test/src/RTC/SCTP/tx/TestRetransmissionQueue.cpp +247 -247
  290. package/worker/test/src/RTC/SCTP/tx/TestRetransmissionTimeout.cpp +100 -80
  291. package/worker/test/src/RTC/SCTP/tx/TestRoundRobinSendQueue.cpp +163 -163
  292. package/worker/test/src/RTC/SCTP/tx/TestStreamScheduler.cpp +76 -77
  293. package/worker/test/src/RTC/TestConsumer.cpp +8 -3
  294. package/worker/test/src/RTC/TestKeyFrameRequestManager.cpp +3 -3
  295. package/worker/test/src/RTC/TestNackGenerator.cpp +3 -3
  296. package/worker/test/src/RTC/TestPipeProducerStreamManager.cpp +5 -5
  297. package/worker/test/src/RTC/TestRateCalculator.cpp +110 -14
  298. package/worker/test/src/RTC/TestRemoteCaptureTimeEstimator.cpp +22 -17
  299. package/worker/test/src/RTC/TestRemoteClockOffsetEstimator.cpp +87 -85
  300. package/worker/test/src/RTC/TestSimpleProducerStreamManager.cpp +54 -47
  301. package/worker/test/src/RTC/TestSimulcastProducerStreamManager.cpp +83 -69
  302. package/worker/test/src/RTC/TestSvcProducerStreamManager.cpp +76 -65
  303. package/worker/test/src/RTC/TestTransportCongestionControlServer.cpp +72 -66
  304. package/worker/test/src/RTC/TestTransportTuple.cpp +19 -4
  305. package/worker/test/src/TestDepLibUV.cpp +19 -0
  306. package/worker/test/src/Utils/TestTime.cpp +57 -26
  307. package/worker/test/src/testHelpers.cpp +1 -1
  308. package/worker/test/src/tests.cpp +6 -0
  309. package/worker/include/RTC/SenderBandwidthEstimator.hpp +0 -118
  310. package/worker/src/RTC/SenderBandwidthEstimator.cpp +0 -269
@@ -5,20 +5,22 @@
5
5
 
6
6
  SCENARIO("SCTP RetransmissionTimeout", "[sctp][retransmissiontimeout]")
7
7
  {
8
- constexpr uint64_t MaxRttMs{ 8000 };
9
- constexpr uint64_t InitialRtoMs{ 200 };
10
- constexpr uint64_t MaxRtoMs{ 800 };
11
- constexpr uint64_t MinRtoMs{ 120 };
12
- constexpr uint64_t MinRttVarianceMs{ 220 };
8
+ // NOTE: The options are in milliseconds, while the class works in
9
+ // microseconds, so the expectations below are in microseconds.
10
+ constexpr int64_t MaxRttMs{ 8000 };
11
+ constexpr int64_t InitialRtoMs{ 200 };
12
+ constexpr int64_t MaxRtoMs{ 800 };
13
+ constexpr int64_t MinRtoMs{ 120 };
14
+ constexpr int64_t MinRttVarianceMs{ 220 };
13
15
 
14
16
  // NOTE: No need to pass const integers to the lambda.
15
17
  auto makeSctpOptions = []()
16
18
  {
17
19
  RTC::SCTP::SctpOptions sctpOptions{ .maxRttMs = MaxRttMs,
18
- .initialRtoMs = InitialRtoMs,
19
- .minRtoMs = MinRtoMs,
20
- .maxRtoMs = MaxRtoMs,
21
- .minRttVarianceMs = MinRttVarianceMs };
20
+ .initialRtoMs = InitialRtoMs,
21
+ .minRtoMs = MinRtoMs,
22
+ .maxRtoMs = MaxRtoMs,
23
+ .minRttVarianceMs = MinRttVarianceMs };
22
24
 
23
25
  return sctpOptions;
24
26
  };
@@ -27,24 +29,51 @@ SCENARIO("SCTP RetransmissionTimeout", "[sctp][retransmissiontimeout]")
27
29
  {
28
30
  const RTC::SCTP::RetransmissionTimeout rto(makeSctpOptions());
29
31
 
30
- REQUIRE(rto.GetRtoMs() == InitialRtoMs);
32
+ REQUIRE(rto.GetRtoUs() == InitialRtoMs * 1000);
31
33
  }
32
34
 
33
35
  SECTION("too large values don't affect RTO")
34
36
  {
35
37
  RTC::SCTP::RetransmissionTimeout rto(makeSctpOptions());
36
38
 
37
- rto.ObserveRttMs(MaxRttMs + 100);
39
+ rto.ObserveRttUs((MaxRttMs + 100) * 1000);
38
40
 
39
- REQUIRE(rto.GetRtoMs() == InitialRtoMs);
41
+ REQUIRE(rto.GetRtoUs() == InitialRtoMs * 1000);
40
42
 
41
- rto.ObserveRttMs(124);
43
+ rto.ObserveRttUs(124 * 1000);
42
44
 
43
- REQUIRE(rto.GetRtoMs() == 372);
45
+ REQUIRE(rto.GetRtoUs() == 372000);
44
46
 
45
- rto.ObserveRttMs(MaxRttMs + 100);
47
+ rto.ObserveRttUs((MaxRttMs + 100) * 1000);
46
48
 
47
- REQUIRE(rto.GetRtoMs() == 372);
49
+ REQUIRE(rto.GetRtoUs() == 372000);
50
+ }
51
+
52
+ SECTION("sub-millisecond RTT is observed")
53
+ {
54
+ // A RTT below a millisecond is a normal measurement over a LAN or over
55
+ // loopback, and it must take part in the RTO computation.
56
+ RTC::SCTP::RetransmissionTimeout rto(makeSctpOptions());
57
+
58
+ rto.ObserveRttUs(500);
59
+
60
+ // First measurement, so srtt is the RTT itself and the RTT variance is half
61
+ // of it, which the minimum RTT variance floor then dominates.
62
+ REQUIRE(rto.GetRtoUs() == MinRtoMs * 1000);
63
+ REQUIRE(rto.GetSrttUs() == 500);
64
+ }
65
+
66
+ SECTION("zero and negative values don't affect RTO")
67
+ {
68
+ RTC::SCTP::RetransmissionTimeout rto(makeSctpOptions());
69
+
70
+ rto.ObserveRttUs(0);
71
+
72
+ REQUIRE(rto.GetRtoUs() == InitialRtoMs * 1000);
73
+
74
+ rto.ObserveRttUs(-1);
75
+
76
+ REQUIRE(rto.GetRtoUs() == InitialRtoMs * 1000);
48
77
  }
49
78
 
50
79
  SECTION("will never go below minimum RTO")
@@ -53,10 +82,10 @@ SCENARIO("SCTP RetransmissionTimeout", "[sctp][retransmissiontimeout]")
53
82
 
54
83
  for (int i{ 0 }; i < 1000; ++i)
55
84
  {
56
- rto.ObserveRttMs(1);
85
+ rto.ObserveRttUs(1 * 1000);
57
86
  }
58
87
 
59
- REQUIRE(rto.GetRtoMs() <= MinRtoMs);
88
+ REQUIRE(rto.GetRtoUs() <= MinRtoMs * 1000);
60
89
  }
61
90
 
62
91
  SECTION("will never go above maximum RTO")
@@ -65,117 +94,111 @@ SCENARIO("SCTP RetransmissionTimeout", "[sctp][retransmissiontimeout]")
65
94
 
66
95
  for (int i{ 0 }; i < 1000; ++i)
67
96
  {
68
- rto.ObserveRttMs(MaxRttMs - 1);
97
+ rto.ObserveRttUs((MaxRttMs - 1) * 1000);
69
98
  // Adding jitter, which would make it RTO be well above RTT.
70
- rto.ObserveRttMs(MaxRttMs - 100);
99
+ rto.ObserveRttUs((MaxRttMs - 100) * 1000);
71
100
  }
72
101
 
73
- REQUIRE(rto.GetRtoMs() >= MaxRtoMs);
102
+ REQUIRE(rto.GetRtoUs() >= MaxRtoMs * 1000);
74
103
  }
75
104
 
76
105
  SECTION("calculates RTO for stable RTT")
77
106
  {
78
107
  RTC::SCTP::RetransmissionTimeout rto(makeSctpOptions());
79
108
 
80
- rto.ObserveRttMs(124);
109
+ rto.ObserveRttUs(124 * 1000);
81
110
 
82
- REQUIRE(rto.GetRtoMs() == 372);
111
+ REQUIRE(rto.GetRtoUs() == 372000);
83
112
 
84
- rto.ObserveRttMs(128);
113
+ rto.ObserveRttUs(128 * 1000);
85
114
 
86
- REQUIRE(rto.GetRtoMs() == 315);
115
+ REQUIRE(rto.GetRtoUs() == 314500);
87
116
 
88
- rto.ObserveRttMs(123);
117
+ rto.ObserveRttUs(123 * 1000);
89
118
 
90
- REQUIRE(rto.GetRtoMs() == 268);
119
+ REQUIRE(rto.GetRtoUs() == 268313);
91
120
 
92
- rto.ObserveRttMs(125);
121
+ rto.ObserveRttUs(125 * 1000);
93
122
 
94
- // NOTE: This should be 234 (as per same test in libwebrtc) but we are not
95
- // that precise.
96
- // REQUIRE(rto.GetRtoMs() == 234);
97
- REQUIRE(rto.GetRtoMs() == 233);
123
+ REQUIRE(rto.GetRtoUs() == 234398);
98
124
 
99
- rto.ObserveRttMs(127);
125
+ rto.ObserveRttUs(127 * 1000);
100
126
 
101
- // NOTE: This should be 235 (as per same test in libwebrtc) but we are not
102
- // that precise.
103
- // REQUIRE(rto.GetRtoMs() == 235);
104
- REQUIRE(rto.GetRtoMs() == 233);
127
+ REQUIRE(rto.GetRtoUs() == 234724);
105
128
  }
106
129
 
107
130
  SECTION("calculates RTO for unstable RTT")
108
131
  {
109
132
  RTC::SCTP::RetransmissionTimeout rto(makeSctpOptions());
110
133
 
111
- rto.ObserveRttMs(124);
134
+ rto.ObserveRttUs(124 * 1000);
112
135
 
113
- REQUIRE(rto.GetRtoMs() == 372);
136
+ REQUIRE(rto.GetRtoUs() == 372000);
114
137
 
115
- rto.ObserveRttMs(402);
138
+ rto.ObserveRttUs(402 * 1000);
116
139
 
117
- REQUIRE(rto.GetRtoMs() == 623);
140
+ REQUIRE(rto.GetRtoUs() == 622750);
118
141
 
119
- rto.ObserveRttMs(728);
142
+ rto.ObserveRttUs(728 * 1000);
120
143
 
121
- REQUIRE(rto.GetRtoMs() == 800);
144
+ REQUIRE(rto.GetRtoUs() == 800000);
122
145
 
123
- rto.ObserveRttMs(89);
146
+ rto.ObserveRttUs(89 * 1000);
124
147
 
125
- REQUIRE(rto.GetRtoMs() == 800);
148
+ REQUIRE(rto.GetRtoUs() == 800000);
126
149
 
127
- rto.ObserveRttMs(126);
150
+ rto.ObserveRttUs(126 * 1000);
128
151
 
129
- REQUIRE(rto.GetRtoMs() == 800);
152
+ REQUIRE(rto.GetRtoUs() == 800000);
130
153
  }
131
154
 
132
155
  SECTION("will stabilize RTO after a while")
133
156
  {
134
157
  RTC::SCTP::RetransmissionTimeout rto(makeSctpOptions());
135
158
 
136
- rto.ObserveRttMs(124);
137
- rto.ObserveRttMs(402);
138
- rto.ObserveRttMs(728);
139
- rto.ObserveRttMs(89);
140
- rto.ObserveRttMs(126);
159
+ rto.ObserveRttUs(124 * 1000);
160
+ rto.ObserveRttUs(402 * 1000);
161
+ rto.ObserveRttUs(728 * 1000);
162
+ rto.ObserveRttUs(89 * 1000);
163
+ rto.ObserveRttUs(126 * 1000);
141
164
 
142
- REQUIRE(rto.GetRtoMs() == 800);
165
+ REQUIRE(rto.GetRtoUs() == 800000);
143
166
 
144
- rto.ObserveRttMs(124);
167
+ rto.ObserveRttUs(124 * 1000);
145
168
 
146
- REQUIRE(rto.GetRtoMs() == 800);
169
+ REQUIRE(rto.GetRtoUs() == 800000);
147
170
 
148
- rto.ObserveRttMs(122);
171
+ rto.ObserveRttUs(122 * 1000);
149
172
 
150
- REQUIRE(rto.GetRtoMs() == 709);
173
+ REQUIRE(rto.GetRtoUs() == 709247);
151
174
 
152
- rto.ObserveRttMs(123);
175
+ rto.ObserveRttUs(123 * 1000);
153
176
 
154
- REQUIRE(rto.GetRtoMs() == 630);
177
+ REQUIRE(rto.GetRtoUs() == 630287);
155
178
 
156
- rto.ObserveRttMs(124);
179
+ rto.ObserveRttUs(124 * 1000);
157
180
 
158
- REQUIRE(rto.GetRtoMs() == 562);
181
+ REQUIRE(rto.GetRtoUs() == 561742);
159
182
 
160
- rto.ObserveRttMs(122);
183
+ rto.ObserveRttUs(122 * 1000);
161
184
 
162
- REQUIRE(rto.GetRtoMs() == 505);
185
+ REQUIRE(rto.GetRtoUs() == 504830);
163
186
 
164
- rto.ObserveRttMs(124);
187
+ rto.ObserveRttUs(124 * 1000);
165
188
 
166
- REQUIRE(rto.GetRtoMs() == 454);
189
+ REQUIRE(rto.GetRtoUs() == 453768);
167
190
 
168
- rto.ObserveRttMs(124);
191
+ rto.ObserveRttUs(124 * 1000);
169
192
 
170
- REQUIRE(rto.GetRtoMs() == 410);
193
+ REQUIRE(rto.GetRtoUs() == 409954);
171
194
 
172
- rto.ObserveRttMs(124);
195
+ rto.ObserveRttUs(124 * 1000);
173
196
 
174
- REQUIRE(rto.GetRtoMs() == 372);
197
+ REQUIRE(rto.GetRtoUs() == 372264);
175
198
 
176
- rto.ObserveRttMs(124);
199
+ rto.ObserveRttUs(124 * 1000);
177
200
 
178
- REQUIRE(rto.GetRtoMs() == 340);
201
+ REQUIRE(rto.GetRtoUs() == 339772);
179
202
  }
180
203
 
181
204
  SECTION("will always stay above RTT")
@@ -190,13 +213,10 @@ SCENARIO("SCTP RetransmissionTimeout", "[sctp][retransmissiontimeout]")
190
213
 
191
214
  for (int i{ 0 }; i < 1000; ++i)
192
215
  {
193
- rto.ObserveRttMs(124);
216
+ rto.ObserveRttUs(124 * 1000);
194
217
  }
195
218
 
196
- // NOTE: This should be 234 (as per same test in libwebrtc) but we are not
197
- // that precise.
198
- // REQUIRE(rto.GetRtoMs() == 234);
199
- REQUIRE(rto.GetRtoMs() == 232);
219
+ REQUIRE(rto.GetRtoUs() == 234000);
200
220
  }
201
221
 
202
222
  SECTION("can specify smaller minimum RTT variance")
@@ -209,10 +229,10 @@ SCENARIO("SCTP RetransmissionTimeout", "[sctp][retransmissiontimeout]")
209
229
 
210
230
  for (int i{ 0 }; i < 1000; ++i)
211
231
  {
212
- rto.ObserveRttMs(124);
232
+ rto.ObserveRttUs(124 * 1000);
213
233
  }
214
234
 
215
- REQUIRE(rto.GetRtoMs() == 184);
235
+ REQUIRE(rto.GetRtoUs() == 184000);
216
236
  }
217
237
 
218
238
  SECTION("can specify larger minimum RTT variance")
@@ -225,9 +245,9 @@ SCENARIO("SCTP RetransmissionTimeout", "[sctp][retransmissiontimeout]")
225
245
 
226
246
  for (int i{ 0 }; i < 1000; ++i)
227
247
  {
228
- rto.ObserveRttMs(124);
248
+ rto.ObserveRttUs(124 * 1000);
229
249
  }
230
250
 
231
- REQUIRE(rto.GetRtoMs() == 284);
251
+ REQUIRE(rto.GetRtoUs() == 284000);
232
252
  }
233
253
  }