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,32 +5,33 @@
5
5
  SCENARIO("RemoteClockOffsetEstimator", "[rtp][rtcp][remoteclockoffsetestimator]")
6
6
  {
7
7
  // Remote sender wall clock, as reported in the NTP field of its Sender Reports
8
- // (milliseconds since 1900).
9
- constexpr uint64_t RemoteBaseMs{ 3976000000000 };
8
+ // (microseconds since 1900).
9
+ constexpr int64_t RemoteBaseUs{ 3976000000000 * 1000 };
10
10
  // Our own monotonic clock.
11
- constexpr uint64_t LocalBaseMs{ 1000000 };
11
+ constexpr int64_t LocalBaseUs{ 1000000 * 1000 };
12
12
  // Offset expected when Sender Reports reach us with no delay at all.
13
- constexpr int64_t BaseOffsetMs{ static_cast<int64_t>(LocalBaseMs) -
14
- static_cast<int64_t>(RemoteBaseMs) };
13
+ constexpr int64_t BaseOffsetUs{ LocalBaseUs - RemoteBaseUs };
15
14
 
16
15
  const auto minSampleCount = RTC::RemoteClockOffsetEstimator::MinSampleCount;
17
16
  const auto windowSize = RTC::RemoteClockOffsetEstimator::WindowSize;
18
17
 
19
- // Feeds `count` Sender Reports one second apart, each one reaching us `owdMs`
18
+ // Feeds `count` Sender Reports one second apart, each one reaching us `owdUs`
20
19
  // after having been generated by the sender.
20
+ //
21
+ // NOTE: The RTT is given in milliseconds, being that the unit of the argument.
21
22
  auto feed = [](
22
23
  RTC::RemoteClockOffsetEstimator& estimator,
23
- uint64_t remoteNtpMs,
24
- uint64_t localArrivalMs,
24
+ int64_t remoteNtpUs,
25
+ int64_t localArrivalAtUs,
25
26
  size_t count,
26
- uint64_t owdMs,
27
- uint32_t rttMs) -> void
27
+ int64_t owdUs,
28
+ int64_t rttMs) -> void
28
29
  {
29
30
  for (size_t idx{ 0 }; idx < count; ++idx)
30
31
  {
31
- const uint64_t elapsedMs = static_cast<uint64_t>(idx) * 1000;
32
+ const int64_t elapsedUs = static_cast<int64_t>(idx) * 1000000;
32
33
 
33
- estimator.AddSenderReport(remoteNtpMs + elapsedMs, localArrivalMs + elapsedMs + owdMs, rttMs);
34
+ estimator.AddSenderReport(remoteNtpUs + elapsedUs, localArrivalAtUs + elapsedUs + owdUs, rttMs);
34
35
  }
35
36
  };
36
37
 
