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
@@ -218,7 +218,7 @@ namespace RTC
218
218
  // take.
219
219
  size_t bufferLength;
220
220
  // Serializable current exact length (includes padding bytes).
221
- size_t length{ 0u };
221
+ size_t length{ 0 };
222
222
  // Event listener invoked when the current buffer is released (no longer
223
223
  // used by this Serializable)-
224
224
  BufferReleasedListener* bufferReleasedListener{ nullptr };
@@ -42,10 +42,9 @@ namespace RTC
42
42
  void ProducerRtpStreamScore(
43
43
  RTC::RTP::RtpStreamRecv* rtpStream, uint8_t score, uint8_t previousScore) override;
44
44
  void ProducerRtcpSenderReport(RTC::RTP::RtpStreamRecv* rtpStream, bool first) override;
45
- uint32_t IncreaseLayer(
46
- uint32_t bitrate, bool considerLoss, float lossPercentage, uint64_t nowMs) override;
47
- void ApplyLayers(uint64_t rtpStreamActiveMs) override;
48
- uint32_t GetDesiredBitrate(uint64_t nowMs) const override;
45
+ int64_t IncreaseLayer(int64_t bitrate, bool considerLoss, float lossPercentage, int64_t nowMs) override;
46
+ void ApplyLayers(int64_t rtpStreamActiveMs) override;
47
+ int64_t GetDesiredBitrate(int64_t nowMs) const override;
49
48
  RtpPacketProcessResult ProcessRtpPacket(
50
49
  RTC::RTP::Packet* packet,
51
50
  bool lastSentPacketHasMarker,
@@ -48,10 +48,9 @@ namespace RTC
48
48
  void ProducerRtpStreamScore(
49
49
  RTC::RTP::RtpStreamRecv* rtpStream, uint8_t score, uint8_t previousScore) override;
50
50
  void ProducerRtcpSenderReport(RTC::RTP::RtpStreamRecv* rtpStream, bool first) override;
51
- uint32_t IncreaseLayer(
52
- uint32_t bitrate, bool considerLoss, float lossPercentage, uint64_t nowMs) override;
53
- void ApplyLayers(uint64_t rtpStreamActiveMs) override;
54
- uint32_t GetDesiredBitrate(uint64_t nowMs) const override;
51
+ int64_t IncreaseLayer(int64_t bitrate, bool considerLoss, float lossPercentage, int64_t nowMs) override;
52
+ void ApplyLayers(int64_t rtpStreamActiveMs) override;
53
+ int64_t GetDesiredBitrate(int64_t nowMs) const override;
55
54
  RtpPacketProcessResult ProcessRtpPacket(
56
55
  RTC::RTP::Packet* packet,
57
56
  bool lastSentPacketHasMarker,
@@ -83,13 +82,13 @@ namespace RTC
83
82
  // Spatial layer that was the RTP timestamp reference the last time its capture
84
83
  // instant was known upon a received Sender Report.
85
84
  int16_t tsReferenceSpatialLayerWithCaptureMapping{ -1 };
86
- uint32_t tsOffset{ 0u };
85
+ uint32_t tsOffset{ 0 };
87
86
  bool keyFrameForTsOffsetRequested{ false };
88
87
  // Old-packet filtering after spatial switch.
89
- uint16_t snReferenceSpatialLayer{ 0u };
88
+ uint16_t snReferenceSpatialLayer{ 0 };
90
89
  bool checkingForOldPacketsInSpatialLayer{ false };
91
90
  // BWE downgrade tracking.
92
- uint64_t lastBweDowngradeAtMs{ 0u };
91
+ int64_t lastBweDowngradeAtMs{ 0 };
93
92
  };
94
93
  } // namespace RTC
95
94
 
@@ -42,10 +42,11 @@ namespace RTC
42
42
  void ProducerRtpStreamScore(
43
43
  RTC::RTP::RtpStreamRecv* rtpStream, uint8_t score, uint8_t previousScore) override;
44
44
  void ProducerRtcpSenderReport(RTC::RTP::RtpStreamRecv* rtpStream, bool first) override;
