@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,601 @@
1
+ import { getLogger } from '@jitsi/logger';
2
+ import { MediaType } from '../../service/RTC/MediaType';
3
+ import { StatisticsEvents } from '../../service/statistics/Events';
4
+ import browser from '../browser';
5
+ import FeatureFlags from '../flags/FeatureFlags';
6
+ import { isValidNumber } from '../util/MathUtil';
7
+ const logger = getLogger('stats:RTPStatsCollector');
8
+ /**
9
+ * Calculates packet lost percent using the number of lost packets and the
10
+ * number of all packet.
11
+ * @param lostPackets the number of lost packets
12
+ * @param totalPackets the number of all packets.
13
+ * @returns {number} packet loss percent
14
+ */
15
+ function calculatePacketLoss(lostPackets, totalPackets) {
16
+ if (lostPackets > 0 && totalPackets > 0) {
17
+ return Math.round(lostPackets / totalPackets * 100);
18
+ }
19
+ return 0;
20
+ }
21
+ /**
22
+ * Holds "statistics" for a single SSRC.
23
+ */
24
+ class SsrcStats {
25
+ /**
26
+ * Constructor.
27
+ */
28
+ constructor() {
29
+ this.loss = {};
30
+ this.bitrate = {
31
+ download: 0,
32
+ upload: 0
33
+ };
34
+ this.resolution = {};
35
+ this.framerate = 0;
36
+ this.codec = '';
37
+ }
38
+ /**
39
+ * Sets the "loss" object.
40
+ * @param loss the value to set.
41
+ */
42
+ setLoss(loss) {
43
+ this.loss = loss || {};
44
+ }
45
+ /**
46
+ * Sets resolution that belong to the ssrc represented by this instance.
47
+ * @param resolution new resolution value to be set.
48
+ */
49
+ setResolution(resolution) {
50
+ this.resolution = resolution || {};
51
+ }
52
+ /**
53
+ * Adds the "download" and "upload" fields from the "bitrate" parameter to
54
+ * the respective fields of the "bitrate" field of this object.
55
+ * @param bitrate an object holding the values to add.
56
+ */
57
+ addBitrate(bitrate) {
58
+ this.bitrate.download += bitrate.download;
59
+ this.bitrate.upload += bitrate.upload;
60
+ }
61
+ /**
62
+ * Resets the bit rate for given <tt>ssrc</tt> that belong to the peer
63
+ * represented by this instance.
64
+ */
65
+ resetBitrate() {
66
+ this.bitrate.download = 0;
67
+ this.bitrate.upload = 0;
68
+ }
69
+ /**
70
+ * Sets the "framerate".
71
+ * @param framerate the value to set.
72
+ */
73
+ setFramerate(framerate) {
74
+ this.framerate = framerate || 0;
75
+ }
76
+ /**
77
+ * Sets the codec.
78
+ * @param codec the value to set.
79
+ */
80
+ setCodec(codec) {
81
+ this.codec = codec || '';
82
+ }
83
+ /**
84
+ * Sets the encode stats.
85
+ * @param encodeStats the value to set.
86
+ */
87
+ setEncodeStats(encodeStats) {
88
+ this.encodeStats = encodeStats || {};
89
+ }
90
+ }
91
+ /**
92
+ * Conference statistics.
93
+ */
94
+ class ConferenceStats {
95
+ /**
96
+ * Constructor.
97
+ */
98
+ constructor() {
99
+ /**
100
+ * The bandwidth
101
+ * @type {{}}
102
+ */
103
+ this.bandwidth = {};
104
+ /**
105
+ * The bit rate
106
+ * @type {{}}
107
+ */
108
+ this.bitrate = {};
109
+ /**
110
+ * The packet loss rate
111
+ * @type {{}}
112
+ */
113
+ this.packetLoss = null;
114
+ /**
115
+ * Array with the transport information.
116
+ * @type {Array}
117
+ */
118
+ this.transport = [];
119
+ }
120
+ }
121
+ /* eslint-disable max-params */
122
+ /**
123
+ * <tt>StatsCollector</tt> registers for stats updates of given
124
+ * <tt>peerconnection</tt> in given <tt>interval</tt>. On each update particular
125
+ * stats are extracted and put in {@link SsrcStats} objects. Once the processing
126
+ * is done <tt>audioLevelsUpdateCallback</tt> is called with <tt>this</tt>
127
+ * instance as an event source.
128
+ */
129
+ export default class StatsCollector {
130
+ /**
131
+ * Creates new <tt>StatsCollector</tt> instance.
132
+ * @param peerconnection WebRTC PeerConnection object.
133
+ * @param audioLevelsInterval
134
+ * @param statsInterval stats refresh interval given in ms.
135
+ * @param eventEmitter
136
+ * @constructor
137
+ */
138
+ constructor(peerconnection, audioLevelsInterval, statsInterval, eventEmitter) {
139
+ this.peerconnection = peerconnection;
140
+ this.currentStatsReport = null;
141
+ this.previousStatsReport = null;
142
+ this.audioLevelsIntervalId = null;
143
+ this.eventEmitter = eventEmitter;
144
+ this.conferenceStats = new ConferenceStats();
145
+ // Updates stats interval
146
+ this.audioLevelsIntervalMilis = audioLevelsInterval;
147
+ this.speakerList = [];
148
+ this.statsIntervalId = null;
149
+ this.statsIntervalMilis = statsInterval;
150
+ /**
151
+ * Maps SSRC numbers to {@link SsrcStats}.
152
+ * @type {Map<number,SsrcStats}
153
+ */
154
+ this.ssrc2stats = new Map();
155
+ }
156
+ /**
157
+ * Set the list of the remote speakers for which audio levels are to be calculated.
158
+ *
159
+ * @param {Array<string>} speakerList - Endpoint ids.
160
+ * @returns {void}
161
+ */
162
+ setSpeakerList(speakerList) {
163
+ this.speakerList = speakerList;
164
+ }
165
+ /**
166
+ * Stops stats updates.
167
+ */
168
+ stop() {
169
+ if (this.audioLevelsIntervalId) {
170
+ clearInterval(this.audioLevelsIntervalId);
171
+ this.audioLevelsIntervalId = null;
172
+ }
173
+ if (this.statsIntervalId) {
174
+ clearInterval(this.statsIntervalId);
175
+ this.statsIntervalId = null;
176
+ }
177
+ }
178
+ /**
179
+ * Callback passed to <tt>getStats</tt> method.
180
+ * @param error an error that occurred on <tt>getStats</tt> call.
181
+ */
182
+ errorCallback(error) {
183
+ logger.error('Get stats error', error);
184
+ this.stop();
185
+ }
186
+ /**
187
+ * Starts stats updates.
188
+ */
189
+ start(startAudioLevelStats) {
190
+ if (startAudioLevelStats && browser.supportsReceiverStats()) {
191
+ this.audioLevelsIntervalId = setInterval(() => {
192
+ const audioLevels = this.peerconnection.getAudioLevels(this.speakerList);
193
+ for (const ssrc in audioLevels) {
194
+ if (audioLevels.hasOwnProperty(ssrc)) {
195
+ // Use a scaling factor of 2.5 to report the same audio levels that getStats reports.
196
+ const audioLevel = audioLevels[ssrc] * 2.5;
197
+ this.eventEmitter.emit(StatisticsEvents.AUDIO_LEVEL, this.peerconnection, Number.parseInt(ssrc, 10), audioLevel, false /* isLocal */);
198
+ }
199
+ }
200
+ }, this.audioLevelsIntervalMilis);
201
+ }
202
+ const processStats = () => {
203
+ // Interval updates
204
+ this.peerconnection.getStats()
205
+ .then(report => {
206
+ this.currentStatsReport = typeof report?.result === 'function'
207
+ ? report.result()
208
+ : report;
209
+ try {
210
+ this.processStatsReport();
211
+ }
212
+ catch (error) {
213
+ logger.error('Processing of RTP stats failed:', error);
214
+ }
215
+ this.previousStatsReport = this.currentStatsReport;
216
+ })
217
+ .catch(error => this.errorCallback(error));
218
+ };
219
+ processStats();
220
+ this.statsIntervalId = setInterval(processStats, this.statsIntervalMilis);
221
+ }
222
+ /**
223
+ * Process and emit statistics report.
224
+ * @private
225
+ */
226
+ _processAndEmitReport() {
227
+ // process stats
228
+ const totalPackets = {
229
+ download: 0,
230
+ upload: 0
231
+ };
232
+ const lostPackets = {
233
+ download: 0,
234
+ upload: 0
235
+ };
236
+ let bitrateDownload = 0;
237
+ let bitrateUpload = 0;
238
+ const resolutions = {};
239
+ const framerates = {};
240
+ const codecs = {};
241
+ let audioBitrateDownload = 0;
242
+ let audioBitrateUpload = 0;
243
+ let videoBitrateDownload = 0;
244
+ let videoBitrateUpload = 0;
245
+ for (const [ssrc, ssrcStats] of this.ssrc2stats) {
246
+ // process packet loss stats
247
+ const loss = ssrcStats.loss;
248
+ const type = loss.isDownloadStream ? 'download' : 'upload';
249
+ totalPackets[type] += loss.packetsTotal;
250
+ lostPackets[type] += loss.packetsLost;
251
+ const ssrcBitrateDownload = ssrcStats.bitrate.download;
252
+ const ssrcBitrateUpload = ssrcStats.bitrate.upload;
253
+ // process bitrate stats
254
+ bitrateDownload += ssrcBitrateDownload;
255
+ bitrateUpload += ssrcBitrateUpload;
256
+ ssrcStats.resetBitrate();
257
+ // collect resolutions and framerates
258
+ const track = this.peerconnection.getTrackBySSRC(ssrc);
259
+ if (!track) {
260
+ continue; // eslint-disable-line no-continue
261
+ }
262
+ let audioCodec;
263
+ let videoCodec;
264
+ if (track.isAudioTrack()) {
265
+ audioBitrateDownload += ssrcBitrateDownload;
266
+ audioBitrateUpload += ssrcBitrateUpload;
267
+ audioCodec = ssrcStats.codec;
268
+ }
269
+ else {
270
+ videoBitrateDownload += ssrcBitrateDownload;
271
+ videoBitrateUpload += ssrcBitrateUpload;
272
+ videoCodec = ssrcStats.codec;
273
+ }
274
+ const participantId = track.getParticipantId();
275
+ if (!participantId) {
276
+ // All tracks in ssrc-rewriting mode need not have a participant associated with it.
277
+ if (!FeatureFlags.isSsrcRewritingSupported()) {
278
+ logger.error(`No participant ID returned by ${track}`);
279
+ }
280
+ continue;
281
+ }
282
+ const userCodecs = codecs[participantId] ?? {};
283
+ userCodecs[ssrc] = {
284
+ audio: audioCodec,
285
+ video: videoCodec
286
+ };
287
+ codecs[participantId] = userCodecs;
288
+ const { resolution } = ssrcStats;
289
+ if (!track.isVideoTrack()
290
+ || !isValidNumber(resolution?.height)
291
+ || !isValidNumber(resolution?.width)
292
+ || resolution.height === -1
293
+ || resolution.width === -1) {
294
+ continue;
295
+ }
296
+ const userResolutions = resolutions[participantId] || {};
297
+ // If simulcast (VP8) is used, there will be 3 "outbound-rtp" streams with different resolutions and 3
298
+ // different SSRCs. Based on the requested resolution and the current cpu and available bandwidth
299
+ // values, some of the streams might get suspended. Therefore the actual send resolution needs to be
300
+ // calculated based on the outbound-rtp streams that are currently active for the simulcast case.
301
+ // However for the SVC case, there will be only 1 "outbound-rtp" stream which will have the correct
302
+ // send resolution width and height.
303
+ if (track.isLocal() && !browser.supportsTrackBasedStats() && this.peerconnection.doesTrueSimulcast(track)) {
304
+ const localSsrcs = this.peerconnection.getLocalVideoSSRCs(track);
305
+ for (const localSsrc of localSsrcs) {
306
+ const ssrcResolution = this.ssrc2stats.get(localSsrc)?.resolution;
307
+ // The code processes resolution stats only for 'outbound-rtp' streams that are currently active.
308
+ if (ssrcResolution?.height && ssrcResolution?.width) {
309
+ resolution.height = Math.max(resolution.height, ssrcResolution.height);
310
+ resolution.width = Math.max(resolution.width, ssrcResolution.width);
311
+ }
312
+ }
313
+ }
314
+ userResolutions[ssrc] = resolution;
315
+ resolutions[participantId] = userResolutions;
316
+ if (ssrcStats.framerate > 0) {
317
+ const userFramerates = framerates[participantId] || {};
318
+ userFramerates[ssrc] = ssrcStats.framerate;
319
+ framerates[participantId] = userFramerates;
320
+ }
321
+ }
322
+ this.conferenceStats.bitrate = {
323
+ download: bitrateDownload,
324
+ upload: bitrateUpload
325
+ };
326
+ this.conferenceStats.bitrate.audio = {
327
+ download: audioBitrateDownload,
328
+ upload: audioBitrateUpload
329
+ };
330
+ this.conferenceStats.bitrate.video = {
331
+ download: videoBitrateDownload,
332
+ upload: videoBitrateUpload
333
+ };
334
+ this.conferenceStats.packetLoss = {
335
+ download: calculatePacketLoss(lostPackets.download, totalPackets.download),
336
+ total: calculatePacketLoss(lostPackets.download + lostPackets.upload, totalPackets.download + totalPackets.upload),
337
+ upload: calculatePacketLoss(lostPackets.upload, totalPackets.upload)
338
+ };
339
+ this.eventEmitter.emit(StatisticsEvents.CONNECTION_STATS, this.peerconnection, {
340
+ bandwidth: this.conferenceStats.bandwidth,
341
+ bitrate: this.conferenceStats.bitrate,
342
+ codec: codecs,
343
+ framerate: framerates,
344
+ packetLoss: this.conferenceStats.packetLoss,
345
+ resolution: resolutions,
346
+ transport: this.conferenceStats.transport
347
+ });
348
+ this.conferenceStats.transport = [];
349
+ }
350
+ /**
351
+ * Converts the value to a non-negative number.
352
+ * If the value is either invalid or negative then 0 will be returned.
353
+ * @param {*} v
354
+ * @return {number}
355
+ * @private
356
+ */
357
+ getNonNegativeValue(v) {
358
+ let value = v;
359
+ if (typeof value !== 'number') {
360
+ value = Number(value);
361
+ }
362
+ if (!isValidNumber(value)) {
363
+ return 0;
364
+ }
365
+ return Math.max(0, value);
366
+ }
367
+ /**
368
+ * Calculates bitrate between before and now using a supplied field name and its
369
+ * value in the stats.
370
+ * @param {RTCInboundRtpStreamStats|RTCSentRtpStreamStats} now the current stats
371
+ * @param {RTCInboundRtpStreamStats|RTCSentRtpStreamStats} before the
372
+ * previous stats.
373
+ * @param fieldName the field to use for calculations.
374
+ * @return {number} the calculated bitrate between now and before.
375
+ * @private
376
+ */
377
+ _calculateBitrate(now, before, fieldName) {
378
+ const bytesNow = this.getNonNegativeValue(now[fieldName]);
379
+ const bytesBefore = this.getNonNegativeValue(before[fieldName]);
380
+ const bytesProcessed = Math.max(0, bytesNow - bytesBefore);
381
+ const timeMs = now.timestamp - before.timestamp;
382
+ let bitrateKbps = 0;
383
+ if (timeMs > 0) {
384
+ // TODO is there any reason to round here?
385
+ bitrateKbps = Math.round((bytesProcessed * 8) / timeMs);
386
+ }
387
+ return bitrateKbps;
388
+ }
389
+ /**
390
+ * Calculates the frames per second rate between before and now using a supplied field name and its value in stats.
391
+ * @param {RTCOutboundRtpStreamStats|RTCSentRtpStreamStats} now the current stats
392
+ * @param {RTCOutboundRtpStreamStats|RTCSentRtpStreamStats} before the previous stats
393
+ * @param {string} fieldName the field to use for calculations.
394
+ * @returns {number} the calculated frame rate between now and before.
395
+ */
396
+ _calculateFps(now, before, fieldName) {
397
+ const timeMs = now.timestamp - before.timestamp;
398
+ let frameRate = 0;
399
+ if (timeMs > 0 && now[fieldName]) {
400
+ const numberOfFramesSinceBefore = now[fieldName] - before[fieldName];
401
+ frameRate = (numberOfFramesSinceBefore / timeMs) * 1000;
402
+ }
403
+ return frameRate;
404
+ }
405
+ /**
406
+ * Stats processing for spec-compliant RTCPeerConnection#getStats.
407
+ */
408
+ processStatsReport() {
409
+ const byteSentStats = {};
410
+ const encodedTimeStatsPerSsrc = new Map();
411
+ this.currentStatsReport.forEach(now => {
412
+ const before = this.previousStatsReport ? this.previousStatsReport.get(now.id) : null;
413
+ // RTCIceCandidatePairStats - https://w3c.github.io/webrtc-stats/#candidatepair-dict*
414
+ if (now.type === 'candidate-pair' && now.nominated && now.state === 'succeeded') {
415
+ const availableIncomingBitrate = now.availableIncomingBitrate;
416
+ const availableOutgoingBitrate = now.availableOutgoingBitrate;
417
+ if (availableIncomingBitrate || availableOutgoingBitrate) {
418
+ this.conferenceStats.bandwidth = {
419
+ 'download': Math.round(availableIncomingBitrate / 1000),
420
+ 'upload': Math.round(availableOutgoingBitrate / 1000)
421
+ };
422
+ }
423
+ const remoteUsedCandidate = this.currentStatsReport.get(now.remoteCandidateId);
424
+ const localUsedCandidate = this.currentStatsReport.get(now.localCandidateId);
425
+ // RTCIceCandidateStats
426
+ // https://w3c.github.io/webrtc-stats/#icecandidate-dict*
427
+ if (remoteUsedCandidate && localUsedCandidate) {
428
+ const remoteIpAddress = browser.isChromiumBased()
429
+ ? remoteUsedCandidate.ip
430
+ : remoteUsedCandidate.address;
431
+ const remotePort = remoteUsedCandidate.port;
432
+ const ip = `${remoteIpAddress}:${remotePort}`;
433
+ const localIpAddress = browser.isChromiumBased()
434
+ ? localUsedCandidate.ip
435
+ : localUsedCandidate.address;
436
+ const localPort = localUsedCandidate.port;
437
+ const localip = `${localIpAddress}:${localPort}`;
438
+ const type = remoteUsedCandidate.protocol;
439
+ // Save the address unless it has been saved already.
440
+ const conferenceStatsTransport = this.conferenceStats.transport;
441
+ if (!conferenceStatsTransport.some(t => t.ip === ip
442
+ && t.type === type
443
+ && t.localip === localip)) {
444
+ conferenceStatsTransport.push({
445
+ ip,
446
+ localCandidateType: localUsedCandidate.candidateType,
447
+ localip,
448
+ networkType: localUsedCandidate.networkType,
449
+ p2p: this.peerconnection.isP2P,
450
+ remoteCandidateType: remoteUsedCandidate.candidateType,
451
+ rtt: now.currentRoundTripTime * 1000,
452
+ type
453
+ });
454
+ }
455
+ }
456
+ // RTCReceivedRtpStreamStats
457
+ // https://w3c.github.io/webrtc-stats/#receivedrtpstats-dict*
458
+ // RTCSentRtpStreamStats
459
+ // https://w3c.github.io/webrtc-stats/#sentrtpstats-dict*
460
+ }
461
+ else if (now.type === 'inbound-rtp' || now.type === 'outbound-rtp') {
462
+ const ssrc = this.getNonNegativeValue(now.ssrc);
463
+ if (!ssrc) {
464
+ return;
465
+ }
466
+ let ssrcStats = this.ssrc2stats.get(ssrc);
467
+ if (!ssrcStats) {
468
+ ssrcStats = new SsrcStats();
469
+ this.ssrc2stats.set(ssrc, ssrcStats);
470
+ }
471
+ let isDownloadStream = true;
472
+ let key = 'packetsReceived';
473
+ if (now.type === 'outbound-rtp') {
474
+ isDownloadStream = false;
475
+ key = 'packetsSent';
476
+ }
477
+ let packetsNow = now[key];
478
+ if (!packetsNow || packetsNow < 0) {
479
+ packetsNow = 0;
480
+ }
481
+ if (before) {
482
+ const packetsBefore = this.getNonNegativeValue(before[key]);
483
+ const packetsDiff = Math.max(0, packetsNow - packetsBefore);
484
+ const packetsLostNow = this.getNonNegativeValue(now.packetsLost);
485
+ const packetsLostBefore = this.getNonNegativeValue(before.packetsLost);
486
+ const packetsLostDiff = Math.max(0, packetsLostNow - packetsLostBefore);
487
+ ssrcStats.setLoss({
488
+ isDownloadStream,
489
+ packetsLost: packetsLostDiff,
490
+ packetsTotal: packetsDiff + packetsLostDiff
491
+ });
492
+ }
493
+ let resolution;
494
+ // Process the stats for 'inbound-rtp' streams always and 'outbound-rtp' only if the browser is
495
+ // Chromium based and version 112 and later since 'track' based stats are no longer available there
496
+ // for calculating send resolution and frame rate.
497
+ if (typeof now.frameHeight !== 'undefined' && typeof now.frameWidth !== 'undefined') {
498
+ // Assume the stream is active if the field is missing in the stats(Firefox)
499
+ const isStreamActive = now.active ?? true;
500
+ if (now.type === 'inbound-rtp' || (!browser.supportsTrackBasedStats() && isStreamActive)) {
501
+ resolution = {
502
+ height: now.frameHeight,
503
+ width: now.frameWidth
504
+ };
505
+ }
506
+ }
507
+ ssrcStats.setResolution(resolution);
508
+ let frameRate = now.framesPerSecond;
509
+ if (!frameRate && before) {
510
+ frameRate = this._calculateFps(now, before, 'framesSent');
511
+ }
512
+ ssrcStats.setFramerate(Math.round(frameRate || 0));
513
+ if (now.type === 'inbound-rtp' && before) {
514
+ ssrcStats.addBitrate({
515
+ 'download': this._calculateBitrate(now, before, 'bytesReceived'),
516
+ 'upload': 0
517
+ });
518
+ }
519
+ else if (before) {
520
+ byteSentStats[ssrc] = this.getNonNegativeValue(now.bytesSent);
521
+ ssrcStats.addBitrate({
522
+ 'download': 0,
523
+ 'upload': this._calculateBitrate(now, before, 'bytesSent')
524
+ });
525
+ }
526
+ const codec = this.currentStatsReport.get(now.codecId);
527
+ if (codec) {
528
+ /**
529
+ * The mime type has the following form: video/VP8 or audio/ISAC, so we what to keep just the type
530
+ * after the '/', audio and video keys will be added on the processing side.
531
+ */
532
+ const codecShortType = codec.mimeType.split('/')[1];
533
+ codecShortType && ssrcStats.setCodec(codecShortType);
534
+ // Calculate the encodeTime stat for outbound video streams.
535
+ const track = this.peerconnection.getTrackBySSRC(ssrc);
536
+ if (now.type === 'outbound-rtp'
537
+ && now.active
538
+ && track?.isVideoTrack()
539
+ && before?.totalEncodeTime
540
+ && before?.framesEncoded
541
+ && now.frameHeight
542
+ && now.frameWidth) {
543
+ const encodeTimeDelta = now.totalEncodeTime - before.totalEncodeTime;
544
+ const framesEncodedDelta = now.framesEncoded - before.framesEncoded;
545
+ const encodeTimePerFrameInMs = 1000 * encodeTimeDelta / framesEncodedDelta;
546
+ const encodeTimeStats = {
547
+ codec: codecShortType,
548
+ encodeTime: encodeTimePerFrameInMs,
549
+ qualityLimitationReason: now.qualityLimitationReason,
550
+ resolution,
551
+ timestamp: now.timestamp
552
+ };
553
+ encodedTimeStatsPerSsrc.set(ssrc, encodeTimeStats);
554
+ ssrcStats.setEncodeStats(encodedTimeStatsPerSsrc);
555
+ }
556
+ }
557
+ // Continue to use the 'track' based stats for Firefox and Safari and older versions of Chromium.
558
+ }
559
+ else if (browser.supportsTrackBasedStats()
560
+ && now.type === 'track'
561
+ && now.kind === MediaType.VIDEO
562
+ && !now.remoteSource) {
563
+ const resolution = {
564
+ height: now.frameHeight,
565
+ width: now.frameWidth
566
+ };
567
+ const localVideoTracks = this.peerconnection.getLocalTracks(MediaType.VIDEO);
568
+ if (!localVideoTracks?.length) {
569
+ return;
570
+ }
571
+ const ssrc = this.peerconnection.getSsrcByTrackId(now.trackIdentifier);
572
+ if (!ssrc) {
573
+ return;
574
+ }
575
+ let ssrcStats = this.ssrc2stats.get(ssrc);
576
+ if (!ssrcStats) {
577
+ ssrcStats = new SsrcStats();
578
+ this.ssrc2stats.set(ssrc, ssrcStats);
579
+ }
580
+ if (resolution.height && resolution.width) {
581
+ ssrcStats.setResolution(resolution);
582
+ }
583
+ // Calculate the frame rate. 'framesSent' is the total aggregate value for all the simulcast streams.
584
+ // Therefore, it needs to be divided by the total number of active simulcast streams.
585
+ let frameRate = now.framesPerSecond;
586
+ if (!frameRate && before) {
587
+ frameRate = this._calculateFps(now, before, 'framesSent');
588
+ }
589
+ ssrcStats.setFramerate(frameRate);
590
+ }
591
+ });
592
+ if (Object.keys(byteSentStats).length) {
593
+ this.eventEmitter.emit(StatisticsEvents.BYTE_SENT_STATS, this.peerconnection, byteSentStats);
594
+ }
595
+ if (encodedTimeStatsPerSsrc.size) {
596
+ this.eventEmitter.emit(StatisticsEvents.ENCODE_TIME_STATS, this.peerconnection, encodedTimeStatsPerSsrc);
597
+ }
598
+ this._processAndEmitReport();
599
+ }
600
+ }
601
+ //# sourceMappingURL=RTPStatsCollector.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"RTPStatsCollector.js","sourceRoot":"","sources":["../../../../modules/statistics/RTPStatsCollector.js"],"names":[],"mappings":"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"}