@@ -38,101 +39,101 @@ SCENARIO("RemoteClockOffsetEstimator", "[rtp][rtcp][remoteclockoffsetestimator]"
38
39
 
39
40
  SECTION("no offset until MinSampleCount Sender Reports have been received")
40
41
  {
41
- feed(estimator, RemoteBaseMs, LocalBaseMs, minSampleCount - 1, 0, 0);
42
+ feed(estimator, RemoteBaseUs, LocalBaseUs, minSampleCount - 1, 0, 0);
42
43
 
43
- REQUIRE_FALSE(estimator.GetOffsetMs().has_value());
44
+ REQUIRE_FALSE(estimator.GetOffsetUs().has_value());
44
45
 
45
46
  // One more Sender Report reaches the minimum.
46
- const uint64_t elapsedMs = static_cast<uint64_t>(minSampleCount - 1) * 1000;
47
+ const int64_t elapsedUs = static_cast<int64_t>(minSampleCount - 1) * 1000000;
47
48
 
48
- feed(estimator, RemoteBaseMs + elapsedMs, LocalBaseMs + elapsedMs, 1, 0, 0);
49
+ feed(estimator, RemoteBaseUs + elapsedUs, LocalBaseUs + elapsedUs, 1, 0, 0);
49
50
 
50
- REQUIRE(estimator.GetOffsetMs().has_value());
51
+ REQUIRE(estimator.GetOffsetUs().has_value());
51
52
  // NOLINTNEXTLINE(bugprone-unchecked-optional-access)
52
- REQUIRE(estimator.GetOffsetMs().value() == BaseOffsetMs);
53
+ REQUIRE(estimator.GetOffsetUs().value() == BaseOffsetUs);
53
54
  }
54
55
 
55
56
  SECTION("the offset carries the Sender Report one way delay when the RTT is unknown")
56
57
  {
57
- feed(estimator, RemoteBaseMs, LocalBaseMs, minSampleCount, 40, 0);
58
+ feed(estimator, RemoteBaseUs, LocalBaseUs, minSampleCount, 40 * 1000, 0);
58
59
 
59
- REQUIRE(estimator.GetOffsetMs().has_value());
60
+ REQUIRE(estimator.GetOffsetUs().has_value());
60
61
  // NOLINTNEXTLINE(bugprone-unchecked-optional-access)
61
- REQUIRE(estimator.GetOffsetMs().value() == BaseOffsetMs + 40);
62
+ REQUIRE(estimator.GetOffsetUs().value() == BaseOffsetUs + (40 * 1000));
62
63
  }
63
64
 
64
65
  SECTION("half of the RTT is removed from the offset")
65
66
  {
66
- feed(estimator, RemoteBaseMs, LocalBaseMs, minSampleCount, 40, 80);
67
+ feed(estimator, RemoteBaseUs, LocalBaseUs, minSampleCount, 40 * 1000, 80);
67
68
 
68
- REQUIRE(estimator.GetOffsetMs().has_value());
69
+ REQUIRE(estimator.GetOffsetUs().has_value());
69
70
  // NOLINTNEXTLINE(bugprone-unchecked-optional-access)
70
- REQUIRE(estimator.GetOffsetMs().value() == BaseOffsetMs);
71
+ REQUIRE(estimator.GetOffsetUs().value() == BaseOffsetUs);
71
72
  }
72
73
 
73
74
  SECTION("a single delayed Sender Report does not move the offset")
74
75
  {
75
- feed(estimator, RemoteBaseMs, LocalBaseMs, windowSize, 20, 0);
76
+ feed(estimator, RemoteBaseUs, LocalBaseUs, windowSize, 20 * 1000, 0);
76
77
 
77
- REQUIRE(estimator.GetOffsetMs().has_value());
78
+ REQUIRE(estimator.GetOffsetUs().has_value());
78
79
  // NOLINTNEXTLINE(bugprone-unchecked-optional-access)
79
- REQUIRE(estimator.GetOffsetMs().value() == BaseOffsetMs + 20);
80
+ REQUIRE(estimator.GetOffsetUs().value() == BaseOffsetUs + (20 * 1000));
80
81
 
81
82
  // A Sender Report that took much longer to reach us must be rejected by the
82
83
  // median.
83
- const uint64_t elapsedMs = static_cast<uint64_t>(windowSize) * 1000;
84
+ const int64_t elapsedUs = static_cast<int64_t>(windowSize) * 1000000;
84
85
 
85
- feed(estimator, RemoteBaseMs + elapsedMs, LocalBaseMs + elapsedMs, 1, 500, 0);
86
+ feed(estimator, RemoteBaseUs + elapsedUs, LocalBaseUs + elapsedUs, 1, 500 * 1000, 0);
86
87
 
87
- REQUIRE(estimator.GetOffsetMs().has_value());
88
+ REQUIRE(estimator.GetOffsetUs().has_value());
88
89
  // NOLINTNEXTLINE(bugprone-unchecked-optional-access)
89
- REQUIRE(estimator.GetOffsetMs().value() == BaseOffsetMs + 20);
90
+ REQUIRE(estimator.GetOffsetUs().value() == BaseOffsetUs + (20 * 1000));
90
91
  }
91
92
 
92
93
  SECTION("the offset follows a sustained change in delay")
93
94
  {
94
- feed(estimator, RemoteBaseMs, LocalBaseMs, windowSize, 0, 0);
95
+ feed(estimator, RemoteBaseUs, LocalBaseUs, windowSize, 0, 0);
95
96
 
96
- REQUIRE(estimator.GetOffsetMs().has_value());
97
+ REQUIRE(estimator.GetOffsetUs().has_value());
97
98
  // NOLINTNEXTLINE(bugprone-unchecked-optional-access)
98
- REQUIRE(estimator.GetOffsetMs().value() == BaseOffsetMs);
99
+ REQUIRE(estimator.GetOffsetUs().value() == BaseOffsetUs);
99
100
 
100
101
  // Once the whole window has been replaced the new delay is fully reflected.
101
- const uint64_t elapsedMs = static_cast<uint64_t>(windowSize) * 1000;
102
+ const int64_t elapsedUs = static_cast<int64_t>(windowSize) * 1000000;
102
103
 
103
- feed(estimator, RemoteBaseMs + elapsedMs, LocalBaseMs + elapsedMs, windowSize, 100, 0);
104
+ feed(estimator, RemoteBaseUs + elapsedUs, LocalBaseUs + elapsedUs, windowSize, 100 * 1000, 0);
104
105
 
105
- REQUIRE(estimator.GetOffsetMs().has_value());
106
+ REQUIRE(estimator.GetOffsetUs().has_value());
106
107
  // NOLINTNEXTLINE(bugprone-unchecked-optional-access)
107
- REQUIRE(estimator.GetOffsetMs().value() == BaseOffsetMs + 100);
108
+ REQUIRE(estimator.GetOffsetUs().value() == BaseOffsetUs + (100 * 1000));
108
109
  }
109
110
 
110
111
  SECTION("delayed Sender Reports move the offset once they are the majority")
111
112
  {
112
- feed(estimator, RemoteBaseMs, LocalBaseMs, windowSize, 0, 0);
113
+ feed(estimator, RemoteBaseUs, LocalBaseUs, windowSize, 0, 0);
113
114
 
114
- REQUIRE(estimator.GetOffsetMs().has_value());
115
+ REQUIRE(estimator.GetOffsetUs().has_value());
115
116
  // NOLINTNEXTLINE(bugprone-unchecked-optional-access)
116
- REQUIRE(estimator.GetOffsetMs().value() == BaseOffsetMs);
117
+ REQUIRE(estimator.GetOffsetUs().value() == BaseOffsetUs);
117
118
 
118
119
  // Less than half of the window delayed, so the median still falls on a
119
120
  // Sender Report that reached us with no delay.
120
- uint64_t elapsedMs = static_cast<uint64_t>(windowSize) * 1000;
121
+ int64_t elapsedUs = static_cast<int64_t>(windowSize) * 1000000;
121
122
 
122
- feed(estimator, RemoteBaseMs + elapsedMs, LocalBaseMs + elapsedMs, windowSize / 2, 300, 0);
123
+ feed(estimator, RemoteBaseUs + elapsedUs, LocalBaseUs + elapsedUs, windowSize / 2, 300 * 1000, 0);
123
124
 
124
- REQUIRE(estimator.GetOffsetMs().has_value());
125
+ REQUIRE(estimator.GetOffsetUs().has_value());
125
126
  // NOLINTNEXTLINE(bugprone-unchecked-optional-access)
126
- REQUIRE(estimator.GetOffsetMs().value() == BaseOffsetMs);
127
+ REQUIRE(estimator.GetOffsetUs().value() == BaseOffsetUs);
127
128
 
128
129
  // One more delayed Sender Report makes them the majority.
129
- elapsedMs += static_cast<uint64_t>(windowSize / 2) * 1000;
130
+ elapsedUs += static_cast<int64_t>(windowSize / 2) * 1000000;
130
131
 
131
- feed(estimator, RemoteBaseMs + elapsedMs, LocalBaseMs + elapsedMs, 1, 300, 0);
132
+ feed(estimator, RemoteBaseUs + elapsedUs, LocalBaseUs + elapsedUs, 1, 300 * 1000, 0);
132
133
 
133
- REQUIRE(estimator.GetOffsetMs().has_value());
134
+ REQUIRE(estimator.GetOffsetUs().has_value());
134
135
  // NOLINTNEXTLINE(bugprone-unchecked-optional-access)
135
- REQUIRE(estimator.GetOffsetMs().value() == BaseOffsetMs + 300);
136
+ REQUIRE(estimator.GetOffsetUs().value() == BaseOffsetUs + (300 * 1000));
136
137
  }
137
138
 
138
139
  SECTION("the offset tracks a drifting remote clock")
@@ -143,99 +144,100 @@ SCENARIO("RemoteClockOffsetEstimator", "[rtp][rtcp][remoteclockoffsetestimator]"
143
144
  for (size_t idx{ 0 }; idx < windowSize; ++idx)
144
145
  {
145
146
  estimator.AddSenderReport(
146
- RemoteBaseMs + (static_cast<uint64_t>(idx) * 1000),
147
- LocalBaseMs + (static_cast<uint64_t>(idx) * 1001),
147
+ RemoteBaseUs + (static_cast<int64_t>(idx) * 1000000),
148
+ LocalBaseUs + (static_cast<int64_t>(idx) * 1001000),
148
149
  0);
149
150
  }
150
151
 
151
- REQUIRE(estimator.GetOffsetMs().has_value());
152
+ REQUIRE(estimator.GetOffsetUs().has_value());
152
153
  // The samples in the window grow by one millisecond each, so the median is
153
154
  // the middle of that ramp.
154
- // NOLINTNEXTLINE(bugprone-unchecked-optional-access)
155
- REQUIRE(estimator.GetOffsetMs().value() == BaseOffsetMs + static_cast<int64_t>(windowSize / 2));
155
+ REQUIRE(
156
+ // NOLINTNEXTLINE(bugprone-unchecked-optional-access)
157
+ estimator.GetOffsetUs().value() == BaseOffsetUs + (static_cast<int64_t>(windowSize / 2) * 1000));
156
158
 
157
159
  // The drift keeps going, so the offset keeps up with it rather than sticking
158
160
  // to the value it already had.
159
161
  for (size_t idx{ windowSize }; idx < windowSize * 2; ++idx)
160
162
  {
161
163
  estimator.AddSenderReport(
162
- RemoteBaseMs + (static_cast<uint64_t>(idx) * 1000),
163
- LocalBaseMs + (static_cast<uint64_t>(idx) * 1001),
164
+ RemoteBaseUs + (static_cast<int64_t>(idx) * 1000000),
165
+ LocalBaseUs + (static_cast<int64_t>(idx) * 1001000),
164
166
  0);
165
167
  }
166
168
 
167
- REQUIRE(estimator.GetOffsetMs().has_value());
169
+ REQUIRE(estimator.GetOffsetUs().has_value());
168
170
  REQUIRE(
169
171
  // NOLINTNEXTLINE(bugprone-unchecked-optional-access)
170
- estimator.GetOffsetMs().value() ==
171
- BaseOffsetMs + static_cast<int64_t>(windowSize + (windowSize / 2)));
172
+ estimator.GetOffsetUs().value() ==
173
+ BaseOffsetUs + (static_cast<int64_t>(windowSize + (windowSize / 2)) * 1000));
172
174
  }