45
- uint32_t IncreaseLayer(
46
- uint32_t bitrate, bool considerLoss, float lossPercentage, uint64_t nowMs) override;
47
- void ApplyLayers(uint64_t rtpStreamActiveMs) override;
48
- uint32_t GetDesiredBitrate(uint64_t nowMs) const override;
45
+ void ProducerSpatialLayerActivityChanged(
46
+ RTC::RTP::RtpStreamRecv* rtpStream, uint8_t spatialLayer, bool isActive) override;
47
+ int64_t IncreaseLayer(int64_t bitrate, bool considerLoss, float lossPercentage, int64_t nowMs) override;
48
+ void ApplyLayers(int64_t rtpStreamActiveMs) override;
49
+ int64_t GetDesiredBitrate(int64_t nowMs) const override;
49
50
  RtpPacketProcessResult ProcessRtpPacket(
50
51
  RTC::RTP::Packet* packet,
51
52
  bool lastSentPacketHasMarker,
@@ -65,7 +66,7 @@ namespace RTC
65
66
  // Producer RTP stream (single stream for SVC).
66
67
  RTC::RTP::RtpStreamRecv* producerRtpStream{ nullptr };
67
68
  // BWE downgrade tracking.
68
- uint64_t lastBweDowngradeAtMs{ 0u };
69
+ int64_t lastBweDowngradeAtMs{ 0 };
69
70
  };
70
71
  } // namespace RTC
71
72
 
@@ -3,6 +3,7 @@
3
3
 
4
4
  #include "common.hpp"
5
5
  #include "handles/TcpConnectionHandle.hpp"
6
+ #include "SharedInterface.hpp"
6
7
 
7
8
  namespace RTC
8
9
  {
@@ -16,11 +17,15 @@ namespace RTC
16
17
 
17
18
  public:
18
19
  virtual void OnTcpConnectionPacketReceived(
19
- RTC::TcpConnection* connection, const uint8_t* data, size_t len, size_t bufferLen) = 0;
20
+ RTC::TcpConnection* connection,
21
+ const uint8_t* data,
22
+ size_t len,
23
+ size_t bufferLen,
24
+ int64_t receivedAtUs) = 0;
20
25
  };
21
26
 
22
27
  public:
23
- TcpConnection(Listener* listener, size_t bufferSize);
28
+ TcpConnection(Listener* listener, SharedInterface* shared, size_t bufferSize);
24
29
  ~TcpConnection() override;
25
30
 
26
31
  public:
@@ -33,8 +38,9 @@ namespace RTC
33
38
  private:
34
39
  // Passed by argument.
35
40
  Listener* listener{ nullptr };
41
+ SharedInterface* shared{ nullptr };
36
42
  // Others.
37
- size_t frameStart{ 0u }; // Where the latest frame starts.
43
+ size_t frameStart{ 0 }; // Where the latest frame starts.
38
44
  };
39
45
  } // namespace RTC
40
46
 
@@ -28,12 +28,14 @@ namespace RTC
28
28
  TcpServer(
29
29
  Listener* listener,
30
30
  RTC::TcpConnection::Listener* connListener,
31
+ SharedInterface* shared,
31
32
  std::string& ip,
32
33
  uint16_t port,
33
34
  RTC::Transport::SocketFlags& flags);
34
35
  TcpServer(
35
36
  Listener* listener,
36
37
  RTC::TcpConnection::Listener* connListener,
38
+ SharedInterface* shared,
37
39
  std::string& ip,
38
40
  uint16_t minPort,
39
41
  uint16_t maxPort,
@@ -50,6 +52,7 @@ namespace RTC
50
52
  // Passed by argument.
51
53
  Listener* listener{ nullptr };
52
54
  RTC::TcpConnection::Listener* connListener{ nullptr };
55
+ SharedInterface* shared{ nullptr };
53
56
  bool fixedPort{ false };
54
57
  RTC::PortManager::PortRangeKey portRangeKey{};
55
58
  };
@@ -1,13 +1,12 @@
1
1
  #ifndef MS_RTC_TRANSPORT_HPP
2
2
  #define MS_RTC_TRANSPORT_HPP
3
3
 
4
- // #define ENABLE_RTC_SENDER_BANDWIDTH_ESTIMATOR
5
-
6
4
  #include "common.hpp"
7
5
  #include "Channel/ChannelNotification.hpp"
8
6
  #include "Channel/ChannelRequest.hpp"
9
7
  #include "Channel/ChannelSocket.hpp"
10
8
  #include "FBS/transport.h"
9
+ #include "handles/TimerHandleInterface.hpp"
11
10
  #include "RTC/Consumer.hpp"
12
11
  #include "RTC/DataConsumer.hpp"
13
12
  #include "RTC/DataProducer.hpp"
@@ -24,13 +23,11 @@
24
23
  #include "RTC/SCTP/public/Message.hpp"
25
24
  #include "RTC/SCTP/public/SctpTypes.hpp"
26
25
  #include "RTC/SctpListener.hpp"
