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.
Files changed (322) hide show
  1. package/CHANGELOG.md +16 -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/FBS/meson.build +25 -0
  49. package/worker/fbs/meson.build +15 -18
  50. package/worker/fbs/rtpParameters.fbs +1 -2
  51. package/worker/fbs/rtpStream.fbs +3 -3
  52. package/worker/fbs/transport.fbs +23 -23
  53. package/worker/fuzzer/include/RTC/FuzzerDtlsTransport.hpp +4 -1
  54. package/worker/fuzzer/src/FuzzerUtils.cpp +5 -3
  55. package/worker/fuzzer/src/RTC/FuzzerDtlsTransport.cpp +8 -5
  56. package/worker/fuzzer/src/RTC/FuzzerRateCalculator.cpp +3 -3
  57. package/worker/fuzzer/src/RTC/FuzzerTrendCalculator.cpp +6 -6
  58. package/worker/fuzzer/src/RTC/RTCP/FuzzerFeedbackRtpTransport.cpp +3 -3
  59. package/worker/fuzzer/src/RTC/RTP/FuzzerPacket.cpp +2 -2
  60. package/worker/fuzzer/src/RTC/RTP/FuzzerRetransmissionBuffer.cpp +5 -5
  61. package/worker/fuzzer/src/RTC/RTP/FuzzerRtpStreamSend.cpp +3 -3
  62. package/worker/fuzzer/src/fuzzer.cpp +4 -0
  63. package/worker/include/Channel/ChannelNotification.hpp +3 -3
  64. package/worker/include/Channel/ChannelRequest.hpp +1 -1
  65. package/worker/include/Channel/ChannelSocket.hpp +11 -0
  66. package/worker/include/DepLibUV.hpp +16 -33
  67. package/worker/include/RTC/ActiveSpeakerObserver.hpp +11 -11
  68. package/worker/include/RTC/AudioLevelObserver.hpp +4 -4
  69. package/worker/include/RTC/BWE/AcknowledgedBitrateEstimatorInterface.hpp +55 -0
  70. package/worker/include/RTC/BWE/AimdRateControl.hpp +190 -0
  71. package/worker/include/RTC/BWE/BweTypes.hpp +211 -0
  72. package/worker/include/RTC/BWE/DelayBasedBwe.hpp +173 -0
  73. package/worker/include/RTC/BWE/FeedbackAdapter.hpp +72 -0
  74. package/worker/include/RTC/BWE/InterArrivalDelta.hpp +106 -0
  75. package/worker/include/RTC/BWE/LinkCapacityEstimator.hpp +84 -0
  76. package/worker/include/RTC/BWE/LossBasedController.hpp +520 -0
  77. package/worker/include/RTC/BWE/RobustThroughputEstimator.hpp +94 -0
  78. package/worker/include/RTC/BWE/SendPacketHistory.hpp +137 -0
  79. package/worker/include/RTC/BWE/TargetRateController.hpp +306 -0
  80. package/worker/include/RTC/BWE/TrendlineEstimator.hpp +143 -0
  81. package/worker/include/RTC/BWE/Utils.hpp +39 -0
  82. package/worker/include/RTC/Consts.hpp +6 -6
  83. package/worker/include/RTC/Consumer.hpp +14 -12
  84. package/worker/include/RTC/DataConsumer.hpp +3 -3
  85. package/worker/include/RTC/DataProducer.hpp +3 -3
  86. package/worker/include/RTC/DtlsTransport.hpp +5 -2
  87. package/worker/include/RTC/ICE/IceCandidate.hpp +2 -2
  88. package/worker/include/RTC/ICE/IceServer.hpp +3 -3
  89. package/worker/include/RTC/KeyFrameRequestManager.hpp +3 -3
  90. package/worker/include/RTC/NEW_RTCP/packet/Packet.hpp +1 -1
  91. package/worker/include/RTC/NackGenerator.hpp +12 -12
  92. package/worker/include/RTC/PipeProducerStreamManager.hpp +3 -4
  93. package/worker/include/RTC/PipeTransport.hpp +18 -5
  94. package/worker/include/RTC/PlainTransport.hpp +18 -5
  95. package/worker/include/RTC/PortManager.hpp +4 -4
  96. package/worker/include/RTC/Producer.hpp +21 -12
  97. package/worker/include/RTC/ProducerStreamManager.hpp +12 -6
  98. package/worker/include/RTC/RTCP/Bye.hpp +2 -2
  99. package/worker/include/RTC/RTCP/FeedbackPsRemb.hpp +4 -4
  100. package/worker/include/RTC/RTCP/FeedbackRtpTmmb.hpp +3 -3
  101. package/worker/include/RTC/RTCP/FeedbackRtpTransport.hpp +54 -39
  102. package/worker/include/RTC/RTCP/Packet.hpp +3 -3
  103. package/worker/include/RTC/RTCP/ReceiverReport.hpp +3 -3
  104. package/worker/include/RTC/RTCP/Sdes.hpp +2 -2
  105. package/worker/include/RTC/RTCP/XR.hpp +2 -2
  106. package/worker/include/RTC/RTCP/XrDelaySinceLastRr.hpp +1 -1
  107. package/worker/include/RTC/RTP/Codecs/H264.hpp +1 -1
  108. package/worker/include/RTC/RTP/Codecs/Opus.hpp +2 -2
  109. package/worker/include/RTC/RTP/Codecs/PayloadDescriptorHandler.hpp +3 -3
  110. package/worker/include/RTC/RTP/Codecs/VP8.hpp +2 -2
  111. package/worker/include/RTC/RTP/Codecs/VP9.hpp +2 -2
  112. package/worker/include/RTC/RTP/HeaderExtensionIds.hpp +12 -12
  113. package/worker/include/RTC/RTP/Packet.hpp +13 -13
  114. package/worker/include/RTC/RTP/ProbationGenerator.hpp +1 -1
  115. package/worker/include/RTC/RTP/RetransmissionBuffer.hpp +7 -7
  116. package/worker/include/RTC/RTP/RtpStream.hpp +37 -51
  117. package/worker/include/RTC/RTP/RtpStreamRecv.hpp +59 -41
  118. package/worker/include/RTC/RTP/RtpStreamSend.hpp +20 -14
  119. package/worker/include/RTC/RTP/RtxStream.hpp +12 -13
  120. package/worker/include/RTC/RateCalculator.hpp +50 -44
  121. package/worker/include/RTC/RemoteCaptureTimeEstimator.hpp +5 -4
  122. package/worker/include/RTC/RemoteClockOffsetEstimator.hpp +11 -11
  123. package/worker/include/RTC/Router.hpp +6 -0
  124. package/worker/include/RTC/RtcLogger.hpp +1 -1
  125. package/worker/include/RTC/RtpDictionaries.hpp +10 -10
  126. package/worker/include/RTC/SCTP/association/Association.hpp +56 -28
  127. package/worker/include/RTC/SCTP/association/HeartbeatHandler.hpp +4 -4
  128. package/worker/include/RTC/SCTP/association/StateCookie.hpp +14 -14
  129. package/worker/include/RTC/SCTP/association/StreamResetHandler.hpp +38 -2
  130. package/worker/include/RTC/SCTP/association/TransmissionControlBlock.hpp +12 -12
  131. package/worker/include/RTC/SCTP/association/TransmissionControlBlockContextInterface.hpp +4 -4
  132. package/worker/include/RTC/SCTP/packet/TLV.hpp +1 -1
  133. package/worker/include/RTC/SCTP/packet/parameters/StateCookieParameter.hpp +3 -3
  134. package/worker/include/RTC/SCTP/public/AssociationInterface.hpp +4 -1
  135. package/worker/include/RTC/SCTP/public/AssociationMetrics.hpp +1 -1
  136. package/worker/include/RTC/SCTP/public/SctpOptions.hpp +12 -12
  137. package/worker/include/RTC/SCTP/public/SctpTypes.hpp +6 -6
  138. package/worker/include/RTC/SCTP/rx/ReassemblyQueue.hpp +10 -0
  139. package/worker/include/RTC/SCTP/tx/OutstandingData.hpp +15 -16
  140. package/worker/include/RTC/SCTP/tx/RetransmissionQueue.hpp +7 -8
  141. package/worker/include/RTC/SCTP/tx/RetransmissionTimeout.hpp +20 -16
  142. package/worker/include/RTC/SCTP/tx/RoundRobinSendQueue.hpp +5 -6
  143. package/worker/include/RTC/SCTP/tx/SendQueueInterface.hpp +2 -2
  144. package/worker/include/RTC/SCTP/tx/StreamScheduler.hpp +5 -5
  145. package/worker/include/RTC/SctpDictionaries.hpp +3 -3
  146. package/worker/include/RTC/Serializable.hpp +1 -1
  147. package/worker/include/RTC/SimpleProducerStreamManager.hpp +3 -4
  148. package/worker/include/RTC/SimulcastProducerStreamManager.hpp +6 -7
  149. package/worker/include/RTC/SvcProducerStreamManager.hpp +6 -5
  150. package/worker/include/RTC/TcpConnection.hpp +9 -3
  151. package/worker/include/RTC/TcpServer.hpp +3 -0
  152. package/worker/include/RTC/Transport.hpp +52 -45
  153. package/worker/include/RTC/TransportCongestionControlClient.hpp +30 -25
  154. package/worker/include/RTC/TransportCongestionControlServer.hpp +17 -17
  155. package/worker/include/RTC/TrendCalculator.hpp +5 -5
  156. package/worker/include/RTC/UdpSocket.hpp +11 -2
  157. package/worker/include/RTC/WebRtcServer.hpp +20 -5
  158. package/worker/include/RTC/WebRtcTransport.hpp +35 -10
  159. package/worker/include/Settings.hpp +4 -2
  160. package/worker/include/Shared.hpp +5 -20
  161. package/worker/include/SharedInterface.hpp +6 -28
  162. package/worker/include/Utils.hpp +40 -21
  163. package/worker/include/common.hpp +4 -0
  164. package/worker/include/handles/BackoffTimerHandle.hpp +4 -4
  165. package/worker/include/handles/BackoffTimerHandleInterface.hpp +5 -5
  166. package/worker/include/handles/TcpConnectionHandle.hpp +6 -6
  167. package/worker/include/handles/TcpServerHandle.hpp +1 -1
  168. package/worker/include/handles/TimerHandle.hpp +15 -9
  169. package/worker/include/handles/TimerHandleInterface.hpp +10 -4
  170. package/worker/include/handles/UdpSocketHandle.hpp +3 -3
  171. package/worker/include/handles/UnixStreamSocketHandle.hpp +2 -2
  172. package/worker/meson.build +87 -36
  173. package/worker/meson_options.txt +1 -0
  174. package/worker/mocks/include/MockShared.hpp +24 -23
  175. package/worker/mocks/include/RTC/SCTP/association/MockTransmissionControlBlockContext.hpp +51 -27
  176. package/worker/mocks/include/RTC/SCTP/tx/MockSendQueue.hpp +11 -11
  177. package/worker/mocks/include/handles/MockBackoffTimerHandle.hpp +10 -10
  178. package/worker/mocks/include/handles/MockTimerHandle.hpp +60 -22
  179. package/worker/mocks/src/MockShared.cpp +51 -5
  180. package/worker/mocks/src/handles/MockBackoffTimerHandle.cpp +29 -15
  181. package/worker/mocks/src/handles/MockTimerHandle.cpp +117 -0
  182. package/worker/scripts/clang-scripts.mjs +2 -2
  183. package/worker/src/Channel/ChannelNotification.cpp +5 -6
  184. package/worker/src/Channel/ChannelSocket.cpp +20 -2
  185. package/worker/src/DepLibUV.cpp +4 -5
  186. package/worker/src/RTC/ActiveSpeakerObserver.cpp +59 -47
  187. package/worker/src/RTC/AudioLevelObserver.cpp +7 -7
  188. package/worker/src/RTC/BWE/AimdRateControl.cpp +468 -0
  189. package/worker/src/RTC/BWE/BweTypes.cpp +61 -0
  190. package/worker/src/RTC/BWE/DelayBasedBwe.cpp +275 -0
  191. package/worker/src/RTC/BWE/FeedbackAdapter.cpp +148 -0
  192. package/worker/src/RTC/BWE/InterArrivalDelta.cpp +181 -0
  193. package/worker/src/RTC/BWE/LinkCapacityEstimator.cpp +133 -0
  194. package/worker/src/RTC/BWE/LossBasedController.cpp +1046 -0
  195. package/worker/src/RTC/BWE/RobustThroughputEstimator.cpp +245 -0
  196. package/worker/src/RTC/BWE/SendPacketHistory.cpp +184 -0
  197. package/worker/src/RTC/BWE/TargetRateController.cpp +435 -0
  198. package/worker/src/RTC/BWE/TrendlineEstimator.cpp +311 -0
  199. package/worker/src/RTC/BWE/Utils.cpp +54 -0
  200. package/worker/src/RTC/Consumer.cpp +48 -35
  201. package/worker/src/RTC/DataConsumer.cpp +4 -4
  202. package/worker/src/RTC/DataProducer.cpp +3 -3
  203. package/worker/src/RTC/DirectTransport.cpp +2 -2
  204. package/worker/src/RTC/DtlsTransport.cpp +14 -11
  205. package/worker/src/RTC/ICE/IceServer.cpp +2 -2
  206. package/worker/src/RTC/KeyFrameRequestManager.cpp +16 -12
  207. package/worker/src/RTC/NackGenerator.cpp +12 -12
  208. package/worker/src/RTC/PipeProducerStreamManager.cpp +6 -6
  209. package/worker/src/RTC/PipeTransport.cpp +16 -13
  210. package/worker/src/RTC/PlainTransport.cpp +25 -16
  211. package/worker/src/RTC/Producer.cpp +50 -36
  212. package/worker/src/RTC/RTCP/FeedbackPsRemb.cpp +13 -6
  213. package/worker/src/RTC/RTCP/FeedbackRtpTmmb.cpp +14 -5
  214. package/worker/src/RTC/RTCP/FeedbackRtpTransport.cpp +76 -50
  215. package/worker/src/RTC/RTP/Codecs/VP8.cpp +1 -1
  216. package/worker/src/RTC/RTP/Codecs/VP9.cpp +4 -4
  217. package/worker/src/RTC/RTP/Packet.cpp +9 -10
  218. package/worker/src/RTC/RTP/RetransmissionBuffer.cpp +6 -6
  219. package/worker/src/RTC/RTP/RtpStream.cpp +19 -19
  220. package/worker/src/RTC/RTP/RtpStreamRecv.cpp +146 -81
  221. package/worker/src/RTC/RTP/RtpStreamSend.cpp +49 -44
  222. package/worker/src/RTC/RTP/RtxStream.cpp +7 -10
  223. package/worker/src/RTC/RateCalculator.cpp +99 -136
  224. package/worker/src/RTC/RemoteCaptureTimeEstimator.cpp +13 -13
  225. package/worker/src/RTC/RemoteClockOffsetEstimator.cpp +18 -17
  226. package/worker/src/RTC/Router.cpp +18 -1
  227. package/worker/src/RTC/RtpDictionaries/RtpEncodingParameters.cpp +5 -2
  228. package/worker/src/RTC/SCTP/association/Association.cpp +146 -103
  229. package/worker/src/RTC/SCTP/association/AssociationListenerDeferrer.cpp +4 -4
  230. package/worker/src/RTC/SCTP/association/Capabilities.cpp +1 -1
  231. package/worker/src/RTC/SCTP/association/HeartbeatHandler.cpp +25 -18
  232. package/worker/src/RTC/SCTP/association/StateCookie.cpp +7 -6
  233. package/worker/src/RTC/SCTP/association/StreamResetHandler.cpp +122 -14
  234. package/worker/src/RTC/SCTP/association/TransmissionControlBlock.cpp +28 -26
  235. package/worker/src/RTC/SCTP/packet/chunks/SackChunk.cpp +0 -1
  236. package/worker/src/RTC/SCTP/packet/parameters/StateCookieParameter.cpp +2 -2
  237. package/worker/src/RTC/SCTP/public/AssociationMetrics.cpp +2 -2
  238. package/worker/src/RTC/SCTP/public/SctpOptions.cpp +13 -13
  239. package/worker/src/RTC/SCTP/rx/DataTracker.cpp +1 -1
  240. package/worker/src/RTC/SCTP/rx/ReassemblyQueue.cpp +5 -5
  241. package/worker/src/RTC/SCTP/tx/OutstandingData.cpp +15 -15
  242. package/worker/src/RTC/SCTP/tx/RetransmissionQueue.cpp +15 -15
  243. package/worker/src/RTC/SCTP/tx/RetransmissionTimeout.cpp +29 -26
  244. package/worker/src/RTC/SCTP/tx/RoundRobinSendQueue.cpp +12 -11
  245. package/worker/src/RTC/SCTP/tx/StreamScheduler.cpp +4 -4
  246. package/worker/src/RTC/SctpDictionaries/SctpStreamParameters.cpp +2 -2
  247. package/worker/src/RTC/SimpleProducerStreamManager.cpp +10 -10
  248. package/worker/src/RTC/SimulcastProducerStreamManager.cpp +39 -37
  249. package/worker/src/RTC/SvcProducerStreamManager.cpp +39 -25
  250. package/worker/src/RTC/TcpConnection.cpp +9 -3
  251. package/worker/src/RTC/TcpServer.cpp +7 -2
  252. package/worker/src/RTC/Transport.cpp +266 -307
  253. package/worker/src/RTC/TransportCongestionControlClient.cpp +78 -71
  254. package/worker/src/RTC/TransportCongestionControlServer.cpp +38 -40
  255. package/worker/src/RTC/TrendCalculator.cpp +3 -3
  256. package/worker/src/RTC/UdpSocket.cpp +14 -3
  257. package/worker/src/RTC/WebRtcServer.cpp +20 -14
  258. package/worker/src/RTC/WebRtcTransport.cpp +35 -30
  259. package/worker/src/Settings.cpp +10 -0
  260. package/worker/src/Shared.cpp +2 -2
  261. package/worker/src/Utils/Crypto.cpp +2 -2
  262. package/worker/src/Worker.cpp +5 -1
  263. package/worker/src/handles/BackoffTimerHandle.cpp +24 -11
  264. package/worker/src/handles/TimerHandle.cpp +74 -25
  265. package/worker/src/lib.cpp +6 -0
  266. package/worker/tasks.py +197 -45
  267. package/worker/test/include/RTC/BWE/helpers/LinkSimulator.hpp +117 -0
  268. package/worker/test/src/RTC/BWE/TestAimdRateControl.cpp +400 -0
  269. package/worker/test/src/RTC/BWE/TestDelayBasedBwe.cpp +568 -0
  270. package/worker/test/src/RTC/BWE/TestFeedbackAdapter.cpp +546 -0
  271. package/worker/test/src/RTC/BWE/TestInterArrivalDelta.cpp +301 -0
  272. package/worker/test/src/RTC/BWE/TestLinkCapacityEstimator.cpp +115 -0
  273. package/worker/test/src/RTC/BWE/TestLossBasedController.cpp +1199 -0
  274. package/worker/test/src/RTC/BWE/TestRobustThroughputEstimator.cpp +433 -0
  275. package/worker/test/src/RTC/BWE/TestSendPacketHistory.cpp +259 -0
  276. package/worker/test/src/RTC/BWE/TestTargetRateController.cpp +337 -0
  277. package/worker/test/src/RTC/BWE/TestTrendlineEstimator.cpp +182 -0
  278. package/worker/test/src/RTC/BWE/TestUtils.cpp +61 -0
  279. package/worker/test/src/RTC/BWE/helpers/LinkSimulator.cpp +171 -0
  280. package/worker/test/src/RTC/RTCP/TestFeedbackPsRemb.cpp +1 -1
  281. package/worker/test/src/RTC/RTCP/TestFeedbackRtpTmmb.cpp +1 -1
  282. package/worker/test/src/RTC/RTCP/TestFeedbackRtpTransport.cpp +246 -208
  283. package/worker/test/src/RTC/RTP/TestPacket.cpp +11 -11
  284. package/worker/test/src/RTC/RTP/TestRetransmissionBuffer.cpp +12 -12
  285. package/worker/test/src/RTC/RTP/TestRtpStreamRecv.cpp +23 -16
  286. package/worker/test/src/RTC/RTP/TestRtpStreamSend.cpp +13 -13
  287. package/worker/test/src/RTC/SCTP/association/TestAssociation.cpp +27 -22
  288. package/worker/test/src/RTC/SCTP/association/TestHeartbeatHandler.cpp +21 -15
  289. package/worker/test/src/RTC/SCTP/association/TestStateCookie.cpp +6 -6
  290. package/worker/test/src/RTC/SCTP/association/TestStreamResetHandler.cpp +128 -13
  291. package/worker/test/src/RTC/SCTP/association/TestTransmissionControlBlock.cpp +3 -3
  292. package/worker/test/src/RTC/SCTP/packet/chunks/TestForwardTsnChunk.cpp +2 -2
  293. package/worker/test/src/RTC/SCTP/packet/chunks/TestIForwardTsnChunk.cpp +23 -23
  294. package/worker/test/src/RTC/SCTP/packet/chunks/TestInitChunk.cpp +1 -1
  295. package/worker/test/src/RTC/SCTP/packet/chunks/TestSackChunk.cpp +1 -1
  296. package/worker/test/src/RTC/SCTP/packet/parameters/TestIPv6AddressParameter.cpp +1 -1
  297. package/worker/test/src/RTC/SCTP/rx/TestDataTracker.cpp +37 -37
  298. package/worker/test/src/RTC/SCTP/rx/TestInterleavedReassemblyStreams.cpp +10 -10
  299. package/worker/test/src/RTC/SCTP/rx/TestReassemblyQueue.cpp +1 -1
  300. package/worker/test/src/RTC/SCTP/tx/TestOutstandingData.cpp +93 -93
  301. package/worker/test/src/RTC/SCTP/tx/TestRetransmissionQueue.cpp +247 -247
  302. package/worker/test/src/RTC/SCTP/tx/TestRetransmissionTimeout.cpp +100 -80
  303. package/worker/test/src/RTC/SCTP/tx/TestRoundRobinSendQueue.cpp +163 -163
  304. package/worker/test/src/RTC/SCTP/tx/TestStreamScheduler.cpp +76 -77
  305. package/worker/test/src/RTC/TestConsumer.cpp +8 -3
  306. package/worker/test/src/RTC/TestKeyFrameRequestManager.cpp +3 -3
  307. package/worker/test/src/RTC/TestNackGenerator.cpp +3 -3
  308. package/worker/test/src/RTC/TestPipeProducerStreamManager.cpp +5 -5
  309. package/worker/test/src/RTC/TestRateCalculator.cpp +110 -14
  310. package/worker/test/src/RTC/TestRemoteCaptureTimeEstimator.cpp +22 -17
  311. package/worker/test/src/RTC/TestRemoteClockOffsetEstimator.cpp +87 -85
  312. package/worker/test/src/RTC/TestSimpleProducerStreamManager.cpp +54 -47
  313. package/worker/test/src/RTC/TestSimulcastProducerStreamManager.cpp +83 -69
  314. package/worker/test/src/RTC/TestSvcProducerStreamManager.cpp +76 -65
  315. package/worker/test/src/RTC/TestTransportCongestionControlServer.cpp +72 -66
  316. package/worker/test/src/RTC/TestTransportTuple.cpp +19 -4
  317. package/worker/test/src/TestDepLibUV.cpp +19 -0
  318. package/worker/test/src/Utils/TestTime.cpp +57 -26
  319. package/worker/test/src/testHelpers.cpp +1 -1
  320. package/worker/test/src/tests.cpp +6 -0
  321. package/worker/include/RTC/SenderBandwidthEstimator.hpp +0 -118
  322. package/worker/src/RTC/SenderBandwidthEstimator.cpp +0 -269