173
175
 
174
176
  SECTION("all the Sender Reports of a compound packet produce a single sample")
175
177
  {
176
178
  // Three Sender Reports of a same compound packet, hence a single arrival
177
179
  // time.
178
- estimator.AddSenderReport(RemoteBaseMs, LocalBaseMs, 0);
179
- estimator.AddSenderReport(RemoteBaseMs + 1, LocalBaseMs, 0);
180
- estimator.AddSenderReport(RemoteBaseMs + 2, LocalBaseMs, 0);
180
+ estimator.AddSenderReport(RemoteBaseUs, LocalBaseUs, 0);
181
+ estimator.AddSenderReport(RemoteBaseUs + 1000, LocalBaseUs, 0);
182
+ estimator.AddSenderReport(RemoteBaseUs + 2000, LocalBaseUs, 0);
181
183
 
182
- REQUIRE_FALSE(estimator.GetOffsetMs().has_value());
184
+ REQUIRE_FALSE(estimator.GetOffsetUs().has_value());
183
185
 
184
186
  // Two more compound packets reach the minimum.
185
- estimator.AddSenderReport(RemoteBaseMs + 1000, LocalBaseMs + 1000, 0);
186
- estimator.AddSenderReport(RemoteBaseMs + 1001, LocalBaseMs + 1000, 0);
187
- estimator.AddSenderReport(RemoteBaseMs + 2000, LocalBaseMs + 2000, 0);
187
+ estimator.AddSenderReport(RemoteBaseUs + 1000000, LocalBaseUs + 1000000, 0);
188
+ estimator.AddSenderReport(RemoteBaseUs + 1001000, LocalBaseUs + 1000000, 0);
189
+ estimator.AddSenderReport(RemoteBaseUs + 2000000, LocalBaseUs + 2000000, 0);
188
190
 
189
- REQUIRE(estimator.GetOffsetMs().has_value());
191
+ REQUIRE(estimator.GetOffsetUs().has_value());
190
192
  // NOLINTNEXTLINE(bugprone-unchecked-optional-access)
191
- REQUIRE(estimator.GetOffsetMs().value() == BaseOffsetMs);
193
+ REQUIRE(estimator.GetOffsetUs().value() == BaseOffsetUs);
192
194
  }