27
- #include "SharedInterface.hpp"
28
- #ifdef ENABLE_RTC_SENDER_BANDWIDTH_ESTIMATOR
29
- #include "RTC/SenderBandwidthEstimator.hpp"
30
- #endif
31
- #include "handles/TimerHandleInterface.hpp"
26
+ #ifndef MS_USE_BUILTIN_BWE
32
27
  #include "RTC/TransportCongestionControlClient.hpp"
33
28
  #include "RTC/TransportCongestionControlServer.hpp"
29
+ #endif
30
+ #include "SharedInterface.hpp"
34
31
  #include <ankerl/unordered_dense.h>
35
32
  #include <string>
36
33
  #include <vector>
@@ -42,13 +39,12 @@ namespace RTC
42
39
  public RTC::DataProducer::Listener,
43
40
  public RTC::DataConsumer::Listener,
44
41
  public RTC::SCTP::AssociationListenerInterface,
42
+ #ifndef MS_USE_BUILTIN_BWE
45
43
  public RTC::TransportCongestionControlClient::Listener,
46
44
  public RTC::TransportCongestionControlServer::Listener,
45
+ #endif
47
46
  public Channel::ChannelSocket::RequestHandler,
48
47
  public Channel::ChannelSocket::NotificationHandler,
49
- #ifdef ENABLE_RTC_SENDER_BANDWIDTH_ESTIMATOR
50
- public RTC::SenderBandwidthEstimator::Listener,
51
- #endif
52
48
  public TimerHandleInterface::Listener
53
49
  {
54
50
  protected:
@@ -82,6 +78,12 @@ namespace RTC
82
78
  RTC::Producer* producer,
83
79
  RTC::RTP::RtpStreamRecv* rtpStream,
84
80
  bool first) = 0;
81
+ virtual void OnTransportProducerSpatialLayerActivityChanged(
82
+ RTC::Transport* transport,
83
+ RTC::Producer* producer,
84
+ RTC::RTP::RtpStreamRecv* rtpStream,
85
+ uint8_t spatialLayer,
86
+ bool isActive) = 0;
85
87
  virtual void OnTransportProducerRtpPacketReceived(
86
88
  RTC::Transport* transport, RTC::Producer* producer, RTC::RTP::Packet* packet) = 0;
87
89
  /**
@@ -132,19 +134,19 @@ namespace RTC
132
134
 
133
135
  struct PortRange
134
136
  {
135
- uint16_t min{ 0u };
136
- uint16_t max{ 0u };
137
+ uint16_t min{ 0 };
138
+ uint16_t max{ 0 };
137
139
  };
138
140
 
139
141
  struct ListenInfo
140
142
  {
141
143
  std::string ip;
142
144
  std::string announcedAddress;
143
- uint16_t port{ 0u };
145
+ uint16_t port{ 0 };
144
146
  PortRange portRange;
145
147
  SocketFlags flags;
146
- uint32_t sendBufferSize{ 0u };
147
- uint32_t recvBufferSize{ 0u };
148
+ uint32_t sendBufferSize{ 0 };
149
+ uint32_t recvBufferSize{ 0 };
148
150
  };
149
151
 
150
152
  private:
@@ -161,10 +163,10 @@ namespace RTC
161
163
  RTC::Transport::Listener* listener,
162
164
  const FBS::Transport::Options* options,
163
165
  /**
164
- * Whether the SCTP association (if enabled) must authenticate received
165
- * State Cookies. This must be `true` for transports whose SCTP traffic
166
- * is not protected by DTLS (PlainTransport and PipeTransport).
167
- */
166
+ * Whether the SCTP association (if enabled) must authenticate received
167
+ * State Cookies. This must be `true` for transports whose SCTP traffic
168
+ * is not protected by DTLS (PlainTransport and PipeTransport).
169
+ */
168
170
  bool requireSctpStateCookieAuthentication);
169
171
  ~Transport() override;
170
172
 
@@ -196,9 +198,9 @@ namespace RTC
196
198
  {
197
199
  this->sendTransmission.Update(len, this->shared->GetTimeMs());
198
200
  }
199
- virtual void ReceiveRtpPacket(RTC::RTP::Packet* packet) final;
200
- virtual void ReceiveRtcpPacket(RTC::RTCP::Packet* packet) final;
201
- virtual void ReceiveSctpData(const uint8_t* data, size_t len) final;
201
+ virtual void ReceiveRtpPacket(RTC::RTP::Packet* packet, int64_t receivedAtUs) final;
202
+ virtual void ReceiveRtcpPacket(RTC::RTCP::Packet* packet, int64_t receivedAtUs) final;
203
+ virtual void ReceiveSctpData(const uint8_t* data, size_t len, int64_t receivedAtUs) final;
202
204
  virtual void SendSctpMessage(
203
205
  RTC::DataConsumer* dataConsumer, RTC::SCTP::Message message, onQueuedCallback* cb = nullptr) final;