@@ -0,0 +1,400 @@
1
+ #include "common.hpp"
2
+ #include "RTC/BWE/AimdRateControl.hpp"
3
+ #include "RTC/BWE/BweTypes.hpp"
4
+ #include <catch2/catch_test_macros.hpp>
5
+ #include <catch2/matchers/catch_matchers_floating_point.hpp>
6
+ #include <cmath>
7
+
8
+ SCENARIO("BWE AimdRateControl", "[bwe][aimdratecontrol]")
9
+ {
10
+ constexpr int64_t InitialTimeUs{ 123456 * 1000 };
11
+ // Fraction of the measured throughput the bitrate is dropped to after an
12
+ // overuse.
13
+ constexpr double FractionAfterOveruse{ 0.85 };
14
+
15
+ // Options of a rate control running in the sending endpoint.
16
+ const RTC::BWE::AimdRateControl::AimdRateControlOptions sendSideOptions{ .sendSide = true };
17
+
18
+ SECTION("the increase rate has a floor of 4 kbps per second")
19
+ {
20
+ RTC::BWE::AimdRateControl aimdRateControl;
21
+
22
+ aimdRateControl.SetEstimate(30000, InitialTimeUs);
23
+
24
+ REQUIRE(aimdRateControl.GetNearMaxIncreaseRateBpsPerSecond() == 4000);
25
+ }
26
+
27
+ SECTION("the increase rate is 5 kbps per second at 90 kbps and 200 ms of RTT")
28
+ {
29
+ RTC::BWE::AimdRateControl aimdRateControl;
30
+
31
+ aimdRateControl.SetEstimate(90000, InitialTimeUs);
32
+
33
+ REQUIRE(aimdRateControl.GetNearMaxIncreaseRateBpsPerSecond() == 5000);
34
+ }
35
+
36
+ SECTION("the increase rate is 5 kbps per second at 60 kbps and 100 ms of RTT")
37
+ {
38
+ RTC::BWE::AimdRateControl aimdRateControl;
39
+
40
+ aimdRateControl.SetEstimate(60000, InitialTimeUs);
41
+ aimdRateControl.SetRttUs(100 * 1000);
42
+
43
+ REQUIRE(aimdRateControl.GetNearMaxIncreaseRateBpsPerSecond() == 5000);
44
+ }
45
+
46
+ SECTION("the increase rate grows with the bitrate")
47
+ {
48
+ constexpr int64_t Bitrate{ 300000 };
49
+
50
+ RTC::BWE::AimdRateControl aimdRateControl;
51
+
52
+ aimdRateControl.SetEstimate(Bitrate, InitialTimeUs);
53
+ aimdRateControl.Update(
54
+ { .bandwidthUsage = RTC::BWE::Types::BandwidthUsage::OVERUSING, .estimatedThroughput = Bitrate },
55
+ InitialTimeUs);
56
+
57
+ REQUIRE_THAT(
58
+ aimdRateControl.GetNearMaxIncreaseRateBpsPerSecond(), Catch::Matchers::WithinAbs(14000, 1000));
59
+ }
60
+
61
+ SECTION("the bitrate is limited by the acknowledged one")
62
+ {
63
+ constexpr int64_t AckedBitrate{ 10000 };
64
+
65
+ RTC::BWE::AimdRateControl aimdRateControl;
66
+
67
+ int64_t nowUs{ InitialTimeUs };
68
+
69
+ aimdRateControl.SetEstimate(AckedBitrate, nowUs);
70
+
71
+ while (nowUs - InitialTimeUs < 20 * 1000 * 1000)
72
+ {
73
+ aimdRateControl.Update(
74
+ { .bandwidthUsage = RTC::BWE::Types::BandwidthUsage::NORMAL,
75
+ .estimatedThroughput = AckedBitrate },
76
+ nowUs);
77
+
78
+ nowUs += 100 * 1000;
79
+ }
80
+
81
+ REQUIRE(aimdRateControl.IsValidEstimate());
82
+ REQUIRE(aimdRateControl.GetLatestEstimate() == (3 * AckedBitrate / 2) + 10000);
83
+ }
84
+
85
+ SECTION("a decreasing acknowledged bitrate doesn't drag the estimate down")
86
+ {
87
+ constexpr int64_t AckedBitrate{ 10000 };
88
+
89
+ RTC::BWE::AimdRateControl aimdRateControl;
90
+
91
+ int64_t nowUs{ InitialTimeUs };
92
+
93
+ aimdRateControl.SetEstimate(AckedBitrate, nowUs);
94
+
95
+ while (nowUs - InitialTimeUs < 20 * 1000 * 1000)
96
+ {
97
+ aimdRateControl.Update(
98
+ { .bandwidthUsage = RTC::BWE::Types::BandwidthUsage::NORMAL,
99
+ .estimatedThroughput = AckedBitrate },
100
+ nowUs);
101
+
102
+ nowUs += 100 * 1000;
103
+ }
104
+
105
+ REQUIRE(aimdRateControl.IsValidEstimate());
106
+
107
+ // The estimate must not be reduced to 1.5x what is being acknowledged, but
108
+ // it must not grow any further either.
109
+ const int64_t prevEstimate = aimdRateControl.GetLatestEstimate();
110
+
111
+ aimdRateControl.Update(
112
+ { .bandwidthUsage = RTC::BWE::Types::BandwidthUsage::NORMAL,
113
+ .estimatedThroughput = AckedBitrate / 2 },
114
+ nowUs);
115
+
116
+ REQUIRE(aimdRateControl.GetLatestEstimate() == prevEstimate);
117
+ // And it's still the value it had grown to, rather than both being wrong.
118
+ REQUIRE_THAT(
119
+ static_cast<double>(aimdRateControl.GetLatestEstimate()),
120
+ Catch::Matchers::WithinAbs((1.5 * AckedBitrate) + 10000, 2000));
121
+ }
122
+
123
+ SECTION("an overuse drops the bitrate to the backoff fraction of the throughput")
124
+ {
125
+ constexpr int64_t InitialBitrate{ 264000 };
126
+ constexpr int64_t UpdatedBitrate{ 216000 };
127
+
128
+ RTC::BWE::AimdRateControl aimdRateControl;
129
+
130
+ const auto ackedBitrate =
131
+ static_cast<int64_t>(std::llround((UpdatedBitrate + 5000) / FractionAfterOveruse));
132
+
133
+ int64_t nowUs{ InitialTimeUs };
134
+
135
+ aimdRateControl.SetEstimate(InitialBitrate, nowUs);
136
+
137
+ nowUs += 100 * 1000;
138
+
139
+ aimdRateControl.Update(
140
+ { .bandwidthUsage = RTC::BWE::Types::BandwidthUsage::OVERUSING,
141
+ .estimatedThroughput = ackedBitrate },
142
+ nowUs);
143
+
144
+ REQUIRE(aimdRateControl.GetLatestEstimate() == UpdatedBitrate);
145
+ // The increase rate at 216 kbps is 12 kbps per second.
146
+ REQUIRE(aimdRateControl.GetNearMaxIncreaseRateBpsPerSecond() == 12000);
147
+ }
148
+
149
+ SECTION("the bitrate stays bounded while no throughput is measured")
150
+ {
151
+ constexpr int64_t InitialBitrate{ 123000 };
152
+
153
+ RTC::BWE::AimdRateControl aimdRateControl;
154
+
155
+ int64_t nowUs{ InitialTimeUs };
156
+
157
+ aimdRateControl.Update(
158
+ { .bandwidthUsage = RTC::BWE::Types::BandwidthUsage::NORMAL,
159
+ .estimatedThroughput = InitialBitrate },
160
+ nowUs);
161
+
162
+ // The initial bitrate is taken from what has been measured for five seconds.
163
+ nowUs += (5 * 1000 * 1000) + 1000;
164
+
165
+ aimdRateControl.Update(
166
+ { .bandwidthUsage = RTC::BWE::Types::BandwidthUsage::NORMAL,
167
+ .estimatedThroughput = InitialBitrate },
168
+ nowUs);
169
+
170
+ for (int i{ 0 }; i < 100; ++i)
171
+ {
172
+ aimdRateControl.Update(
173
+ { .bandwidthUsage = RTC::BWE::Types::BandwidthUsage::NORMAL,
174
+ .estimatedThroughput = std::nullopt },
175
+ nowUs);
176
+
177
+ nowUs += 100 * 1000;
178
+ }
179
+
180
+ REQUIRE(aimdRateControl.GetLatestEstimate() <= (3 * InitialBitrate / 2) + 10000);
181
+ }
182
+
183
+ SECTION("the estimate doesn't increase in ALR when so configured")
184
+ {
185
+ constexpr int64_t InitialBitrate{ 123000 };
186
+
187
+ // While in an application limited region the network gives no feedback that
188
+ // could tell whether a higher estimate is correct, so it must not grow.
189
+ auto options = sendSideOptions;
190
+
191
+ options.noBitrateIncreaseInAlr = true;
192
+
193
+ RTC::BWE::AimdRateControl aimdRateControl(options);
194
+
195
+ int64_t nowUs{ InitialTimeUs };
196
+
197
+ aimdRateControl.SetEstimate(InitialBitrate, nowUs);
198
+ aimdRateControl.SetInApplicationLimitedRegion(true);
199
+ aimdRateControl.Update(
200
+ { .bandwidthUsage = RTC::BWE::Types::BandwidthUsage::NORMAL,
201
+ .estimatedThroughput = InitialBitrate },
202
+ nowUs);
203
+
204
+ REQUIRE(aimdRateControl.GetLatestEstimate() == InitialBitrate);
205
+
206
+ for (int i{ 0 }; i < 100; ++i)
207
+ {
208
+ aimdRateControl.Update(
209
+ { .bandwidthUsage = RTC::BWE::Types::BandwidthUsage::NORMAL,
210
+ .estimatedThroughput = std::nullopt },
211
+ nowUs);
212
+
213
+ nowUs += 100 * 1000;
214
+ }
215
+
216
+ REQUIRE(aimdRateControl.GetLatestEstimate() == InitialBitrate);
217
+ }
218
+
219
+ SECTION("the estimate can still be set from outside while in ALR")
220
+ {
221
+ constexpr int64_t InitialBitrate{ 123000 };
222
+
223
+ auto options = sendSideOptions;
224
+
225
+ options.noBitrateIncreaseInAlr = true;
226
+
227
+ RTC::BWE::AimdRateControl aimdRateControl(options);
228
+
229
+ aimdRateControl.SetEstimate(InitialBitrate, InitialTimeUs);
230
+ aimdRateControl.SetInApplicationLimitedRegion(true);
231
+
232
+ REQUIRE(aimdRateControl.GetLatestEstimate() == InitialBitrate);
233
+
234
+ aimdRateControl.SetEstimate(2 * InitialBitrate, InitialTimeUs);
235
+
236
+ REQUIRE(aimdRateControl.GetLatestEstimate() == 2 * InitialBitrate);
237
+ }
238
+
239
+ SECTION("the estimate increases while not in ALR")
240
+ {
241
+ constexpr int64_t InitialBitrate{ 123000 };
242
+
243
+ // Not being in ALR must let the estimate grow, so that it cannot get stuck
244
+ // at a given bitrate.
245
+ auto options = sendSideOptions;
246
+
247
+ options.noBitrateIncreaseInAlr = true;
248
+
249
+ RTC::BWE::AimdRateControl aimdRateControl(options);
250
+
251
+ int64_t nowUs{ InitialTimeUs };
252
+
253
+ aimdRateControl.SetEstimate(InitialBitrate, nowUs);
254
+ aimdRateControl.SetInApplicationLimitedRegion(false);
255
+ aimdRateControl.Update(
256
+ { .bandwidthUsage = RTC::BWE::Types::BandwidthUsage::NORMAL,
257
+ .estimatedThroughput = InitialBitrate },
258
+ nowUs);
259
+
260
+ for (int i{ 0 }; i < 100; ++i)
261
+ {
262
+ aimdRateControl.Update(
263
+ { .bandwidthUsage = RTC::BWE::Types::BandwidthUsage::NORMAL,
264
+ .estimatedThroughput = std::nullopt },
265
+ nowUs);
266
+
267
+ nowUs += 100 * 1000;
268
+ }
269
+
270
+ REQUIRE(aimdRateControl.GetLatestEstimate() > InitialBitrate);
271
+ }
272
+
273
+ SECTION("the estimate is upper limited by the network state estimate")
274
+ {
275
+ constexpr int64_t LinkCapacityUpper{ 400000 };
276
+
277
+ const RTC::BWE::Types::NetworkStateEstimate networkEstimate{ .linkCapacityUpper =
278
+ LinkCapacityUpper };
279
+
280
+ RTC::BWE::AimdRateControl aimdRateControl(sendSideOptions);
281
+
282
+ aimdRateControl.SetEstimate(300000, InitialTimeUs);
283
+ aimdRateControl.SetNetworkStateEstimate(networkEstimate);
284
+ aimdRateControl.SetEstimate(500000, InitialTimeUs);
285
+
286
+ REQUIRE(aimdRateControl.GetLatestEstimate() == LinkCapacityUpper);
287
+ }
288
+
289
+ SECTION("the current bitrate is the lowest possible upper limit")
290
+ {
291
+ constexpr int64_t CurrentBitrate{ 500000 };
292
+
293
+ // Below the current bitrate, so it must not drag it down.
294
+ const RTC::BWE::Types::NetworkStateEstimate networkEstimate{ .linkCapacityUpper = 300000 };
295
+
296
+ RTC::BWE::AimdRateControl aimdRateControl(sendSideOptions);
297
+
298
+ aimdRateControl.SetEstimate(CurrentBitrate, InitialTimeUs);
299
+
300
+ REQUIRE(aimdRateControl.GetLatestEstimate() == CurrentBitrate);
301
+
302
+ aimdRateControl.SetNetworkStateEstimate(networkEstimate);
303
+ aimdRateControl.SetEstimate(700000, InitialTimeUs);
304
+
305
+ REQUIRE(aimdRateControl.GetLatestEstimate() == CurrentBitrate);
306
+ }
307
+
308
+ SECTION("the current bitrate is not the lowest possible upper limit when so configured")
309
+ {
310
+ constexpr int64_t LinkCapacityUpper{ 300000 };
311
+
312
+ const RTC::BWE::Types::NetworkStateEstimate networkEstimate{ .linkCapacityUpper =
313
+ LinkCapacityUpper };
314
+
315
+ auto options = sendSideOptions;
316
+
317
+ options.useCurrentEstimateAsMinUpperBound = false;
318
+
319
+ RTC::BWE::AimdRateControl aimdRateControl(options);
320
+
321
+ aimdRateControl.SetEstimate(500000, InitialTimeUs);
322
+
323
+ REQUIRE(aimdRateControl.GetLatestEstimate() == 500000);
324
+
325
+ aimdRateControl.SetNetworkStateEstimate(networkEstimate);
326
+ aimdRateControl.SetEstimate(700000, InitialTimeUs);
327
+
328
+ REQUIRE(aimdRateControl.GetLatestEstimate() == LinkCapacityUpper);
329
+ }
330
+
331
+ SECTION("the estimate is lower limited by the network state estimate")
332
+ {
333
+ constexpr int64_t LinkCapacityLower{ 400000 };
334
+
335
+ const RTC::BWE::Types::NetworkStateEstimate networkEstimate{ .linkCapacityLower =
336
+ LinkCapacityLower };
337
+
338
+ RTC::BWE::AimdRateControl aimdRateControl(sendSideOptions);
339
+
340
+ aimdRateControl.SetNetworkStateEstimate(networkEstimate);
341
+ aimdRateControl.SetEstimate(100000, InitialTimeUs);
342
+
343
+ REQUIRE(
344
+ aimdRateControl.GetLatestEstimate() == std::llround(LinkCapacityLower * FractionAfterOveruse));
345
+ }
346
+
347
+ SECTION("setting an estimate below the network state estimate is ignored")
348
+ {
349
+ constexpr int64_t CurrentBitrate{ 200000 };
350
+
351
+ const RTC::BWE::Types::NetworkStateEstimate networkEstimate{ .linkCapacityLower = 400000 };
352
+
353
+ RTC::BWE::AimdRateControl aimdRateControl(sendSideOptions);
354
+
355
+ aimdRateControl.SetEstimate(CurrentBitrate, InitialTimeUs);
356
+
357
+ REQUIRE(aimdRateControl.GetLatestEstimate() == CurrentBitrate);
358
+
359
+ aimdRateControl.SetNetworkStateEstimate(networkEstimate);
360
+
361
+ // Ignored, since it's lower than the backoff fraction of the network state
362
+ // estimate.
363
+ aimdRateControl.SetEstimate(100000, InitialTimeUs);
364
+
365
+ REQUIRE(aimdRateControl.GetLatestEstimate() == CurrentBitrate);
366
+ }
367
+
368
+ SECTION("the estimate is not limited by the network state estimate when so configured")
369
+ {
370
+ constexpr int64_t InitialBitrate{ 123000 };
371
+ constexpr int64_t LinkCapacityUpper{ 150000 };
372
+
373
+ const RTC::BWE::Types::NetworkStateEstimate networkEstimate{ .linkCapacityUpper =
374
+ LinkCapacityUpper };
375
+
376
+ auto options = sendSideOptions;
377
+
378
+ options.estimateBoundedIncrease = false;
379
+
380
+ RTC::BWE::AimdRateControl aimdRateControl(options);
381
+
382
+ int64_t nowUs{ InitialTimeUs };
383
+
384
+ aimdRateControl.SetEstimate(InitialBitrate, nowUs);
385
+ aimdRateControl.SetInApplicationLimitedRegion(false);
386
+ aimdRateControl.SetNetworkStateEstimate(networkEstimate);
387
+
388
+ for (int i{ 0 }; i < 100; ++i)
389
+ {
390
+ aimdRateControl.Update(
391
+ { .bandwidthUsage = RTC::BWE::Types::BandwidthUsage::NORMAL,
392
+ .estimatedThroughput = std::nullopt },
393
+ nowUs);
394
+
395
+ nowUs += 100 * 1000;
396
+ }
397
+
398
+ REQUIRE(aimdRateControl.GetLatestEstimate() > LinkCapacityUpper);
399
+ }
400
+ }