193
195
 
194
196
  SECTION("Sender Reports with no NTP timestamp are ignored")
195
197
  {
196
198
  // NOTE: Not using feed() here since it would advance the NTP timestamp.
197
- estimator.AddSenderReport(0, LocalBaseMs, 0);
198
- estimator.AddSenderReport(0, LocalBaseMs + 1000, 0);
199
- estimator.AddSenderReport(0, LocalBaseMs + 2000, 0);
199
+ estimator.AddSenderReport(0, LocalBaseUs, 0);
200
+ estimator.AddSenderReport(0, LocalBaseUs + 1000000, 0);
201
+ estimator.AddSenderReport(0, LocalBaseUs + 2000000, 0);
200
202
 
201
- REQUIRE_FALSE(estimator.GetOffsetMs().has_value());
203
+ REQUIRE_FALSE(estimator.GetOffsetUs().has_value());
202
204
  }
203
205
 
204
206
  SECTION("remote times are translated into our clock")
205
207
  {
206
208
  const RTC::RemoteClockOffsetEstimator untrainedEstimator;
207
209
 
208
- REQUIRE_FALSE(untrainedEstimator.RemoteMsToLocalMs(RemoteBaseMs).has_value());
210
+ REQUIRE_FALSE(untrainedEstimator.RemoteUsToLocalUs(RemoteBaseUs).has_value());
209
211
 
210
- feed(estimator, RemoteBaseMs, LocalBaseMs, minSampleCount, 0, 0);
212
+ feed(estimator, RemoteBaseUs, LocalBaseUs, minSampleCount, 0, 0);
211
213
 
212
- REQUIRE(estimator.RemoteMsToLocalMs(RemoteBaseMs).has_value());
214
+ REQUIRE(estimator.RemoteUsToLocalUs(RemoteBaseUs).has_value());
213
215
  // NOLINTNEXTLINE(bugprone-unchecked-optional-access)
214
- REQUIRE(estimator.RemoteMsToLocalMs(RemoteBaseMs).value() == LocalBaseMs);
215
- REQUIRE(estimator.RemoteMsToLocalMs(RemoteBaseMs + 500).has_value());
216
+ REQUIRE(estimator.RemoteUsToLocalUs(RemoteBaseUs).value() == LocalBaseUs);
217
+ REQUIRE(estimator.RemoteUsToLocalUs(RemoteBaseUs + 500000).has_value());
216
218
  // NOLINTNEXTLINE(bugprone-unchecked-optional-access)
217
- REQUIRE(estimator.RemoteMsToLocalMs(RemoteBaseMs + 500).value() == LocalBaseMs + 500);
219
+ REQUIRE(estimator.RemoteUsToLocalUs(RemoteBaseUs + 500000).value() == LocalBaseUs + 500000);
218
220
 
219
221
  // A remote time older than the origin of our clock cannot be translated.
220
- REQUIRE_FALSE(estimator.RemoteMsToLocalMs(0).has_value());
222
+ REQUIRE_FALSE(estimator.RemoteUsToLocalUs(0).has_value());
221
223
  }