204
206
 
@@ -228,8 +230,8 @@ namespace RTC
228
230
  }
229
231
  virtual void SendRtpPacket(
230
232
  RTC::Consumer* consumer, RTC::RTP::Packet* packet, const onSendCallback* cb = nullptr) = 0;
231
- virtual void HandleRtcpPacket(RTC::RTCP::Packet* packet) final;
232
- virtual void SendRtcp(uint64_t nowMs) final;
233
+ virtual void HandleRtcpPacket(RTC::RTCP::Packet* packet, int64_t receivedAtUs) final;
234
+ virtual void SendRtcp(int64_t nowUs) final;
233
235
  virtual void SendRtcpPacket(RTC::RTCP::Packet* packet) = 0;
234
236
  virtual void SendRtcpCompoundPacket(RTC::RTCP::CompoundPacket* packet) = 0;
235
237
  virtual void SendMessage(
@@ -240,8 +242,10 @@ namespace RTC
240
242
  virtual void DistributeAvailableOutgoingBitrate() final;
241
243
  virtual void ComputeOutgoingDesiredBitrate(bool forceBitrate = false) final;
242
244
  virtual void EmitTraceEventProbationType(RTC::RTP::Packet* packet) const final;
245
+ #ifndef MS_USE_BUILTIN_BWE
243
246
  virtual void EmitTraceEventBweType(
244
247
  RTC::TransportCongestionControlClient::Bitrates& bitrates) const final;
248
+ #endif
245
249
 
246
250
  /* Pure virtual methods inherited from RTC::Producer::Listener. */
247
251
  public:
@@ -249,9 +253,10 @@ namespace RTC
249
253
  {
250
254
  this->DataReceived(len);
251
255
  }
252
- void OnProducerReceiveRtpPacket(RTC::Producer* /*producer*/, RTC::RTP::Packet* packet) override
256
+ void OnProducerReceiveRtpPacket(
257
+ RTC::Producer* /*producer*/, RTC::RTP::Packet* packet, int64_t receivedAtUs) override
253
258
  {
254
- this->ReceiveRtpPacket(packet);
259
+ this->ReceiveRtpPacket(packet, receivedAtUs);
255
260
  }
256
261
  void OnProducerPaused(RTC::Producer* producer) override;
257
262
  void OnProducerResumed(RTC::Producer* producer) override;
@@ -264,12 +269,17 @@ namespace RTC
264
269
  uint8_t previousScore) override;
265
270
  void OnProducerRtcpSenderReport(
266
271
  RTC::Producer* producer, RTC::RTP::RtpStreamRecv* rtpStream, bool first) override;
272
+ void OnProducerSpatialLayerActivityChanged(
273
+ RTC::Producer* producer,
274
+ RTC::RTP::RtpStreamRecv* rtpStream,
275
+ uint8_t spatialLayer,
276
+ bool isActive) override;
267
277
  void OnProducerRtpPacketReceived(RTC::Producer* producer, RTC::RTP::Packet* packet) override;
268
278
  void OnProducerSendRtcpPacket(RTC::Producer* producer, RTC::RTCP::Packet* packet) override;
269
279
  uint8_t OnProducerNeedWorstRemoteFractionLost(RTC::Producer* producer, uint32_t mappedSsrc) override;
