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