222
224
 
223
225
  SECTION("Reset() clears the estimation")
224
226
  {
225
- feed(estimator, RemoteBaseMs, LocalBaseMs, minSampleCount, 0, 0);
227
+ feed(estimator, RemoteBaseUs, LocalBaseUs, minSampleCount, 0, 0);
226
228
 
227
- REQUIRE(estimator.GetOffsetMs().has_value());
229
+ REQUIRE(estimator.GetOffsetUs().has_value());
228
230
 
229
231
  estimator.Reset();
230
232
 
231
- REQUIRE_FALSE(estimator.GetOffsetMs().has_value());
233
+ REQUIRE_FALSE(estimator.GetOffsetUs().has_value());
232
234
 
233
235
  // The last arrival time is forgotten as well, so Sender Reports arriving at
234
236
  // the very same times as before the reset are not taken as duplicates.
235
- feed(estimator, RemoteBaseMs, LocalBaseMs, minSampleCount, 0, 0);
237
+ feed(estimator, RemoteBaseUs, LocalBaseUs, minSampleCount, 0, 0);
236
238
 
237
- REQUIRE(estimator.GetOffsetMs().has_value());
239
+ REQUIRE(estimator.GetOffsetUs().has_value());
238
240
  // NOLINTNEXTLINE(bugprone-unchecked-optional-access)
239
- REQUIRE(estimator.GetOffsetMs().value() == BaseOffsetMs);
241
+ REQUIRE(estimator.GetOffsetUs().value() == BaseOffsetUs);
240
242
  }
241
243
  }
@@ -65,6 +65,11 @@ namespace
65
65
  {
66
66
  return 0;
67
67
  }
68
+
69
+ void OnRtpStreamSpatialLayerActivityChanged(
70
+ RTC::RTP::RtpStreamRecv* /*rtpStream*/, uint8_t /*spatialLayer*/, bool /*isActive*/) override
71
+ {
72
+ }
68
73
  };
69
74
 
70
75
  class MockEncodingContext : public RTC::RTP::Codecs::EncodingContext
@@ -135,10 +140,10 @@ namespace
135
140
  RtpStreamRecvListener streamRecvListener; // NOLINT(readability-identifier-naming)
136
141
 
137
142
  // NOLINTNEXTLINE(readability-identifier-naming)
138
- mocks::MockShared shared(/*getTimeMs*/
139
- []()
143
+ mocks::MockShared shared(/*getTimeUs*/
144
+ []() -> int64_t
140
145
  {
141
- return DepLibUV::GetTimeMs();
146
+ return DepLibUV::GetTimeUs();
142
147
  }); // NOLINT(readability-identifier-naming)
143
148
 
144
149
  std::unique_ptr<RTC::SimpleProducerStreamManager> createManager(
@@ -160,7 +165,7 @@ namespace
160
165
  kind,
161
166
  keyFrameSupported,
162
167
  listener,
163
- &shared);
168
+ std::addressof(shared));
164
169
  }
165
170
 
166
171
  std::unique_ptr<RTC::RTP::RtpStreamRecv> createRtpStreamRecv()
@@ -170,7 +175,8 @@ namespace
170
175
  params.ssrc = MappedSsrc;
171
176
  params.clockRate = 90000;
172
177
 
173
- return std::make_unique<RTC::RTP::RtpStreamRecv>(&streamRecvListener, &shared, params, 0u, false);
178
+ return std::make_unique<RTC::RTP::RtpStreamRecv>(
179
+ std::addressof(streamRecvListener), std::addressof(shared), params, 0u, false);
174
180
  }
175
181
 
176
182
  // Feed packets into the RtpStreamRecv so GetBitrate() returns non-zero.
@@ -182,15 +188,15 @@ namespace
182
188
  for (uint16_t seq = firstSeq; Utils::Number::IsLowerThan<uint16_t>(seq, lastSeq); ++seq)
183
189
  {
184
190
  packet->SetSequenceNumber(seq);
185
- rtpStream->ReceivePacket(packet);
191
+ rtpStream->ReceivePacket(packet, shared.GetTimeUs());
186
192
  }
187
193
 
188
- auto nowMs = DepLibUV::GetTimeMs();
194
+ const int64_t nowMs = DepLibUV::GetTimeMs();
189
195
 