270
- std::optional<uint64_t> OnProducerNeedLocalCaptureMs(
280
+ std::optional<int64_t> OnProducerNeedLocalCaptureAtUs(
271
281
  RTC::Producer* producer, const RTC::RTP::RtpStreamRecv* rtpStream, uint32_t ts) override;
272
- std::optional<int64_t> OnProducerNeedRemoteClockOffsetMs(const RTC::Producer* producer) override;
282
+ std::optional<int64_t> OnProducerNeedRemoteClockOffsetUs(const RTC::Producer* producer) override;
273
283
 
274
284
  /* Pure virtual methods inherited from RTC::Consumer::Listener. */
275
285
  public:
@@ -325,6 +335,7 @@ namespace RTC
325
335
  void OnAssociationTotalBufferedAmountLow() override;
326
336
  bool OnAssociationIsTransportReadyForSctp() override;
327
337
 
338
+ #ifndef MS_USE_BUILTIN_BWE
328
339
  /* Pure virtual methods inherited from RTC::TransportCongestionControlClient::Listener. */
329
340
  public:
330
341
  void OnTransportCongestionControlClientBitrates(
@@ -339,14 +350,6 @@ namespace RTC
339
350
  public:
340
351
  void OnTransportCongestionControlServerSendRtcpPacket(
341
352
  RTC::TransportCongestionControlServer* tccServer, RTC::RTCP::Packet* packet) override;
342
-
343
- #ifdef ENABLE_RTC_SENDER_BANDWIDTH_ESTIMATOR
344
- /* Pure virtual methods inherited from RTC::SenderBandwidthEstimator::Listener. */
345
- public:
346
- void OnSenderBandwidthEstimatorAvailableBitrate(
347
- RTC::SenderBandwidthEstimator* senderBwe,
348
- uint32_t availableBitrate,
349
- uint32_t previousAvailableBitrate) override;
350
353
  #endif
351
354
 
352
355
  /* Pure virtual methods inherited from TimerHandleInterface::Listener. */
@@ -378,10 +381,9 @@ namespace RTC
378
381
  TimerHandleInterface* rtcpTimer{ nullptr };
379
382
  // Allocated by this.
380
383
  std::unique_ptr<RTC::SCTP::AssociationInterface> sctpAssociation{ nullptr };
384
+ #ifndef MS_USE_BUILTIN_BWE
381
385
  std::shared_ptr<RTC::TransportCongestionControlClient> tccClient{ nullptr };
382
386
  std::shared_ptr<RTC::TransportCongestionControlServer> tccServer{ nullptr };
383
- #ifdef ENABLE_RTC_SENDER_BANDWIDTH_ESTIMATOR
384
- std::shared_ptr<RTC::SenderBandwidthEstimator> senderBwe{ nullptr };
385
387
  #endif
386
388
  // Others.
387
389
  bool direct{ false }; // Whether this Transport allows direct communication.
@@ -396,14 +398,19 @@ namespace RTC
396
398
  RTC::RtpDataCounter recvRtxTransmission;
397
399
  RTC::RtpDataCounter sendRtxTransmission;
398
400
  RTC::RtpDataCounter sendProbationTransmission;
399
- uint16_t transportWideCcSeq{ 0u };
400
- uint32_t initialAvailableOutgoingBitrate{ 600000u };
401
- uint32_t maxIncomingBitrate{ 0u };
402
- uint32_t maxOutgoingBitrate{ 0u };
403
- uint32_t minOutgoingBitrate{ 0u };
401
+ #ifdef MS_USE_BUILTIN_BWE
402
+ // TODO: The built-in downlink BWE hands the sequence number out, so this
403
+ // counter goes away.
404
+ #else
405
+ uint16_t transportWideCcSeq{ 0 };
406
+ #endif
407
+ int64_t initialAvailableOutgoingBitrate{ 600000 };
408
+ int64_t maxIncomingBitrate{ 0 };
409
+ int64_t maxOutgoingBitrate{ 0 };
410
+ int64_t minOutgoingBitrate{ 0 };
404
411
  // For SCTP capable transports and for direct transport.
405
- size_t maxSendMessageSize{ 0u };
406
- size_t maxReceiveMessageSize{ 0u };
412
+ size_t maxSendMessageSize{ 0 };
413
+ size_t maxReceiveMessageSize{ 0 };
407
414
  struct TraceEventTypes traceEventTypes;
408
415
  };
409
416
  } // namespace RTC
@@ -18,8 +18,6 @@
18
18
 
19
19
  namespace RTC
20
20
  {
21
- constexpr uint32_t TransportCongestionControlMinOutgoingBitrate{ 30000u };
22
-
23
21
  class TransportCongestionControlClient : public webrtc::PacketRouter,
24
22
  public webrtc::TargetTransferRateObserver,
25
23
  public TimerHandleInterface::Listener
@@ -27,13 +25,13 @@ namespace RTC
27
25
  public:
28
26
  struct Bitrates
29
27
  {
30
- uint32_t desiredBitrate{ 0u };
31
- uint32_t effectiveDesiredBitrate{ 0u };
32
- uint32_t minBitrate{ 0u };
33
- uint32_t maxBitrate{ 0u };
34
- uint32_t startBitrate{ 0u };
35
- uint32_t maxPaddingBitrate{ 0u };
36
- uint32_t availableBitrate{ 0u };
28
+ int64_t desiredBitrate{ 0 };
29
+ int64_t effectiveDesiredBitrate{ 0 };
30
+ int64_t minBitrate{ 0 };
31
+ int64_t maxBitrate{ 0 };
32
+ int64_t startBitrate{ 0 };
33
+ int64_t maxPaddingBitrate{ 0 };
34
+ int64_t availableBitrate{ 0 };
37
35
  };
38
36
 
39
37
  public:
@@ -53,13 +51,18 @@ namespace RTC
53
51
  };
