@abrar71/lib-jitsi-meet 0.0.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 (350) hide show
  1. package/LICENSE +202 -0
  2. package/README.md +26 -0
  3. package/dist/esm/JitsiConference.js +3692 -0
  4. package/dist/esm/JitsiConference.js.map +1 -0
  5. package/dist/esm/JitsiConferenceErrors.js +126 -0
  6. package/dist/esm/JitsiConferenceErrors.js.map +1 -0
  7. package/dist/esm/JitsiConferenceEventManager.js +424 -0
  8. package/dist/esm/JitsiConferenceEventManager.js.map +1 -0
  9. package/dist/esm/JitsiConferenceEvents.js +431 -0
  10. package/dist/esm/JitsiConferenceEvents.js.map +1 -0
  11. package/dist/esm/JitsiConnection.js +187 -0
  12. package/dist/esm/JitsiConnection.js.map +1 -0
  13. package/dist/esm/JitsiConnectionErrors.js +52 -0
  14. package/dist/esm/JitsiConnectionErrors.js.map +1 -0
  15. package/dist/esm/JitsiConnectionEvents.js +57 -0
  16. package/dist/esm/JitsiConnectionEvents.js.map +1 -0
  17. package/dist/esm/JitsiMediaDevices.js +221 -0
  18. package/dist/esm/JitsiMediaDevices.js.map +1 -0
  19. package/dist/esm/JitsiMediaDevicesEvents.js +29 -0
  20. package/dist/esm/JitsiMediaDevicesEvents.js.map +1 -0
  21. package/dist/esm/JitsiMeetJS.js +499 -0
  22. package/dist/esm/JitsiMeetJS.js.map +1 -0
  23. package/dist/esm/JitsiParticipant.js +323 -0
  24. package/dist/esm/JitsiParticipant.js.map +1 -0
  25. package/dist/esm/JitsiTrackError.js +122 -0
  26. package/dist/esm/JitsiTrackError.js.map +1 -0
  27. package/dist/esm/JitsiTrackErrors.js +91 -0
  28. package/dist/esm/JitsiTrackErrors.js.map +1 -0
  29. package/dist/esm/JitsiTrackEvents.js +60 -0
  30. package/dist/esm/JitsiTrackEvents.js.map +1 -0
  31. package/dist/esm/JitsiTranscriptionStatus.js +15 -0
  32. package/dist/esm/JitsiTranscriptionStatus.js.map +1 -0
  33. package/dist/esm/modules/RTC/BridgeChannel.js +398 -0
  34. package/dist/esm/modules/RTC/BridgeChannel.js.map +1 -0
  35. package/dist/esm/modules/RTC/JitsiLocalTrack.js +896 -0
  36. package/dist/esm/modules/RTC/JitsiLocalTrack.js.map +1 -0
  37. package/dist/esm/modules/RTC/JitsiRemoteTrack.js +427 -0
  38. package/dist/esm/modules/RTC/JitsiRemoteTrack.js.map +1 -0
  39. package/dist/esm/modules/RTC/JitsiTrack.js +453 -0
  40. package/dist/esm/modules/RTC/JitsiTrack.js.map +1 -0
  41. package/dist/esm/modules/RTC/MockClasses.js +388 -0
  42. package/dist/esm/modules/RTC/MockClasses.js.map +1 -0
  43. package/dist/esm/modules/RTC/RTC.js +658 -0
  44. package/dist/esm/modules/RTC/RTC.js.map +1 -0
  45. package/dist/esm/modules/RTC/RTCUtils.js +762 -0
  46. package/dist/esm/modules/RTC/RTCUtils.js.map +1 -0
  47. package/dist/esm/modules/RTC/ScreenObtainer.js +380 -0
  48. package/dist/esm/modules/RTC/ScreenObtainer.js.map +1 -0
  49. package/dist/esm/modules/RTC/TPCUtils.js +803 -0
  50. package/dist/esm/modules/RTC/TPCUtils.js.map +1 -0
  51. package/dist/esm/modules/RTC/TraceablePeerConnection.js +2223 -0
  52. package/dist/esm/modules/RTC/TraceablePeerConnection.js.map +1 -0
  53. package/dist/esm/modules/RTCStats/DefaulLogStorage.js +35 -0
  54. package/dist/esm/modules/RTCStats/DefaulLogStorage.js.map +1 -0
  55. package/dist/esm/modules/RTCStats/RTCStats.js +219 -0
  56. package/dist/esm/modules/RTCStats/RTCStats.js.map +1 -0
  57. package/dist/esm/modules/RTCStats/RTCStatsEvents.js +92 -0
  58. package/dist/esm/modules/RTCStats/RTCStatsEvents.js.map +1 -0
  59. package/dist/esm/modules/RTCStats/interfaces.js +2 -0
  60. package/dist/esm/modules/RTCStats/interfaces.js.map +1 -0
  61. package/dist/esm/modules/browser/BrowserCapabilities.js +345 -0
  62. package/dist/esm/modules/browser/BrowserCapabilities.js.map +1 -0
  63. package/dist/esm/modules/browser/index.js +3 -0
  64. package/dist/esm/modules/browser/index.js.map +1 -0
  65. package/dist/esm/modules/connectivity/ConnectionQuality.js +389 -0
  66. package/dist/esm/modules/connectivity/ConnectionQuality.js.map +1 -0
  67. package/dist/esm/modules/connectivity/IceFailedHandling.js +84 -0
  68. package/dist/esm/modules/connectivity/IceFailedHandling.js.map +1 -0
  69. package/dist/esm/modules/connectivity/NetworkInfo.js +49 -0
  70. package/dist/esm/modules/connectivity/NetworkInfo.js.map +1 -0
  71. package/dist/esm/modules/connectivity/TrackStreamingStatus.js +453 -0
  72. package/dist/esm/modules/connectivity/TrackStreamingStatus.js.map +1 -0
  73. package/dist/esm/modules/detection/ActiveDeviceDetector.js +79 -0
  74. package/dist/esm/modules/detection/ActiveDeviceDetector.js.map +1 -0
  75. package/dist/esm/modules/detection/DetectionEvents.js +58 -0
  76. package/dist/esm/modules/detection/DetectionEvents.js.map +1 -0
  77. package/dist/esm/modules/detection/NoAudioSignalDetection.js +127 -0
  78. package/dist/esm/modules/detection/NoAudioSignalDetection.js.map +1 -0
  79. package/dist/esm/modules/detection/P2PDominantSpeakerDetection.js +47 -0
  80. package/dist/esm/modules/detection/P2PDominantSpeakerDetection.js.map +1 -0
  81. package/dist/esm/modules/detection/TrackVADEmitter.js +190 -0
  82. package/dist/esm/modules/detection/TrackVADEmitter.js.map +1 -0
  83. package/dist/esm/modules/detection/VADAudioAnalyser.js +199 -0
  84. package/dist/esm/modules/detection/VADAudioAnalyser.js.map +1 -0
  85. package/dist/esm/modules/detection/VADNoiseDetection.js +168 -0
  86. package/dist/esm/modules/detection/VADNoiseDetection.js.map +1 -0
  87. package/dist/esm/modules/detection/VADReportingService.js +203 -0
  88. package/dist/esm/modules/detection/VADReportingService.js.map +1 -0
  89. package/dist/esm/modules/detection/VADTalkMutedDetection.js +131 -0
  90. package/dist/esm/modules/detection/VADTalkMutedDetection.js.map +1 -0
  91. package/dist/esm/modules/e2ee/Context.js +274 -0
  92. package/dist/esm/modules/e2ee/Context.js.map +1 -0
  93. package/dist/esm/modules/e2ee/E2EEContext.js +158 -0
  94. package/dist/esm/modules/e2ee/E2EEContext.js.map +1 -0
  95. package/dist/esm/modules/e2ee/E2EEErrors.js +10 -0
  96. package/dist/esm/modules/e2ee/E2EEErrors.js.map +1 -0
  97. package/dist/esm/modules/e2ee/E2EEncryption.js +87 -0
  98. package/dist/esm/modules/e2ee/E2EEncryption.js.map +1 -0
  99. package/dist/esm/modules/e2ee/ExternallyManagedKeyHandler.js +24 -0
  100. package/dist/esm/modules/e2ee/ExternallyManagedKeyHandler.js.map +1 -0
  101. package/dist/esm/modules/e2ee/KeyHandler.js +137 -0
  102. package/dist/esm/modules/e2ee/KeyHandler.js.map +1 -0
  103. package/dist/esm/modules/e2ee/ManagedKeyHandler.js +182 -0
  104. package/dist/esm/modules/e2ee/ManagedKeyHandler.js.map +1 -0
  105. package/dist/esm/modules/e2ee/OlmAdapter.js +860 -0
  106. package/dist/esm/modules/e2ee/OlmAdapter.js.map +1 -0
  107. package/dist/esm/modules/e2ee/SAS.js +128 -0
  108. package/dist/esm/modules/e2ee/SAS.js.map +1 -0
  109. package/dist/esm/modules/e2ee/Worker.js +102 -0
  110. package/dist/esm/modules/e2ee/Worker.js.map +1 -0
  111. package/dist/esm/modules/e2ee/crypto-utils.js +53 -0
  112. package/dist/esm/modules/e2ee/crypto-utils.js.map +1 -0
  113. package/dist/esm/modules/e2ee/utils.js +15 -0
  114. package/dist/esm/modules/e2ee/utils.js.map +1 -0
  115. package/dist/esm/modules/e2eping/e2eping.js +314 -0
  116. package/dist/esm/modules/e2eping/e2eping.js.map +1 -0
  117. package/dist/esm/modules/flags/FeatureFlags.js +36 -0
  118. package/dist/esm/modules/flags/FeatureFlags.js.map +1 -0
  119. package/dist/esm/modules/litemode/LiteModeContext.js +50 -0
  120. package/dist/esm/modules/litemode/LiteModeContext.js.map +1 -0
  121. package/dist/esm/modules/proxyconnection/CustomSignalingLayer.js +98 -0
  122. package/dist/esm/modules/proxyconnection/CustomSignalingLayer.js.map +1 -0
  123. package/dist/esm/modules/proxyconnection/ProxyConnectionPC.js +348 -0
  124. package/dist/esm/modules/proxyconnection/ProxyConnectionPC.js.map +1 -0
  125. package/dist/esm/modules/proxyconnection/ProxyConnectionService.js +279 -0
  126. package/dist/esm/modules/proxyconnection/ProxyConnectionService.js.map +1 -0
  127. package/dist/esm/modules/proxyconnection/constants.js +14 -0
  128. package/dist/esm/modules/proxyconnection/constants.js.map +1 -0
  129. package/dist/esm/modules/qualitycontrol/CodecSelection.js +222 -0
  130. package/dist/esm/modules/qualitycontrol/CodecSelection.js.map +1 -0
  131. package/dist/esm/modules/qualitycontrol/MockClasses.js +120 -0
  132. package/dist/esm/modules/qualitycontrol/MockClasses.js.map +1 -0
  133. package/dist/esm/modules/qualitycontrol/QualityController.js +366 -0
  134. package/dist/esm/modules/qualitycontrol/QualityController.js.map +1 -0
  135. package/dist/esm/modules/qualitycontrol/ReceiveAudioController.js +73 -0
  136. package/dist/esm/modules/qualitycontrol/ReceiveAudioController.js.map +1 -0
  137. package/dist/esm/modules/qualitycontrol/ReceiveVideoController.js +216 -0
  138. package/dist/esm/modules/qualitycontrol/ReceiveVideoController.js.map +1 -0
  139. package/dist/esm/modules/qualitycontrol/SendVideoController.js +133 -0
  140. package/dist/esm/modules/qualitycontrol/SendVideoController.js.map +1 -0
  141. package/dist/esm/modules/recording/JibriSession.js +279 -0
  142. package/dist/esm/modules/recording/JibriSession.js.map +1 -0
  143. package/dist/esm/modules/recording/RecordingManager.js +257 -0
  144. package/dist/esm/modules/recording/RecordingManager.js.map +1 -0
  145. package/dist/esm/modules/recording/recordingConstants.js +21 -0
  146. package/dist/esm/modules/recording/recordingConstants.js.map +1 -0
  147. package/dist/esm/modules/recording/recordingXMLUtils.js +69 -0
  148. package/dist/esm/modules/recording/recordingXMLUtils.js.map +1 -0
  149. package/dist/esm/modules/red/red.js +108 -0
  150. package/dist/esm/modules/red/red.js.map +1 -0
  151. package/dist/esm/modules/sdp/LocalSdpMunger.js +143 -0
  152. package/dist/esm/modules/sdp/LocalSdpMunger.js.map +1 -0
  153. package/dist/esm/modules/sdp/RtxModifier.js +179 -0
  154. package/dist/esm/modules/sdp/RtxModifier.js.map +1 -0
  155. package/dist/esm/modules/sdp/SDP.js +848 -0
  156. package/dist/esm/modules/sdp/SDP.js.map +1 -0
  157. package/dist/esm/modules/sdp/SDPDiffer.js +96 -0
  158. package/dist/esm/modules/sdp/SDPDiffer.js.map +1 -0
  159. package/dist/esm/modules/sdp/SDPUtil.js +798 -0
  160. package/dist/esm/modules/sdp/SDPUtil.js.map +1 -0
  161. package/dist/esm/modules/sdp/SampleSdpStrings.js +589 -0
  162. package/dist/esm/modules/sdp/SampleSdpStrings.js.map +1 -0
  163. package/dist/esm/modules/sdp/SdpSimulcast.js +196 -0
  164. package/dist/esm/modules/sdp/SdpSimulcast.js.map +1 -0
  165. package/dist/esm/modules/sdp/SdpTransformUtil.js +337 -0
  166. package/dist/esm/modules/sdp/SdpTransformUtil.js.map +1 -0
  167. package/dist/esm/modules/sdp/constants.js +2 -0
  168. package/dist/esm/modules/sdp/constants.js.map +1 -0
  169. package/dist/esm/modules/settings/Settings.js +95 -0
  170. package/dist/esm/modules/settings/Settings.js.map +1 -0
  171. package/dist/esm/modules/statistics/AnalyticsAdapter.js +277 -0
  172. package/dist/esm/modules/statistics/AnalyticsAdapter.js.map +1 -0
  173. package/dist/esm/modules/statistics/AvgRTPStatsReporter.js +817 -0
  174. package/dist/esm/modules/statistics/AvgRTPStatsReporter.js.map +1 -0
  175. package/dist/esm/modules/statistics/LocalStatsCollector.js +149 -0
  176. package/dist/esm/modules/statistics/LocalStatsCollector.js.map +1 -0
  177. package/dist/esm/modules/statistics/PreCallTest.js +15 -0
  178. package/dist/esm/modules/statistics/PreCallTest.js.map +1 -0
  179. package/dist/esm/modules/statistics/RTPStatsCollector.js +601 -0
  180. package/dist/esm/modules/statistics/RTPStatsCollector.js.map +1 -0
  181. package/dist/esm/modules/statistics/SpeakerStats.js +163 -0
  182. package/dist/esm/modules/statistics/SpeakerStats.js.map +1 -0
  183. package/dist/esm/modules/statistics/SpeakerStatsCollector.js +161 -0
  184. package/dist/esm/modules/statistics/SpeakerStatsCollector.js.map +1 -0
  185. package/dist/esm/modules/statistics/constants.js +7 -0
  186. package/dist/esm/modules/statistics/constants.js.map +1 -0
  187. package/dist/esm/modules/statistics/statistics.js +362 -0
  188. package/dist/esm/modules/statistics/statistics.js.map +1 -0
  189. package/dist/esm/modules/util/AsyncQueue.js +102 -0
  190. package/dist/esm/modules/util/AsyncQueue.js.map +1 -0
  191. package/dist/esm/modules/util/Deferred.js +41 -0
  192. package/dist/esm/modules/util/Deferred.js.map +1 -0
  193. package/dist/esm/modules/util/EventEmitter.js +17 -0
  194. package/dist/esm/modules/util/EventEmitter.js.map +1 -0
  195. package/dist/esm/modules/util/EventEmitterForwarder.js +52 -0
  196. package/dist/esm/modules/util/EventEmitterForwarder.js.map +1 -0
  197. package/dist/esm/modules/util/Listenable.js +106 -0
  198. package/dist/esm/modules/util/Listenable.js.map +1 -0
  199. package/dist/esm/modules/util/MathUtil.js +103 -0
  200. package/dist/esm/modules/util/MathUtil.js.map +1 -0
  201. package/dist/esm/modules/util/RandomUtil.js +66 -0
  202. package/dist/esm/modules/util/RandomUtil.js.map +1 -0
  203. package/dist/esm/modules/util/Retry.js +15 -0
  204. package/dist/esm/modules/util/Retry.js.map +1 -0
  205. package/dist/esm/modules/util/ScriptUtil.js +58 -0
  206. package/dist/esm/modules/util/ScriptUtil.js.map +1 -0
  207. package/dist/esm/modules/util/StringUtils.js +21 -0
  208. package/dist/esm/modules/util/StringUtils.js.map +1 -0
  209. package/dist/esm/modules/util/TestUtils.js +14 -0
  210. package/dist/esm/modules/util/TestUtils.js.map +1 -0
  211. package/dist/esm/modules/util/UsernameGenerator.js +436 -0
  212. package/dist/esm/modules/util/UsernameGenerator.js.map +1 -0
  213. package/dist/esm/modules/util/XMLUtils.js +135 -0
  214. package/dist/esm/modules/util/XMLUtils.js.map +1 -0
  215. package/dist/esm/modules/version/ComponentsVersions.js +52 -0
  216. package/dist/esm/modules/version/ComponentsVersions.js.map +1 -0
  217. package/dist/esm/modules/videosipgw/JitsiVideoSIPGWSession.js +137 -0
  218. package/dist/esm/modules/videosipgw/JitsiVideoSIPGWSession.js.map +1 -0
  219. package/dist/esm/modules/videosipgw/VideoSIPGW.js +102 -0
  220. package/dist/esm/modules/videosipgw/VideoSIPGW.js.map +1 -0
  221. package/dist/esm/modules/videosipgw/VideoSIPGWConstants.js +65 -0
  222. package/dist/esm/modules/videosipgw/VideoSIPGWConstants.js.map +1 -0
  223. package/dist/esm/modules/watchRTC/WatchRTC.js +69 -0
  224. package/dist/esm/modules/watchRTC/WatchRTC.js.map +1 -0
  225. package/dist/esm/modules/watchRTC/functions.js +31 -0
  226. package/dist/esm/modules/watchRTC/functions.js.map +1 -0
  227. package/dist/esm/modules/watchRTC/interfaces.js +2 -0
  228. package/dist/esm/modules/watchRTC/interfaces.js.map +1 -0
  229. package/dist/esm/modules/webaudio/AudioMixer.js +74 -0
  230. package/dist/esm/modules/webaudio/AudioMixer.js.map +1 -0
  231. package/dist/esm/modules/webaudio/WebAudioUtils.js +13 -0
  232. package/dist/esm/modules/webaudio/WebAudioUtils.js.map +1 -0
  233. package/dist/esm/modules/xmpp/AVModeration.js +156 -0
  234. package/dist/esm/modules/xmpp/AVModeration.js.map +1 -0
  235. package/dist/esm/modules/xmpp/BreakoutRooms.js +230 -0
  236. package/dist/esm/modules/xmpp/BreakoutRooms.js.map +1 -0
  237. package/dist/esm/modules/xmpp/Caps.js +223 -0
  238. package/dist/esm/modules/xmpp/Caps.js.map +1 -0
  239. package/dist/esm/modules/xmpp/ChatRoom.js +1877 -0
  240. package/dist/esm/modules/xmpp/ChatRoom.js.map +1 -0
  241. package/dist/esm/modules/xmpp/ConnectionPlugin.js +37 -0
  242. package/dist/esm/modules/xmpp/ConnectionPlugin.js.map +1 -0
  243. package/dist/esm/modules/xmpp/FileSharing.js +95 -0
  244. package/dist/esm/modules/xmpp/FileSharing.js.map +1 -0
  245. package/dist/esm/modules/xmpp/JingleHelperFunctions.js +168 -0
  246. package/dist/esm/modules/xmpp/JingleHelperFunctions.js.map +1 -0
  247. package/dist/esm/modules/xmpp/JingleSession.js +166 -0
  248. package/dist/esm/modules/xmpp/JingleSession.js.map +1 -0
  249. package/dist/esm/modules/xmpp/JingleSessionPC.js +1969 -0
  250. package/dist/esm/modules/xmpp/JingleSessionPC.js.map +1 -0
  251. package/dist/esm/modules/xmpp/JingleSessionState.js +23 -0
  252. package/dist/esm/modules/xmpp/JingleSessionState.js.map +1 -0
  253. package/dist/esm/modules/xmpp/Lobby.js +384 -0
  254. package/dist/esm/modules/xmpp/Lobby.js.map +1 -0
  255. package/dist/esm/modules/xmpp/MediaSessionEvents.js +12 -0
  256. package/dist/esm/modules/xmpp/MediaSessionEvents.js.map +1 -0
  257. package/dist/esm/modules/xmpp/MockClasses.js +77 -0
  258. package/dist/esm/modules/xmpp/MockClasses.js.map +1 -0
  259. package/dist/esm/modules/xmpp/Polls.js +87 -0
  260. package/dist/esm/modules/xmpp/Polls.js.map +1 -0
  261. package/dist/esm/modules/xmpp/ResumeTask.js +149 -0
  262. package/dist/esm/modules/xmpp/ResumeTask.js.map +1 -0
  263. package/dist/esm/modules/xmpp/RoomMetadata.js +96 -0
  264. package/dist/esm/modules/xmpp/RoomMetadata.js.map +1 -0
  265. package/dist/esm/modules/xmpp/SignalingLayerImpl.js +313 -0
  266. package/dist/esm/modules/xmpp/SignalingLayerImpl.js.map +1 -0
  267. package/dist/esm/modules/xmpp/StropheErrorHandler.js +53 -0
  268. package/dist/esm/modules/xmpp/StropheErrorHandler.js.map +1 -0
  269. package/dist/esm/modules/xmpp/StropheLastSuccess.js +52 -0
  270. package/dist/esm/modules/xmpp/StropheLastSuccess.js.map +1 -0
  271. package/dist/esm/modules/xmpp/XmppConnection.js +579 -0
  272. package/dist/esm/modules/xmpp/XmppConnection.js.map +1 -0
  273. package/dist/esm/modules/xmpp/moderator.js +524 -0
  274. package/dist/esm/modules/xmpp/moderator.js.map +1 -0
  275. package/dist/esm/modules/xmpp/sha1.js +165 -0
  276. package/dist/esm/modules/xmpp/sha1.js.map +1 -0
  277. package/dist/esm/modules/xmpp/strophe.disco.js +222 -0
  278. package/dist/esm/modules/xmpp/strophe.disco.js.map +1 -0
  279. package/dist/esm/modules/xmpp/strophe.emuc.js +206 -0
  280. package/dist/esm/modules/xmpp/strophe.emuc.js.map +1 -0
  281. package/dist/esm/modules/xmpp/strophe.jingle.js +404 -0
  282. package/dist/esm/modules/xmpp/strophe.jingle.js.map +1 -0
  283. package/dist/esm/modules/xmpp/strophe.logger.js +44 -0
  284. package/dist/esm/modules/xmpp/strophe.logger.js.map +1 -0
  285. package/dist/esm/modules/xmpp/strophe.ping.js +170 -0
  286. package/dist/esm/modules/xmpp/strophe.ping.js.map +1 -0
  287. package/dist/esm/modules/xmpp/strophe.rayo.js +117 -0
  288. package/dist/esm/modules/xmpp/strophe.rayo.js.map +1 -0
  289. package/dist/esm/modules/xmpp/strophe.stream-management.js +365 -0
  290. package/dist/esm/modules/xmpp/strophe.stream-management.js.map +1 -0
  291. package/dist/esm/modules/xmpp/strophe.util.js +116 -0
  292. package/dist/esm/modules/xmpp/strophe.util.js.map +1 -0
  293. package/dist/esm/modules/xmpp/xmpp.js +973 -0
  294. package/dist/esm/modules/xmpp/xmpp.js.map +1 -0
  295. package/dist/esm/service/RTC/BridgeVideoType.js +24 -0
  296. package/dist/esm/service/RTC/BridgeVideoType.js.map +1 -0
  297. package/dist/esm/service/RTC/CameraFacingMode.js +21 -0
  298. package/dist/esm/service/RTC/CameraFacingMode.js.map +1 -0
  299. package/dist/esm/service/RTC/CodecMimeType.js +36 -0
  300. package/dist/esm/service/RTC/CodecMimeType.js.map +1 -0
  301. package/dist/esm/service/RTC/MediaDirection.js +23 -0
  302. package/dist/esm/service/RTC/MediaDirection.js.map +1 -0
  303. package/dist/esm/service/RTC/MediaType.js +20 -0
  304. package/dist/esm/service/RTC/MediaType.js.map +1 -0
  305. package/dist/esm/service/RTC/RTCEvents.js +111 -0
  306. package/dist/esm/service/RTC/RTCEvents.js.map +1 -0
  307. package/dist/esm/service/RTC/ReceiverAudioSubscription.js +27 -0
  308. package/dist/esm/service/RTC/ReceiverAudioSubscription.js.map +1 -0
  309. package/dist/esm/service/RTC/Resolutions.js +56 -0
  310. package/dist/esm/service/RTC/Resolutions.js.map +1 -0
  311. package/dist/esm/service/RTC/SignalingEvents.js +42 -0
  312. package/dist/esm/service/RTC/SignalingEvents.js.map +1 -0
  313. package/dist/esm/service/RTC/SignalingLayer.js +153 -0
  314. package/dist/esm/service/RTC/SignalingLayer.js.map +1 -0
  315. package/dist/esm/service/RTC/StandardVideoQualitySettings.js +180 -0
  316. package/dist/esm/service/RTC/StandardVideoQualitySettings.js.map +1 -0
  317. package/dist/esm/service/RTC/VideoEncoderScalabilityMode.js +36 -0
  318. package/dist/esm/service/RTC/VideoEncoderScalabilityMode.js.map +1 -0
  319. package/dist/esm/service/RTC/VideoType.js +19 -0
  320. package/dist/esm/service/RTC/VideoType.js.map +1 -0
  321. package/dist/esm/service/authentication/AuthenticationEvents.js +13 -0
  322. package/dist/esm/service/authentication/AuthenticationEvents.js.map +1 -0
  323. package/dist/esm/service/connectivity/ConnectionQualityEvents.js +13 -0
  324. package/dist/esm/service/connectivity/ConnectionQualityEvents.js.map +1 -0
  325. package/dist/esm/service/connectivity/Constants.js +3 -0
  326. package/dist/esm/service/connectivity/Constants.js.map +1 -0
  327. package/dist/esm/service/e2eping/E2ePingEvents.js +8 -0
  328. package/dist/esm/service/e2eping/E2ePingEvents.js.map +1 -0
  329. package/dist/esm/service/statistics/AnalyticsEvents.js +521 -0
  330. package/dist/esm/service/statistics/AnalyticsEvents.js.map +1 -0
  331. package/dist/esm/service/statistics/Events.js +36 -0
  332. package/dist/esm/service/statistics/Events.js.map +1 -0
  333. package/dist/esm/service/statistics/constants.js +2 -0
  334. package/dist/esm/service/statistics/constants.js.map +1 -0
  335. package/dist/esm/service/xmpp/XMPPEvents.js +359 -0
  336. package/dist/esm/service/xmpp/XMPPEvents.js.map +1 -0
  337. package/dist/esm/service/xmpp/XMPPExtensioProtocols.js +64 -0
  338. package/dist/esm/service/xmpp/XMPPExtensioProtocols.js.map +1 -0
  339. package/dist/esm/test-setup-polyfill.js +34 -0
  340. package/dist/esm/test-setup-polyfill.js.map +1 -0
  341. package/dist/esm/tools/gen-version.js +15 -0
  342. package/dist/esm/tools/gen-version.js.map +1 -0
  343. package/dist/esm/version.js +3 -0
  344. package/dist/esm/version.js.map +1 -0
  345. package/dist/umd/lib-jitsi-meet.e2ee-worker.js +484 -0
  346. package/dist/umd/lib-jitsi-meet.min.js +3 -0
  347. package/dist/umd/lib-jitsi-meet.min.js.LICENSE.txt +18 -0
  348. package/dist/umd/lib-jitsi-meet.min.map +1 -0
  349. package/package.json +93 -0
  350. package/types/index.d.ts +16180 -0