190
196
  // bitrate (bps) = totalBytes * 8000 / windowSizeMs.
191
197
  // windowSizeMs for RtpStreamRecv is 2500.
192
- auto expectedBitrate =
193
- static_cast<uint32_t>(std::trunc((count * packet->GetLength() * 8000.0f / 2500) + 0.5f));
198
+ const auto expectedBitrate =
199
+ static_cast<int64_t>(std::trunc((count * packet->GetLength() * 8000.0f / 2500) + 0.5f));
194
200
 
195
201
  REQUIRE(rtpStream->GetBitrate(nowMs) == expectedBitrate);
196
202
  }
@@ -208,7 +214,7 @@ SCENARIO("SimpleProducerStreamManager", "[rtp][producerstreammanager][simple]")
208
214
  SECTION("returns BUFFER when sync required and packet is not a keyframe")
209
215
  {
210
216
  MockListener listener;
211
- auto manager = createManager(&listener);
217
+ auto manager = createManager(std::addressof(listener));
212
218
  auto rtpStream = createRtpStreamRecv();
213
219
 
214
220
  manager->ProducerRtpStream(rtpStream.get(), MappedSsrc);
@@ -223,7 +229,7 @@ SCENARIO("SimpleProducerStreamManager", "[rtp][producerstreammanager][simple]")
223
229
  SECTION("returns FORWARD with sendBufferedPackets when syncing with a keyframe")
224
230
  {
225
231
  MockListener listener;
226
- auto manager = createManager(&listener);
232
+ auto manager = createManager(std::addressof(listener));
227
233
  auto rtpStream = createRtpStreamRecv();
228
234
 
229
235
  manager->ProducerRtpStream(rtpStream.get(), MappedSsrc);
@@ -249,7 +255,7 @@ SCENARIO("SimpleProducerStreamManager", "[rtp][producerstreammanager][simple]")
249
255
  SECTION("returns DROP for empty payload packets")
250
256
  {
251
257
  MockListener listener;
252
- auto manager = createManager(&listener, /*keyFrameSupported*/ false);
258
+ auto manager = createManager(std::addressof(listener), /*keyFrameSupported*/ false);
253
259
  auto rtpStream = createRtpStreamRecv();
254
260
 
255
261
  manager->ProducerRtpStream(rtpStream.get(), MappedSsrc);
@@ -293,7 +299,7 @@ SCENARIO("SimpleProducerStreamManager", "[rtp][producerstreammanager][simple]")
293
299
  SECTION("returns FORWARD and completes sync when keyFrameSupported is false for the first packet")
294
300
  {
295
301
  MockListener listener;
296
- auto manager = createManager(&listener, /*keyFrameSupported*/ false);
302
+ auto manager = createManager(std::addressof(listener), /*keyFrameSupported*/ false);
297
303
  auto rtpStream = createRtpStreamRecv();
298
304
 
299
305
  manager->ProducerRtpStream(rtpStream.get(), MappedSsrc);
@@ -316,7 +322,7 @@ SCENARIO("SimpleProducerStreamManager", "[rtp][producerstreammanager][simple]")
316
322
  SECTION("returns FORWARD for normal packets after sync")
317
323
  {
318
324
  MockListener listener;
319
- auto manager = createManager(&listener, /*keyFrameSupported*/ false);
325
+ auto manager = createManager(std::addressof(listener), /*keyFrameSupported*/ false);
320
326
  auto rtpStream = createRtpStreamRecv();
321
327
 
322
328
  manager->ProducerRtpStream(rtpStream.get(), MappedSsrc);
@@ -342,7 +348,7 @@ SCENARIO("SimpleProducerStreamManager", "[rtp][producerstreammanager][simple]")
342
348
  SECTION("OnTransportConnected() requests keyframe when active")
343
349
  {
344
350
  MockListener listener;
345
- auto manager = createManager(&listener);
351
+ auto manager = createManager(std::addressof(listener));
346
352
  auto rtpStream = createRtpStreamRecv();
347
353
 
348
354
  manager->ProducerRtpStream(rtpStream.get(), MappedSsrc);
@@ -359,7 +365,7 @@ SCENARIO("SimpleProducerStreamManager", "[rtp][producerstreammanager][simple]")
359
365
  MockListener listener;
360
366
  listener.isActive = false;
361
367
 
362
- auto manager = createManager(&listener);
368
+ auto manager = createManager(std::addressof(listener));
363
369
 
364
370
  // Don't wire producerRtpStream — manager is not active.
365
371
  manager->OnTransportConnected();
@@ -370,7 +376,7 @@ SCENARIO("SimpleProducerStreamManager", "[rtp][producerstreammanager][simple]")
370
376
  SECTION("OnResumed() sets syncRequired and requests keyframe")
371
377
  {
372
378
  MockListener listener;
373
- auto manager = createManager(&listener);
379
+ auto manager = createManager(std::addressof(listener));
374
380
  auto rtpStream = createRtpStreamRecv();
375
381
 
376
382
  manager->ProducerRtpStream(rtpStream.get(), MappedSsrc);
@@ -395,7 +401,7 @@ SCENARIO("SimpleProducerStreamManager", "[rtp][producerstreammanager][simple]")
395
401
  SECTION("IncreaseLayer() returns producer bitrate when it is less than available bitrate")
396
402
  {
397
403
  MockListener listener;
398
- auto manager = createManager(&listener);
404
+ auto manager = createManager(std::addressof(listener));
399
405
  auto rtpStream = createRtpStreamRecv();
400
406
 
401
407
  manager->ProducerRtpStream(rtpStream.get(), MappedSsrc);
@@ -405,18 +411,18 @@ SCENARIO("SimpleProducerStreamManager", "[rtp][producerstreammanager][simple]")
405
411
  // Feed packets so the stream has non-zero bitrate.
406
412
  feedRtpStreamRecv(rtpStream.get(), packet.get(), 100);
407
413
 
408
- auto nowMs = DepLibUV::GetTimeMs();
409
- auto steamBitrate = rtpStream->GetBitrate(nowMs);
410
- auto usedBitrate = manager->IncreaseLayer(
411
- /*bitrate*/ steamBitrate + 1u, /*considerLoss*/ false, /*lossPercentage*/ 0.0f, nowMs);
414
+ const int64_t nowMs = DepLibUV::GetTimeMs();
415
+ const auto streamBitrate = rtpStream->GetBitrate(nowMs);
416
+ const auto usedBitrate = manager->IncreaseLayer(
417
+ /*bitrate*/ streamBitrate + 1, /*considerLoss*/ false, /*lossPercentage*/ 0.0f, nowMs);
412
418
 
413
- REQUIRE(usedBitrate == steamBitrate);
419
+ REQUIRE(usedBitrate == streamBitrate);
414
420
  }
415
421
 
416
422
  SECTION("IncreaseLayer() returns available bitrate when it is less than producer bitrate")
417
423
  {
418
424
  MockListener listener;
419
- auto manager = createManager(&listener);
425
+ auto manager = createManager(std::addressof(listener));
420
426
  auto rtpStream = createRtpStreamRecv();
421
427
 
422
428
  manager->ProducerRtpStream(rtpStream.get(), MappedSsrc);
@@ -426,10 +432,10 @@ SCENARIO("SimpleProducerStreamManager", "[rtp][producerstreammanager][simple]")
426
432
  // Feed packets so the stream has non-zero bitrate.
427
433
  feedRtpStreamRecv(rtpStream.get(), packet.get(), 100);
428
434
 
429
- auto nowMs = DepLibUV::GetTimeMs();
430
- const auto streamBitrate = rtpStream->GetBitrate(nowMs);
431
- const uint32_t availableBitrate = streamBitrate - 1;
432
- auto usedBitrate = manager->IncreaseLayer(
435
+ const int64_t nowMs = DepLibUV::GetTimeMs();
436
+ const auto streamBitrate = rtpStream->GetBitrate(nowMs);
437
+ const int64_t availableBitrate = streamBitrate - 1;
438
+ auto usedBitrate = manager->IncreaseLayer(
433
439
  /*bitrate*/ availableBitrate, /*considerLoss*/ false, /*lossPercentage*/ 0.0f, nowMs);
434
440
 
435
441
  REQUIRE(usedBitrate == availableBitrate);
@@ -438,7 +444,7 @@ SCENARIO("SimpleProducerStreamManager", "[rtp][producerstreammanager][simple]")
438
444
  SECTION("IncreaseLayer() returns 0 on second call in same iteration")
439
445
  {
440
446
  MockListener listener;
441
- auto manager = createManager(&listener);
447
+ auto manager = createManager(std::addressof(listener));
442
448
  auto rtpStream = createRtpStreamRecv();
443
449
 
444
450
  manager->ProducerRtpStream(rtpStream.get(), MappedSsrc);
@@ -448,25 +454,25 @@ SCENARIO("SimpleProducerStreamManager", "[rtp][producerstreammanager][simple]")
448
454
  // Feed packets so the stream has non-zero bitrate.
449
455
  feedRtpStreamRecv(rtpStream.get(), packet.get(), 100);
450
456
 
451
- auto nowMs = DepLibUV::GetTimeMs();
457
+ const int64_t nowMs = DepLibUV::GetTimeMs();
452
458
 
453
459
  // First call claims bitrate.
454
460
  auto usedBitrate = manager->IncreaseLayer(
455
- /*bitrate*/ 1000000u, /*considerLoss*/ false, /*lossPercentage*/ 0.0f, nowMs);
461
+ /*bitrate*/ 1000000, /*considerLoss*/ false, /*lossPercentage*/ 0.0f, nowMs);
456
462
 
457
- REQUIRE(usedBitrate > 0u);
463
+ REQUIRE(usedBitrate > 0);
458
464
 
459
465
  // Second call in same iteration should return 0.
460
466
  auto usedBitrate2 = manager->IncreaseLayer(
461
- /*bitrate*/ 1000000u, /*considerLoss*/ false, /*lossPercentage*/ 0.0f, nowMs);
467
+ /*bitrate*/ 1000000, /*considerLoss*/ false, /*lossPercentage*/ 0.0f, nowMs);
462
468
 
463
- REQUIRE(usedBitrate2 == 0u);
469
+ REQUIRE(usedBitrate2 == 0);
464
470
  }
465
471
 
466
472
  SECTION("IncreaseLayer() works again after ApplyLayers()")
467
473
  {
468
474
  MockListener listener;
469
- auto manager = createManager(&listener);
475
+ auto manager = createManager(std::addressof(listener));
470
476
  auto rtpStream = createRtpStreamRecv();
471
477
 
472
478
  manager->ProducerRtpStream(rtpStream.get(), MappedSsrc);
@@ -476,24 +482,24 @@ SCENARIO("SimpleProducerStreamManager", "[rtp][producerstreammanager][simple]")
476
482
  // Feed packets so the stream has non-zero bitrate.
477
483
  feedRtpStreamRecv(rtpStream.get(), packet.get(), 100);
478
484
 
479
- auto nowMs = DepLibUV::GetTimeMs();
485
+ const int64_t nowMs = DepLibUV::GetTimeMs();
480
486
 
481
487
  // First iteration: claim bitrate and apply.
482
488
  manager->IncreaseLayer(
483
- /*bitrate*/ 1000000u, /*considerLoss*/ false, /*lossPercentage*/ 0.0f, nowMs);
489
+ /*bitrate*/ 1000000, /*considerLoss*/ false, /*lossPercentage*/ 0.0f, nowMs);
484
490
  manager->ApplyLayers(/*rtpStreamActiveMs*/ 0u);
485
491
 
486
492
  // After ApplyLayers, IncreaseLayer should work again.
487
493
  auto usedBitrate = manager->IncreaseLayer(
488
- /*bitrate*/ 1000000u, /*considerLoss*/ false, /*lossPercentage*/ 0.0f, nowMs);
494
+ /*bitrate*/ 1000000, /*considerLoss*/ false, /*lossPercentage*/ 0.0f, nowMs);
489
495
 
490
- REQUIRE(usedBitrate > 0u);
496
+ REQUIRE(usedBitrate > 0);
491
497
  }
492
498
 
493
499
  SECTION("GetDesiredBitrate() returns producer bitrate for video")
494
500
  {
495
501
  MockListener listener;
496
- auto manager = createManager(&listener);
502
+ auto manager = createManager(std::addressof(listener));
497
503
  auto rtpStream = createRtpStreamRecv();
498
504
 
499
505
  manager->ProducerRtpStream(rtpStream.get(), MappedSsrc);
@@ -503,17 +509,18 @@ SCENARIO("SimpleProducerStreamManager", "[rtp][producerstreammanager][simple]")
503
509
  // Feed packets so the stream has non-zero bitrate.
504
510
  feedRtpStreamRecv(rtpStream.get(), packet.get(), 100);
505
511
 
506
- auto nowMs = DepLibUV::GetTimeMs();
507
- auto steamBitrate = rtpStream->GetBitrate(nowMs);
508
- auto desiredBitrate = manager->GetDesiredBitrate(nowMs);
512
+ const int64_t nowMs = DepLibUV::GetTimeMs();
513
+ const auto streamBitrate = rtpStream->GetBitrate(nowMs);
514
+ const auto desiredBitrate = manager->GetDesiredBitrate(nowMs);
509
515
 
510
- REQUIRE(desiredBitrate == steamBitrate);
516
+ REQUIRE(desiredBitrate == streamBitrate);
511
517
  }
512
518
 
513
519
  SECTION("GetDesiredBitrate() returns 0 for audio kind")
514
520
  {
515
521
  MockListener listener;
516
- auto manager = createManager(&listener, /*keyFrameSupported*/ false, RTC::Media::Kind::AUDIO);
522
+ auto manager =
523
+ createManager(std::addressof(listener), /*keyFrameSupported*/ false, RTC::Media::Kind::AUDIO);
517
524
  auto rtpStream = createRtpStreamRecv();
518
525
 
519
526
  manager->ProducerRtpStream(rtpStream.get(), MappedSsrc);
@@ -523,9 +530,9 @@ SCENARIO("SimpleProducerStreamManager", "[rtp][producerstreammanager][simple]")
523
530
  // Feed packets so the stream has non-zero bitrate.
524
531
  feedRtpStreamRecv(rtpStream.get(), packet.get(), 100);
525
532
 
526
- auto nowMs = DepLibUV::GetTimeMs();
533
+ const int64_t nowMs = DepLibUV::GetTimeMs();
527
534
  auto desiredBitrate = manager->GetDesiredBitrate(nowMs);
528
535
 
529
- REQUIRE(desiredBitrate == 0u);
536
+ REQUIRE(desiredBitrate == 0);
530
537
  }
531
538
  }