54
52
 
55
53
  public:
54
+ /**
55
+ * @param absoluteMinOutgoingBitrate - Bitrate the target is never taken
56
+ * below (bps), whatever the API asks for.
57
+ */
56
58
  TransportCongestionControlClient(
57
59
  RTC::TransportCongestionControlClient::Listener* listener,
58
60
  SharedInterface* shared,
59
61
  RTC::BweType bweType,
60
- uint32_t initialAvailableBitrate,
61
- uint32_t maxOutgoingBitrate,
62
- uint32_t minOutgoingBitrate);
62
+ int64_t absoluteMinOutgoingBitrate,
63
+ int64_t initialAvailableBitrate,
64
+ int64_t maxOutgoingBitrate,
65
+ int64_t minOutgoingBitrate);
63
66
  ~TransportCongestionControlClient() override;
64
67
 
65
68
  public:
@@ -71,23 +74,24 @@ namespace RTC
71
74
  void TransportDisconnected();
72
75
  void InsertPacket(webrtc::RtpPacketSendInfo& packetInfo);
73
76
  webrtc::PacedPacketInfo GetPacingInfo();
74
- void PacketSent(const webrtc::RtpPacketSendInfo& packetInfo, int64_t nowMs);
75
- void ReceiveEstimatedBitrate(uint32_t bitrate);
76
- void ReceiveRtcpReceiverReport(RTC::RTCP::ReceiverReportPacket* packet, float rtt, int64_t nowMs);
77
+ void PacketSent(const webrtc::RtpPacketSendInfo& packetInfo, int64_t nowUs);
78
+ void ReceiveEstimatedBitrate(int64_t bitrate);
79
+ void ReceiveRtcpReceiverReport(
80
+ RTC::RTCP::ReceiverReportPacket* packet, float rttMs, int64_t receivedAtUs);
77
81
  void ReceiveRtcpTransportFeedback(const RTC::RTCP::FeedbackRtpTransportPacket* feedback);
78
- void SetDesiredBitrate(uint32_t desiredBitrate, bool force);
79
- void SetMaxOutgoingBitrate(uint32_t maxBitrate);
80
- void SetMinOutgoingBitrate(uint32_t minBitrate);
82
+ void SetDesiredBitrate(int64_t desiredBitrate, bool force);
83
+ void SetMaxOutgoingBitrate(int64_t maxBitrate);
84
+ void SetMinOutgoingBitrate(int64_t minBitrate);
81
85
  const Bitrates& GetBitrates() const
82
86
  {
83
87
  return this->bitrates;
84
88
  }
85
- uint32_t GetAvailableBitrate() const;
89
+ int64_t GetAvailableBitrate() const;
86
90
  double GetPacketLoss() const;
87
91
  void RescheduleNextAvailableBitrateEvent();
88
92
 
89
93
  private:
90
- void MayEmitAvailableBitrateEvent(uint32_t previousAvailableBitrate);
94
+ void MayEmitAvailableBitrateEvent(int64_t previousAvailableBitrate);
91
95
  void UpdatePacketLoss(double packetLoss);
92
96
  void ApplyBitrateUpdates();
93
97
 
@@ -120,13 +124,14 @@ namespace RTC
120
124
  RTC::RTP::ProbationGenerator* probationGenerator{ nullptr };
121
125
  TimerHandleInterface* processTimer{ nullptr };
122
126
  // Others.
123
- RTC::BweType bweType;
124
- uint32_t initialAvailableBitrate{ 0u };
125
- uint32_t maxOutgoingBitrate{ 0u };
126
- uint32_t minOutgoingBitrate{ 0u };
127
+ const RTC::BweType bweType;
128
+ const int64_t absoluteMinOutgoingBitrate;
129
+ const int64_t initialAvailableBitrate;
130
+ int64_t maxOutgoingBitrate{ 0 };
131
+ int64_t minOutgoingBitrate{ 0 };
127
132
  Bitrates bitrates;
128
133
  bool availableBitrateEventCalled{ false };
129
- uint64_t lastAvailableBitrateEventAtMs{ 0u };
134
+ int64_t lastAvailableBitrateEventAtMs{ 0 };
130
135
  RTC::TrendCalculator desiredBitrateTrend;
131
136
  std::deque<double> packetLossHistory;