@@ -0,0 +1,366 @@
1
+ import { getLogger } from '@jitsi/logger';
2
+ import { JitsiConferenceEvents } from '../../JitsiConferenceEvents';
3
+ import { RTCEvents } from '../../service/RTC/RTCEvents';
4
+ import { DEFAULT_LAST_N, LAST_N_UNLIMITED, VIDEO_CODECS_BY_COMPLEXITY, VIDEO_QUALITY_LEVELS } from '../../service/RTC/StandardVideoQualitySettings';
5
+ import RTCStats from '../RTCStats/RTCStats';
6
+ import { RTCStatsEvents } from '../RTCStats/RTCStatsEvents';
7
+ import { isValidNumber } from '../util/MathUtil';
8
+ import { CodecSelection } from './CodecSelection';
9
+ import { ReceiverAudioController } from './ReceiveAudioController';
10
+ import ReceiveVideoController from './ReceiveVideoController';
11
+ import SendVideoController from './SendVideoController';
12
+ const logger = getLogger('qc:QualityController');
13
+ // Period for which the client will wait for the cpu limitation flag to be reset in the peerconnection stats before it
14
+ // attempts to rectify the situation by attempting a codec switch.
15
+ const LIMITED_BY_CPU_TIMEOUT = 60000;
16
+ // The min. value that lastN will be set to while trying to fix video qaulity issues.
17
+ const MIN_LAST_N = 3;
18
+ var QualityLimitationReason;
19
+ (function (QualityLimitationReason) {
20
+ QualityLimitationReason["BANDWIDTH"] = "bandwidth";
21
+ QualityLimitationReason["CPU"] = "cpu";
22
+ QualityLimitationReason["NONE"] = "none";
23
+ })(QualityLimitationReason || (QualityLimitationReason = {}));
24
+ /* eslint-disable require-jsdoc */
25
+ export class FixedSizeArray {
26
+ constructor(size) {
27
+ this._maxSize = size;
28
+ this._data = [];
29
+ }
30
+ add(item) {
31
+ if (this._data.length >= this._maxSize) {
32
+ this._data.shift();
33
+ }
34
+ this._data.push(item);
35
+ }
36
+ get(index) {
37
+ if (index < 0 || index >= this._data.length) {
38
+ throw new Error('Index out of bounds');
39
+ }
40
+ return this._data[index];
41
+ }
42
+ size() {
43
+ return this._data.length;
44
+ }
45
+ }
46
+ /* eslint-enable require-jsdoc */
47
+ /**
48
+ * QualityController class that is responsible for maintaining optimal video quality experience on the local endpoint
49
+ * by controlling the codec, encode resolution and receive resolution of the remote video streams. It also makes
50
+ * adjustments based on the outbound and inbound rtp stream stats reported by the underlying peer connection.
51
+ */
52
+ export class QualityController {
53
+ /**
54
+ *
55
+ * @param {JitsiConference} conference - The JitsiConference instance.
56
+ * @param {Object} options - video quality settings passed through config.js.
57
+ */
58
+ constructor(conference, options) {
59
+ this._audioController = new ReceiverAudioController(conference);
60
+ this._conference = conference;
61
+ const { jvb, p2p } = options;
62
+ this._codecController = new CodecSelection(conference, { jvb,
63
+ p2p });
64
+ this._enableAdaptiveMode = options.enableAdaptiveMode ?? true;
65
+ this._encodeTimeStats = new Map();
66
+ this._isLastNRampupBlocked = false;
67
+ this._lastNRampupTime = options.lastNRampupTime;
68
+ this._receiveVideoController = new ReceiveVideoController(conference);
69
+ this._sendVideoController = new SendVideoController(conference);
70
+ this._conference.on(JitsiConferenceEvents._MEDIA_SESSION_STARTED, (session) => {
71
+ this._codecController.selectPreferredCodec(session);
72
+ this._receiveVideoController.onMediaSessionStarted(session);
73
+ this._sendVideoController.onMediaSessionStarted(session);
74
+ });
75
+ this._conference.on(JitsiConferenceEvents._MEDIA_SESSION_ACTIVE_CHANGED, () => this._sendVideoController.configureConstraintsForLocalSources());
76
+ this._conference.on(JitsiConferenceEvents.CONFERENCE_VISITOR_CODECS_CHANGED, (codecList) => this._codecController.updateVisitorCodecs(codecList));
77
+ // Debounce the calls to codec selection when there is a burst of joins and leaves.
78
+ const debouncedSelectCodec = this._debounce(() => this._codecController.selectPreferredCodec(this._conference.jvbJingleSession), 1000);
79
+ this._conference.on(JitsiConferenceEvents.USER_JOINED, debouncedSelectCodec.bind(this));
80
+ this._conference.on(JitsiConferenceEvents.USER_LEFT, debouncedSelectCodec.bind(this));
81
+ this._conference.rtc.on(RTCEvents.SENDER_VIDEO_CONSTRAINTS_CHANGED, (videoConstraints) => this._sendVideoController.onSenderConstraintsReceived(videoConstraints));
82
+ this._conference.on(JitsiConferenceEvents.ENCODE_TIME_STATS_RECEIVED, (tpc, stats) => this._processOutboundRtpStats(tpc, stats));
83
+ }
84
+ /**
85
+ * Creates a debounced function that delays the execution of the provided function until after the specified delay
86
+ * has elapsed. Unlike typical debounce implementations, the timer does not reset when the function is called again
87
+ * within the delay period.
88
+ *
89
+ * @param {Function} func - The function to be debounced.
90
+ * @param {number} delay - The delay in milliseconds.
91
+ * @returns {Function} - The debounced function.
92
+ */
93
+ _debounce(func, delay) {
94
+ return function (...args) {
95
+ /* eslint-disable @typescript-eslint/no-invalid-this */
96
+ if (!this._timer) {
97
+ this._timer = setTimeout(() => {
98
+ this._timer = null;
99
+ func.apply(this, args);
100
+ }, delay);
101
+ }
102
+ /* eslint-enable @typescript-eslint/no-invalid-this */
103
+ };
104
+ }
105
+ /**
106
+ * Adjusts the lastN value so that fewer remote video sources are received from the bridge in an attempt to improve
107
+ * encode resolution of the outbound video streams based on cpuLimited parameter passed. If cpuLimited is false,
108
+ * the lastN value will slowly be ramped back up to the channelLastN value set in config.js.
109
+ *
110
+ * @param {boolean} cpuLimited - whether the endpoint is cpu limited or not.
111
+ * @returns boolean - Returns true if an action was taken, false otherwise.
112
+ */
113
+ _lowerOrRaiseLastN(cpuLimited) {
114
+ const lastN = this.receiveVideoController.getLastN();
115
+ let newLastN = lastN;
116
+ if (cpuLimited && (lastN !== LAST_N_UNLIMITED && lastN <= MIN_LAST_N)) {
117
+ return false;
118
+ }
119
+ // If channelLastN is not set or set to -1 in config.js, the client will ramp up lastN to only up to 25.
120
+ let { channelLastN = DEFAULT_LAST_N } = this._conference.options.config;
121
+ channelLastN = channelLastN === LAST_N_UNLIMITED ? DEFAULT_LAST_N : channelLastN;
122
+ if (cpuLimited) {
123
+ const videoStreamsReceived = this._conference.getForwardedSources().length;
124
+ newLastN = Math.floor(videoStreamsReceived / 2);
125
+ if (newLastN < MIN_LAST_N) {
126
+ newLastN = MIN_LAST_N;
127
+ }
128
+ // Increment lastN by 1 every LAST_N_RAMPUP_TIME (60) secs.
129
+ }
130
+ else if (lastN < channelLastN) {
131
+ newLastN++;
132
+ }
133
+ if (newLastN === lastN) {
134
+ return false;
135
+ }
136
+ const isStillLimitedByCpu = newLastN < channelLastN;
137
+ this.receiveVideoController.setLastNLimitedByCpu(isStillLimitedByCpu);
138
+ logger.info(`QualityController - setting lastN=${newLastN}, limitedByCpu=${isStillLimitedByCpu}`);
139
+ this.receiveVideoController.setLastN(newLastN);
140
+ return true;
141
+ }
142
+ /**
143
+ * Adjusts the requested resolution for remote video sources by updating the receiver constraints in an attempt to
144
+ * improve the encode resolution of the outbound video streams.
145
+ * @return {void}
146
+ */
147
+ _maybeLowerReceiveResolution() {
148
+ const currentConstraints = this.receiveVideoController.getCurrentReceiverConstraints();
149
+ const individualConstraints = currentConstraints.constraints;
150
+ let maxHeight = 0;
151
+ if (individualConstraints && Object.keys(individualConstraints).length) {
152
+ for (const value of Object.values(individualConstraints)) {
153
+ const v = value;
154
+ maxHeight = Math.max(maxHeight, v.maxHeight);
155
+ }
156
+ }
157
+ const currentLevel = VIDEO_QUALITY_LEVELS.findIndex(lvl => lvl.height <= maxHeight);
158
+ // Do not lower the resolution to less than 180p.
159
+ if (VIDEO_QUALITY_LEVELS[currentLevel].height === 180) {
160
+ return;
161
+ }
162
+ this.receiveVideoController.setPreferredReceiveMaxFrameHeight(VIDEO_QUALITY_LEVELS[currentLevel + 1].height);
163
+ }
164
+ /**
165
+ * Updates the codec preference order for the local endpoint on the active media session and switches the video
166
+ * codec if needed.
167
+ *
168
+ * @param {number} trackId - The track ID of the local video track for which stats have been captured.
169
+ * @returns {boolean} - Returns true if video codec was changed.
170
+ */
171
+ _maybeSwitchVideoCodec(trackId) {
172
+ const stats = this._encodeTimeStats.get(trackId);
173
+ const { codec, encodeResolution, localTrack } = stats.get(stats.size() - 1);
174
+ const codecsByVideoType = VIDEO_CODECS_BY_COMPLEXITY[localTrack.getVideoType()];
175
+ const codecIndex = codecsByVideoType.findIndex(val => val === codec.toLowerCase());
176
+ // Do nothing if the encoder is using the lowest complexity codec already.
177
+ if (codecIndex === codecsByVideoType.length - 1) {
178
+ return false;
179
+ }
180
+ if (!this._limitedByCpuTimeout) {
181
+ this._limitedByCpuTimeout = window.setTimeout(() => {
182
+ this._limitedByCpuTimeout = undefined;
183
+ const updatedStats = this._encodeTimeStats.get(trackId);
184
+ const latestSourceStats = updatedStats.get(updatedStats.size() - 1);
185
+ const expectedSendResolution = Math.min(localTrack.maxEnabledResolution, localTrack.getCaptureResolution());
186
+ // If the encoder is still limited by CPU, switch to a lower complexity codec.
187
+ if (latestSourceStats.qualityLimitationReason === QualityLimitationReason.CPU
188
+ || encodeResolution < expectedSendResolution) {
189
+ return this.codecController.changeCodecPreferenceOrder(localTrack, codec);
190
+ }
191
+ }, LIMITED_BY_CPU_TIMEOUT);
192
+ }
193
+ return false;
194
+ }
195
+ /**
196
+ * Adjusts codec, lastN or receive resolution based on the send resolution (of the outbound streams) and limitation
197
+ * reported by the browser in the WebRTC stats. Recovery is also attempted if the limitation goes away. No action
198
+ * is taken if the adaptive mode has been disabled through config.js.
199
+ *
200
+ * @param {ISourceStats} sourceStats - The outbound-rtp stats for a local video track.
201
+ * @returns {void}
202
+ */
203
+ _performQualityOptimizations(sourceStats) {
204
+ // Do not attempt run time adjustments if the adaptive mode is disabled.
205
+ if (!this._enableAdaptiveMode) {
206
+ return;
207
+ }
208
+ const { encodeResolution, localTrack, qualityLimitationReason, tpc } = sourceStats;
209
+ // Older browser versions might not report the resolution in the stats.
210
+ if (!isValidNumber(encodeResolution)) {
211
+ return;
212
+ }
213
+ const trackId = localTrack.rtcId;
214
+ if (encodeResolution === tpc.calculateExpectedSendResolution(localTrack)) {
215
+ if (this._limitedByCpuTimeout) {
216
+ window.clearTimeout(this._limitedByCpuTimeout);
217
+ this._limitedByCpuTimeout = undefined;
218
+ }
219
+ if (qualityLimitationReason === QualityLimitationReason.NONE
220
+ && this.receiveVideoController.isLastNLimitedByCpu()) {
221
+ if (!this._lastNRampupTimeout && !this._isLastNRampupBlocked) {
222
+ RTCStats.sendStatsEntry(RTCStatsEvents.ENCODER_CPU_RESTRICTED_EVENT, null, false);
223
+ // Ramp up the number of received videos if CPU limitation no longer exists. If the cpu
224
+ // limitation returns as a consequence, do not attempt to ramp up again, continue to
225
+ // increment the lastN value otherwise until it is equal to the channelLastN value.
226
+ this._lastNRampupTimeout = window.setTimeout(() => {
227
+ this._lastNRampupTimeout = undefined;
228
+ const updatedStats = this._encodeTimeStats.get(trackId);
229
+ const latestSourceStats = updatedStats.get(updatedStats.size() - 1);
230
+ if (latestSourceStats.qualityLimitationReason === QualityLimitationReason.CPU) {
231
+ this._isLastNRampupBlocked = true;
232
+ }
233
+ else {
234
+ this._lowerOrRaiseLastN(false /* raise */);
235
+ }
236
+ }, this._lastNRampupTime);
237
+ }
238
+ }
239
+ return;
240
+ }
241
+ // Do nothing if the limitation reason is bandwidth since the browser will dynamically adapt the outbound
242
+ // resolution based on available uplink bandwith. Otherwise,
243
+ // 1. Switch the codec to the lowest complexity one incrementally.
244
+ // 2. Switch to a lower lastN value, cutting the receive videos by half in every iteration until
245
+ // MIN_LAST_N value is reached.
246
+ // 3. Lower the receive resolution of individual streams up to 180p.
247
+ if (qualityLimitationReason === QualityLimitationReason.CPU) {
248
+ if (this._lastNRampupTimeout) {
249
+ window.clearTimeout(this._lastNRampupTimeout);
250
+ this._lastNRampupTimeout = undefined;
251
+ this._isLastNRampupBlocked = true;
252
+ }
253
+ RTCStats.sendStatsEntry(RTCStatsEvents.ENCODER_CPU_RESTRICTED_EVENT, null, true);
254
+ const codecSwitched = this._maybeSwitchVideoCodec(trackId);
255
+ if (!codecSwitched && !this._limitedByCpuTimeout) {
256
+ const lastNChanged = this._lowerOrRaiseLastN(true /* lower */);
257
+ if (!lastNChanged) {
258
+ this.receiveVideoController.setReceiveResolutionLimitedByCpu(true);
259
+ this._maybeLowerReceiveResolution();
260
+ }
261
+ }
262
+ }
263
+ }
264
+ /**
265
+ * Processes the outbound RTP stream stats as reported by the WebRTC peerconnection and makes runtime adjustments
266
+ * to the client for better quality experience if the adaptive mode is enabled.
267
+ *
268
+ * @param {TraceablePeerConnection} tpc - The underlying WebRTC peerconnection where stats have been captured.
269
+ * @param {Map<number, IOutboundRtpStats>} stats - Outbound-rtp stream stats per SSRC.
270
+ * @returns void
271
+ */
272
+ _processOutboundRtpStats(tpc, stats) {
273
+ const activeSession = this._conference.getActiveMediaSession();
274
+ // Process stats only for the active media session.
275
+ if (activeSession.peerconnection !== tpc) {
276
+ return;
277
+ }
278
+ const statsPerTrack = new Map();
279
+ for (const ssrc of stats.keys()) {
280
+ const { codec, encodeTime, qualityLimitationReason, resolution, timestamp } = stats.get(ssrc);
281
+ const track = tpc.getTrackBySSRC(ssrc);
282
+ const trackId = track.rtcId;
283
+ let existingStats = statsPerTrack.get(trackId);
284
+ const encodeResolution = Math.min(resolution?.height, resolution?.width);
285
+ const ssrcStats = {
286
+ encodeResolution,
287
+ encodeTime,
288
+ qualityLimitationReason
289
+ };
290
+ if (existingStats) {
291
+ existingStats.codec = codec;
292
+ existingStats.timestamp = timestamp;
293
+ existingStats.trackStats.push(ssrcStats);
294
+ }
295
+ else {
296
+ existingStats = {
297
+ codec,
298
+ timestamp,
299
+ trackStats: [ssrcStats]
300
+ };
301
+ statsPerTrack.set(trackId, existingStats);
302
+ }
303
+ }
304
+ // Aggregate the stats for multiple simulcast streams with different SSRCs but for the same video stream.
305
+ for (const trackId of statsPerTrack.keys()) {
306
+ const { codec, timestamp, trackStats } = statsPerTrack.get(trackId);
307
+ const totalEncodeTime = trackStats
308
+ .map((stat) => stat.encodeTime)
309
+ .reduce((totalValue, currentValue) => totalValue + currentValue, 0);
310
+ const avgEncodeTime = totalEncodeTime / trackStats.length;
311
+ const { qualityLimitationReason = QualityLimitationReason.NONE } = trackStats
312
+ .find((stat) => stat.qualityLimitationReason !== QualityLimitationReason.NONE) ?? {};
313
+ const encodeResolution = trackStats
314
+ .map((stat) => stat.encodeResolution)
315
+ .reduce((resolution, currentValue) => Math.max(resolution, currentValue), 0);
316
+ const localTrack = this._conference.getLocalVideoTracks().find(t => t.rtcId === trackId);
317
+ const exisitingStats = this._encodeTimeStats.get(trackId);
318
+ const sourceStats = {
319
+ avgEncodeTime,
320
+ codec,
321
+ encodeResolution,
322
+ localTrack,
323
+ qualityLimitationReason,
324
+ timestamp,
325
+ tpc
326
+ };
327
+ if (exisitingStats) {
328
+ exisitingStats.add(sourceStats);
329
+ }
330
+ else {
331
+ // Save stats for only the last 5 mins.
332
+ const data = new FixedSizeArray(300);
333
+ data.add(sourceStats);
334
+ this._encodeTimeStats.set(trackId, data);
335
+ }
336
+ logger.debug(`Encode stats for ${localTrack}: codec=${codec}, time=${avgEncodeTime},`
337
+ + `resolution=${encodeResolution}, qualityLimitationReason=${qualityLimitationReason}`);
338
+ this._performQualityOptimizations(sourceStats);
339
+ }
340
+ }
341
+ /**
342
+ * Gets the audio controller instance.
343
+ */
344
+ get audioController() {
345
+ return this._audioController;
346
+ }
347
+ /**
348
+ * Gets the codec controller instance.
349
+ */
350
+ get codecController() {
351
+ return this._codecController;
352
+ }
353
+ /**
354
+ * Gets the receive video controller instance.
355
+ */
356
+ get receiveVideoController() {
357
+ return this._receiveVideoController;
358
+ }
359
+ /**
360
+ * Gets the send video controller instance.
361
+ */
362
+ get sendVideoController() {
363
+ return this._sendVideoController;
364
+ }
365
+ }
366
+ //# sourceMappingURL=QualityController.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"QualityController.js","sourceRoot":"","sources":["../../../../modules/qualitycontrol/QualityController.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,73 @@
1
+ import { getLogger } from '@jitsi/logger';
2
+ import { isEqual } from 'lodash-es';
3
+ import { ReceiverAudioSubscription } from '../../service/RTC/ReceiverAudioSubscription';
4
+ const logger = getLogger('qc:ReceiveAudioController');
5
+ /**
6
+ * Controller for managing audio subscriptions in a Jitsi conference. It allows subscribing to remote audio streams
7
+ * based on different modes such as ALL, EXCLUDE, INCLUDE, and NONE.
8
+ */
9
+ export class ReceiverAudioController {
10
+ /**
11
+ * Creates a new instance of the ReceiverAudioController.
12
+ */
13
+ constructor(conference) {
14
+ this._rtc = conference.rtc;
15
+ this._sourceList = [];
16
+ this._subscriptionMode = ReceiverAudioSubscription.ALL;
17
+ }
18
+ /**
19
+ * Gets the current audio subscription option.
20
+ *
21
+ * @returns {ReceiverAudioSubscription} The current audio subscription option.
22
+ */
23
+ get audioSubscription() {
24
+ return this._subscriptionMode;
25
+ }
26
+ /**
27
+ * Mutes or unmutes the remote audio streams based on the provided parameter.
28
+ *
29
+ * @param {boolean} muted - Indicates whether the remote audio should be muted or not.
30
+ * @returns {void}
31
+ */
32
+ muteRemoteAudio(muted) {
33
+ this.setAudioSubscriptionMode({
34
+ mode: muted ? ReceiverAudioSubscription.NONE : ReceiverAudioSubscription.ALL
35
+ });
36
+ }
37
+ /**
38
+ * Sets the audio subscription options.
39
+ *
40
+ * @param message The audio subscription message containing the mode and optional source list.
41
+ * @returns {void}
42
+ */
43
+ setAudioSubscriptionMode(message) {
44
+ if ((message.mode == ReceiverAudioSubscription.NONE || message.mode == ReceiverAudioSubscription.ALL)
45
+ && this._subscriptionMode == message.mode) {
46
+ logger.debug(`Ignoring ReceiverAudioSubscription with mode: ${message.mode}, no change needed.`);
47
+ return;
48
+ }
49
+ this._subscriptionMode = message.mode;
50
+ if (message.mode == ReceiverAudioSubscription.INCLUDE
51
+ || message.mode == ReceiverAudioSubscription.EXCLUDE) {
52
+ if (!message.list?.length) {
53
+ this._subscriptionMode = message.mode == ReceiverAudioSubscription.INCLUDE
54
+ ? ReceiverAudioSubscription.NONE : ReceiverAudioSubscription.ALL;
55
+ }
56
+ else if (this._subscriptionMode == message.mode && isEqual(this._sourceList, message.list)) {
57
+ logger.debug(`Ignoring ReceiverAudioSubscription with mode: ${message.mode},`
58
+ + ` sourceList: ${message.list.join(', ')}, no change needed.`);
59
+ return;
60
+ }
61
+ this._sourceList = message.list || [];
62
+ }
63
+ else {
64
+ // Clear the source list for ALL or NONE modes.
65
+ this._sourceList = [];
66
+ }
67
+ this._rtc.sendReceiverAudioSubscriptionMessage({
68
+ list: this._sourceList,
69
+ mode: this._subscriptionMode
70
+ });
71
+ }
72
+ }
73
+ //# sourceMappingURL=ReceiveAudioController.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ReceiveAudioController.js","sourceRoot":"","sources":["../../../../modules/qualitycontrol/ReceiveAudioController.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AAC1C,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAGpC,OAAO,EAAqC,yBAAyB,EAAE,MAAM,6CAA6C,CAAC;AAG3H,MAAM,MAAM,GAAG,SAAS,CAAC,2BAA2B,CAAC,CAAC;AAEtD;;;GAGG;AACH,MAAM,OAAO,uBAAuB;IAchC;;OAEG;IACH,YAAY,UAA2B;QACnC,IAAI,CAAC,IAAI,GAAG,UAAU,CAAC,GAAG,CAAC;QAC3B,IAAI,CAAC,WAAW,GAAG,EAAE,CAAC;QACtB,IAAI,CAAC,iBAAiB,GAAG,yBAAyB,CAAC,GAAG,CAAC;IAC3D,CAAC;IAED;;;;OAIG;IACH,IAAI,iBAAiB;QACjB,OAAO,IAAI,CAAC,iBAAiB,CAAC;IAClC,CAAC;IAED;;;;;OAKG;IACH,eAAe,CAAC,KAAc;QAC1B,IAAI,CAAC,wBAAwB,CAAC;YAC1B,IAAI,EAAE,KAAK,CAAC,CAAC,CAAC,yBAAyB,CAAC,IAAI,CAAC,CAAC,CAAC,yBAAyB,CAAC,GAAG;SAC/E,CAAC,CAAC;IACP,CAAC;IAED;;;;;OAKG;IACH,wBAAwB,CAAC,OAA0C;QAC/D,IAAI,CAAC,OAAO,CAAC,IAAI,IAAI,yBAAyB,CAAC,IAAI,IAAI,OAAO,CAAC,IAAI,IAAI,yBAAyB,CAAC,GAAG,CAAC;eAC9F,IAAI,CAAC,iBAAiB,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC;YAC5C,MAAM,CAAC,KAAK,CAAC,iDAAiD,OAAO,CAAC,IAAI,qBAAqB,CAAC,CAAC;YAEjG,OAAO;QACX,CAAC;QACD,IAAI,CAAC,iBAAiB,GAAG,OAAO,CAAC,IAAI,CAAC;QACtC,IAAI,OAAO,CAAC,IAAI,IAAI,yBAAyB,CAAC,OAAO;eAC9C,OAAO,CAAC,IAAI,IAAI,yBAAyB,CAAC,OAAO,EAAE,CAAC;YAEvD,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,MAAM,EAAE,CAAC;gBACxB,IAAI,CAAC,iBAAiB,GAAG,OAAO,CAAC,IAAI,IAAI,yBAAyB,CAAC,OAAO;oBACtE,CAAC,CAAC,yBAAyB,CAAC,IAAI,CAAC,CAAC,CAAC,yBAAyB,CAAC,GAAG,CAAC;YACzE,CAAC;iBAAM,IAAI,IAAI,CAAC,iBAAiB,IAAI,OAAO,CAAC,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC,WAAW,EAAE,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC;gBAC3F,MAAM,CAAC,KAAK,CAAC,iDAAiD,OAAO,CAAC,IAAI,GAAG;sBACvE,gBAAgB,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,qBAAqB,CAAC,CAAC;gBAEpE,OAAO;YACX,CAAC;YACD,IAAI,CAAC,WAAW,GAAG,OAAO,CAAC,IAAI,IAAI,EAAE,CAAC;QAC1C,CAAC;aAAM,CAAC;YACJ,+CAA+C;YAC/C,IAAI,CAAC,WAAW,GAAG,EAAE,CAAC;QAC1B,CAAC;QAED,IAAI,CAAC,IAAI,CAAC,oCAAoC,CAAC;YAC3C,IAAI,EAAE,IAAI,CAAC,WAAW;YACtB,IAAI,EAAE,IAAI,CAAC,iBAAiB;SAC/B,CAAC,CAAC;IACP,CAAC;CACJ"}