132
137
  double packetLoss{ 0 };
@@ -43,7 +43,7 @@ namespace RTC
43
43
  }
44
44
  void TransportConnected();
45
45
  void TransportDisconnected();
46
- uint32_t GetAvailableBitrate() const
46
+ int64_t GetAvailableBitrate() const
47
47
  {
48
48
  switch (this->bweType)
49
49
  {
@@ -51,19 +51,19 @@ namespace RTC
51
51
  return this->rembServer->GetAvailableBitrate();
52
52
 
53
53
  default:
54
- return 0u;
54
+ return 0;
55
55
  }
56
56
  }
57
57
  double GetPacketLoss() const;
58
- void IncomingPacket(uint64_t nowMs, const RTC::RTP::Packet* packet);
59
- void SetMaxIncomingBitrate(uint32_t bitrate);
58
+ void IncomingPacket(int64_t nowUs, const RTC::RTP::Packet* packet);
59
+ void SetMaxIncomingBitrate(int64_t bitrate);
60
60
  void FillAndSendTransportCcFeedback();
61
61
 
62
62
  private:
63
63
  // Returns true if a feedback packet was sent.
64
64
  bool SendTransportCcFeedback();
65
- void MayDropOldPacketArrivalTimes(uint16_t seqNum, uint64_t nowMs);
66
- void MaySendLimitationRembFeedback(uint64_t nowMs);
65
+ void MayDropOldPacketArrivalTimes(uint16_t seqNum, int64_t nowUs);
66
+ void MaySendLimitationRembFeedback(int64_t nowMs);
67
67
  void UpdatePacketLoss(double packetLoss);
68
68
  void ResetTransportCcFeedback(uint8_t feedbackPacketCount);
69
69
 
@@ -72,7 +72,7 @@ namespace RTC
72
72
  void OnRembServerAvailableBitrate(
73
73
  const webrtc::RemoteBitrateEstimator* remoteBitrateEstimator,
74
74
  const std::vector<uint32_t>& ssrcs,
75
- uint32_t availableBitrate) override;
75
+ int64_t availableBitrate) override;
76
76
 
77
77
  /* Pure virtual methods inherited from TimerHandleInterface::Listener. */
78
78
  public:
@@ -88,20 +88,20 @@ namespace RTC
88
88
  webrtc::RemoteBitrateEstimatorAbsSendTime* rembServer{ nullptr };
89
89
  // Others.
90
90
  RTC::BweType bweType;
91
- size_t maxRtcpPacketLen{ 0u };
92
- uint8_t transportCcFeedbackPacketCount{ 0u };
93
- uint32_t transportCcFeedbackSenderSsrc{ 0u };
94
- uint32_t transportCcFeedbackMediaSsrc{ 0u };
95
- uint32_t maxIncomingBitrate{ 0u };
96
- uint64_t limitationRembSentAtMs{ 0u };
97
- uint8_t unlimitedRembCounter{ 0u };
91
+ size_t maxRtcpPacketLen{ 0 };
92
+ uint8_t transportCcFeedbackPacketCount{ 0 };
93
+ uint32_t transportCcFeedbackSenderSsrc{ 0 };
94
+ uint32_t transportCcFeedbackMediaSsrc{ 0 };
95
+ int64_t maxIncomingBitrate{ 0 };
96
+ int64_t limitationRembSentAtMs{ 0 };
97
+ uint8_t unlimitedRembCounter{ 0 };
98
98
  std::deque<double> packetLossHistory;
99
99
  double packetLoss{ 0 };
100
100
  // Whether any packet with transport wide sequence number was received.
101
101
  bool transportWideSeqNumberReceived{ false };
102
- uint16_t transportCcFeedbackWideSeqNumStart{ 0u };
103
- // Map of arrival timestamp (ms) indexed by wide seq number.
104
- std::map<uint16_t, uint64_t, RTC::SeqManager<uint16_t>::SeqLowerThan> mapPacketArrivalTimes;
102
+ uint16_t transportCcFeedbackWideSeqNumStart{ 0 };
103
+ // Map of arrival timestamp (us) indexed by wide seq number.
104
+ std::map<uint16_t, int64_t, RTC::SeqManager<uint16_t>::SeqLowerThan> mapPacketArrivalTimes;
105
105
  };
106
106
  } // namespace RTC
107
107
 
@@ -18,14 +18,14 @@ namespace RTC
18
18
  {
19
19
  return this->value;
20
20
  }
21
- void Update(uint32_t value, uint64_t nowMs);
22
- void ForceUpdate(uint32_t value, uint64_t nowMs);
21
+ void Update(uint32_t value, int64_t nowMs);
22
+ void ForceUpdate(uint32_t value, int64_t nowMs);
23
23
 
24
24
  private:
25
25
  float decreaseFactor{ DecreaseFactor };
26
- uint32_t value{ 0u };
27
- uint32_t highestValue{ 0u };
28
- uint64_t highestValueUpdatedAtMs{ 0u };
26
+ uint32_t value{ 0 };
27
+ uint32_t highestValue{ 0 };
28
+ int64_t highestValueUpdatedAtMs{ 0 };
29
29
  };
30
30
  } // namespace RTC
31
31
 
@@ -5,6 +5,7 @@
5
5
  #include "handles/UdpSocketHandle.hpp"
6
6
  #include "RTC/PortManager.hpp"
7
7
  #include "RTC/Transport.hpp"
8
+ #include "SharedInterface.hpp"
8
9
  #include <string>
9
10
 
10
11
  namespace RTC
@@ -23,13 +24,20 @@ namespace RTC
23
24
  const uint8_t* data,
24
25
  size_t len,
25
26
  size_t bufferLen,
26
- const struct sockaddr* remoteAddr) = 0;
27
+ const struct sockaddr* remoteAddr,
28
+ int64_t receivedAtUs) = 0;
27
29
  };
28
30
 
29
31
  public:
30
- UdpSocket(Listener* listener, std::string& ip, uint16_t port, RTC::Transport::SocketFlags& flags);
31
32
  UdpSocket(
32
33
  Listener* listener,
34
+ SharedInterface* shared,
35
+ std::string& ip,
36
+ uint16_t port,
37
+ RTC::Transport::SocketFlags& flags);
38
+ UdpSocket(
39
+ Listener* listener,
40
+ SharedInterface* shared,
33
41
  std::string& ip,
34
42
  uint16_t minPort,
35
43
  uint16_t maxPort,
@@ -45,6 +53,7 @@ namespace RTC
45
53
  private:
46
54
  // Passed by argument.
47
55
  Listener* listener{ nullptr };
56
+ SharedInterface* shared{ nullptr };
48
57
  bool fixedPort{ false };
49
58
  RTC::PortManager::PortRangeKey portRangeKey{};
50
59
  };
@@ -68,10 +68,20 @@ namespace RTC
68
68
  void HandleRequest(Channel::ChannelRequest* request) override;
69
69
 
70
70
  private:
71
- void OnPacketReceived(RTC::TransportTuple* tuple, const uint8_t* data, size_t len, size_t bufferLen);
72
- void OnStunDataReceived(RTC::TransportTuple* tuple, const uint8_t* data, size_t len);
71
+ void OnPacketReceived(
72
+ RTC::TransportTuple* tuple,
73
+ const uint8_t* data,
74
+ size_t len,
75
+ size_t bufferLen,
76
+ int64_t receivedAtUs);
77
+ void OnStunDataReceived(
78
+ RTC::TransportTuple* tuple, const uint8_t* data, size_t len, int64_t receivedAtUs);
73
79
  void OnNonStunDataReceived(
74
- RTC::TransportTuple* tuple, const uint8_t* data, size_t len, size_t bufferLen);
80
+ RTC::TransportTuple* tuple,
81
+ const uint8_t* data,
82
+ size_t len,
83
+ size_t bufferLen,
84
+ int64_t receivedAtUs);
75
85
 
76
86
  /* Pure virtual methods inherited from RTC::WebRtcTransport::WebRtcTransportListener. */
77
87
  public:
@@ -93,7 +103,8 @@ namespace RTC
93
103
  const uint8_t* data,
94
104
  size_t len,
95
105
  size_t bufferLen,
96
- const struct sockaddr* remoteAddr) override;
106
+ const struct sockaddr* remoteAddr,
107
+ int64_t receivedAtUs) override;
97
108
 
98
109
  /* Pure virtual methods inherited from RTC::TcpServer::Listener. */
99
110
  public:
@@ -102,7 +113,11 @@ namespace RTC
102
113
  /* Pure virtual methods inherited from RTC::TcpConnection::Listener. */
103
114
  public:
104
115
  void OnTcpConnectionPacketReceived(
105
- RTC::TcpConnection* connection, const uint8_t* data, size_t len, size_t bufferLen) override;
116
+ RTC::TcpConnection* connection,
117
+ const uint8_t* data,
118
+ size_t len,
119
+ size_t bufferLen,
120
+ int64_t receivedAtUs) override;
106
121
  const std::string& GetId() const
107
122
  {
108
123
  return this->id;