@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.
- package/LICENSE +202 -0
- package/README.md +26 -0
- package/dist/esm/JitsiConference.js +3692 -0
- package/dist/esm/JitsiConference.js.map +1 -0
- package/dist/esm/JitsiConferenceErrors.js +126 -0
- package/dist/esm/JitsiConferenceErrors.js.map +1 -0
- package/dist/esm/JitsiConferenceEventManager.js +424 -0
- package/dist/esm/JitsiConferenceEventManager.js.map +1 -0
- package/dist/esm/JitsiConferenceEvents.js +431 -0
- package/dist/esm/JitsiConferenceEvents.js.map +1 -0
- package/dist/esm/JitsiConnection.js +187 -0
- package/dist/esm/JitsiConnection.js.map +1 -0
- package/dist/esm/JitsiConnectionErrors.js +52 -0
- package/dist/esm/JitsiConnectionErrors.js.map +1 -0
- package/dist/esm/JitsiConnectionEvents.js +57 -0
- package/dist/esm/JitsiConnectionEvents.js.map +1 -0
- package/dist/esm/JitsiMediaDevices.js +221 -0
- package/dist/esm/JitsiMediaDevices.js.map +1 -0
- package/dist/esm/JitsiMediaDevicesEvents.js +29 -0
- package/dist/esm/JitsiMediaDevicesEvents.js.map +1 -0
- package/dist/esm/JitsiMeetJS.js +499 -0
- package/dist/esm/JitsiMeetJS.js.map +1 -0
- package/dist/esm/JitsiParticipant.js +323 -0
- package/dist/esm/JitsiParticipant.js.map +1 -0
- package/dist/esm/JitsiTrackError.js +122 -0
- package/dist/esm/JitsiTrackError.js.map +1 -0
- package/dist/esm/JitsiTrackErrors.js +91 -0
- package/dist/esm/JitsiTrackErrors.js.map +1 -0
- package/dist/esm/JitsiTrackEvents.js +60 -0
- package/dist/esm/JitsiTrackEvents.js.map +1 -0
- package/dist/esm/JitsiTranscriptionStatus.js +15 -0
- package/dist/esm/JitsiTranscriptionStatus.js.map +1 -0
- package/dist/esm/modules/RTC/BridgeChannel.js +398 -0
- package/dist/esm/modules/RTC/BridgeChannel.js.map +1 -0
- package/dist/esm/modules/RTC/JitsiLocalTrack.js +896 -0
- package/dist/esm/modules/RTC/JitsiLocalTrack.js.map +1 -0
- package/dist/esm/modules/RTC/JitsiRemoteTrack.js +427 -0
- package/dist/esm/modules/RTC/JitsiRemoteTrack.js.map +1 -0
- package/dist/esm/modules/RTC/JitsiTrack.js +453 -0
- package/dist/esm/modules/RTC/JitsiTrack.js.map +1 -0
- package/dist/esm/modules/RTC/MockClasses.js +388 -0
- package/dist/esm/modules/RTC/MockClasses.js.map +1 -0
- package/dist/esm/modules/RTC/RTC.js +658 -0
- package/dist/esm/modules/RTC/RTC.js.map +1 -0
- package/dist/esm/modules/RTC/RTCUtils.js +762 -0
- package/dist/esm/modules/RTC/RTCUtils.js.map +1 -0
- package/dist/esm/modules/RTC/ScreenObtainer.js +380 -0
- package/dist/esm/modules/RTC/ScreenObtainer.js.map +1 -0
- package/dist/esm/modules/RTC/TPCUtils.js +803 -0
- package/dist/esm/modules/RTC/TPCUtils.js.map +1 -0
- package/dist/esm/modules/RTC/TraceablePeerConnection.js +2223 -0
- package/dist/esm/modules/RTC/TraceablePeerConnection.js.map +1 -0
- package/dist/esm/modules/RTCStats/DefaulLogStorage.js +35 -0
- package/dist/esm/modules/RTCStats/DefaulLogStorage.js.map +1 -0
- package/dist/esm/modules/RTCStats/RTCStats.js +219 -0
- package/dist/esm/modules/RTCStats/RTCStats.js.map +1 -0
- package/dist/esm/modules/RTCStats/RTCStatsEvents.js +92 -0
- package/dist/esm/modules/RTCStats/RTCStatsEvents.js.map +1 -0
- package/dist/esm/modules/RTCStats/interfaces.js +2 -0
- package/dist/esm/modules/RTCStats/interfaces.js.map +1 -0
- package/dist/esm/modules/browser/BrowserCapabilities.js +345 -0
- package/dist/esm/modules/browser/BrowserCapabilities.js.map +1 -0
- package/dist/esm/modules/browser/index.js +3 -0
- package/dist/esm/modules/browser/index.js.map +1 -0
- package/dist/esm/modules/connectivity/ConnectionQuality.js +389 -0
- package/dist/esm/modules/connectivity/ConnectionQuality.js.map +1 -0
- package/dist/esm/modules/connectivity/IceFailedHandling.js +84 -0
- package/dist/esm/modules/connectivity/IceFailedHandling.js.map +1 -0
- package/dist/esm/modules/connectivity/NetworkInfo.js +49 -0
- package/dist/esm/modules/connectivity/NetworkInfo.js.map +1 -0
- package/dist/esm/modules/connectivity/TrackStreamingStatus.js +453 -0
- package/dist/esm/modules/connectivity/TrackStreamingStatus.js.map +1 -0
- package/dist/esm/modules/detection/ActiveDeviceDetector.js +79 -0
- package/dist/esm/modules/detection/ActiveDeviceDetector.js.map +1 -0
- package/dist/esm/modules/detection/DetectionEvents.js +58 -0
- package/dist/esm/modules/detection/DetectionEvents.js.map +1 -0
- package/dist/esm/modules/detection/NoAudioSignalDetection.js +127 -0
- package/dist/esm/modules/detection/NoAudioSignalDetection.js.map +1 -0
- package/dist/esm/modules/detection/P2PDominantSpeakerDetection.js +47 -0
- package/dist/esm/modules/detection/P2PDominantSpeakerDetection.js.map +1 -0
- package/dist/esm/modules/detection/TrackVADEmitter.js +190 -0
- package/dist/esm/modules/detection/TrackVADEmitter.js.map +1 -0
- package/dist/esm/modules/detection/VADAudioAnalyser.js +199 -0
- package/dist/esm/modules/detection/VADAudioAnalyser.js.map +1 -0
- package/dist/esm/modules/detection/VADNoiseDetection.js +168 -0
- package/dist/esm/modules/detection/VADNoiseDetection.js.map +1 -0
- package/dist/esm/modules/detection/VADReportingService.js +203 -0
- package/dist/esm/modules/detection/VADReportingService.js.map +1 -0
- package/dist/esm/modules/detection/VADTalkMutedDetection.js +131 -0
- package/dist/esm/modules/detection/VADTalkMutedDetection.js.map +1 -0
- package/dist/esm/modules/e2ee/Context.js +274 -0
- package/dist/esm/modules/e2ee/Context.js.map +1 -0
- package/dist/esm/modules/e2ee/E2EEContext.js +158 -0
- package/dist/esm/modules/e2ee/E2EEContext.js.map +1 -0
- package/dist/esm/modules/e2ee/E2EEErrors.js +10 -0
- package/dist/esm/modules/e2ee/E2EEErrors.js.map +1 -0
- package/dist/esm/modules/e2ee/E2EEncryption.js +87 -0
- package/dist/esm/modules/e2ee/E2EEncryption.js.map +1 -0
- package/dist/esm/modules/e2ee/ExternallyManagedKeyHandler.js +24 -0
- package/dist/esm/modules/e2ee/ExternallyManagedKeyHandler.js.map +1 -0
- package/dist/esm/modules/e2ee/KeyHandler.js +137 -0
- package/dist/esm/modules/e2ee/KeyHandler.js.map +1 -0
- package/dist/esm/modules/e2ee/ManagedKeyHandler.js +182 -0
- package/dist/esm/modules/e2ee/ManagedKeyHandler.js.map +1 -0
- package/dist/esm/modules/e2ee/OlmAdapter.js +860 -0
- package/dist/esm/modules/e2ee/OlmAdapter.js.map +1 -0
- package/dist/esm/modules/e2ee/SAS.js +128 -0
- package/dist/esm/modules/e2ee/SAS.js.map +1 -0
- package/dist/esm/modules/e2ee/Worker.js +102 -0
- package/dist/esm/modules/e2ee/Worker.js.map +1 -0
- package/dist/esm/modules/e2ee/crypto-utils.js +53 -0
- package/dist/esm/modules/e2ee/crypto-utils.js.map +1 -0
- package/dist/esm/modules/e2ee/utils.js +15 -0
- package/dist/esm/modules/e2ee/utils.js.map +1 -0
- package/dist/esm/modules/e2eping/e2eping.js +314 -0
- package/dist/esm/modules/e2eping/e2eping.js.map +1 -0
- package/dist/esm/modules/flags/FeatureFlags.js +36 -0
- package/dist/esm/modules/flags/FeatureFlags.js.map +1 -0
- package/dist/esm/modules/litemode/LiteModeContext.js +50 -0
- package/dist/esm/modules/litemode/LiteModeContext.js.map +1 -0
- package/dist/esm/modules/proxyconnection/CustomSignalingLayer.js +98 -0
- package/dist/esm/modules/proxyconnection/CustomSignalingLayer.js.map +1 -0
- package/dist/esm/modules/proxyconnection/ProxyConnectionPC.js +348 -0
- package/dist/esm/modules/proxyconnection/ProxyConnectionPC.js.map +1 -0
- package/dist/esm/modules/proxyconnection/ProxyConnectionService.js +279 -0
- package/dist/esm/modules/proxyconnection/ProxyConnectionService.js.map +1 -0
- package/dist/esm/modules/proxyconnection/constants.js +14 -0
- package/dist/esm/modules/proxyconnection/constants.js.map +1 -0
- package/dist/esm/modules/qualitycontrol/CodecSelection.js +222 -0
- package/dist/esm/modules/qualitycontrol/CodecSelection.js.map +1 -0
- package/dist/esm/modules/qualitycontrol/MockClasses.js +120 -0
- package/dist/esm/modules/qualitycontrol/MockClasses.js.map +1 -0
- package/dist/esm/modules/qualitycontrol/QualityController.js +366 -0
- package/dist/esm/modules/qualitycontrol/QualityController.js.map +1 -0
- package/dist/esm/modules/qualitycontrol/ReceiveAudioController.js +73 -0
- package/dist/esm/modules/qualitycontrol/ReceiveAudioController.js.map +1 -0
- package/dist/esm/modules/qualitycontrol/ReceiveVideoController.js +216 -0
- package/dist/esm/modules/qualitycontrol/ReceiveVideoController.js.map +1 -0
- package/dist/esm/modules/qualitycontrol/SendVideoController.js +133 -0
- package/dist/esm/modules/qualitycontrol/SendVideoController.js.map +1 -0
- package/dist/esm/modules/recording/JibriSession.js +279 -0
- package/dist/esm/modules/recording/JibriSession.js.map +1 -0
- package/dist/esm/modules/recording/RecordingManager.js +257 -0
- package/dist/esm/modules/recording/RecordingManager.js.map +1 -0
- package/dist/esm/modules/recording/recordingConstants.js +21 -0
- package/dist/esm/modules/recording/recordingConstants.js.map +1 -0
- package/dist/esm/modules/recording/recordingXMLUtils.js +69 -0
- package/dist/esm/modules/recording/recordingXMLUtils.js.map +1 -0
- package/dist/esm/modules/red/red.js +108 -0
- package/dist/esm/modules/red/red.js.map +1 -0
- package/dist/esm/modules/sdp/LocalSdpMunger.js +143 -0
- package/dist/esm/modules/sdp/LocalSdpMunger.js.map +1 -0
- package/dist/esm/modules/sdp/RtxModifier.js +179 -0
- package/dist/esm/modules/sdp/RtxModifier.js.map +1 -0
- package/dist/esm/modules/sdp/SDP.js +848 -0
- package/dist/esm/modules/sdp/SDP.js.map +1 -0
- package/dist/esm/modules/sdp/SDPDiffer.js +96 -0
- package/dist/esm/modules/sdp/SDPDiffer.js.map +1 -0
- package/dist/esm/modules/sdp/SDPUtil.js +798 -0
- package/dist/esm/modules/sdp/SDPUtil.js.map +1 -0
- package/dist/esm/modules/sdp/SampleSdpStrings.js +589 -0
- package/dist/esm/modules/sdp/SampleSdpStrings.js.map +1 -0
- package/dist/esm/modules/sdp/SdpSimulcast.js +196 -0
- package/dist/esm/modules/sdp/SdpSimulcast.js.map +1 -0
- package/dist/esm/modules/sdp/SdpTransformUtil.js +337 -0
- package/dist/esm/modules/sdp/SdpTransformUtil.js.map +1 -0
- package/dist/esm/modules/sdp/constants.js +2 -0
- package/dist/esm/modules/sdp/constants.js.map +1 -0
- package/dist/esm/modules/settings/Settings.js +95 -0
- package/dist/esm/modules/settings/Settings.js.map +1 -0
- package/dist/esm/modules/statistics/AnalyticsAdapter.js +277 -0
- package/dist/esm/modules/statistics/AnalyticsAdapter.js.map +1 -0
- package/dist/esm/modules/statistics/AvgRTPStatsReporter.js +817 -0
- package/dist/esm/modules/statistics/AvgRTPStatsReporter.js.map +1 -0
- package/dist/esm/modules/statistics/LocalStatsCollector.js +149 -0
- package/dist/esm/modules/statistics/LocalStatsCollector.js.map +1 -0
- package/dist/esm/modules/statistics/PreCallTest.js +15 -0
- package/dist/esm/modules/statistics/PreCallTest.js.map +1 -0
- package/dist/esm/modules/statistics/RTPStatsCollector.js +601 -0
- package/dist/esm/modules/statistics/RTPStatsCollector.js.map +1 -0
- package/dist/esm/modules/statistics/SpeakerStats.js +163 -0
- package/dist/esm/modules/statistics/SpeakerStats.js.map +1 -0
- package/dist/esm/modules/statistics/SpeakerStatsCollector.js +161 -0
- package/dist/esm/modules/statistics/SpeakerStatsCollector.js.map +1 -0
- package/dist/esm/modules/statistics/constants.js +7 -0
- package/dist/esm/modules/statistics/constants.js.map +1 -0
- package/dist/esm/modules/statistics/statistics.js +362 -0
- package/dist/esm/modules/statistics/statistics.js.map +1 -0
- package/dist/esm/modules/util/AsyncQueue.js +102 -0
- package/dist/esm/modules/util/AsyncQueue.js.map +1 -0
- package/dist/esm/modules/util/Deferred.js +41 -0
- package/dist/esm/modules/util/Deferred.js.map +1 -0
- package/dist/esm/modules/util/EventEmitter.js +17 -0
- package/dist/esm/modules/util/EventEmitter.js.map +1 -0
- package/dist/esm/modules/util/EventEmitterForwarder.js +52 -0
- package/dist/esm/modules/util/EventEmitterForwarder.js.map +1 -0
- package/dist/esm/modules/util/Listenable.js +106 -0
- package/dist/esm/modules/util/Listenable.js.map +1 -0
- package/dist/esm/modules/util/MathUtil.js +103 -0
- package/dist/esm/modules/util/MathUtil.js.map +1 -0
- package/dist/esm/modules/util/RandomUtil.js +66 -0
- package/dist/esm/modules/util/RandomUtil.js.map +1 -0
- package/dist/esm/modules/util/Retry.js +15 -0
- package/dist/esm/modules/util/Retry.js.map +1 -0
- package/dist/esm/modules/util/ScriptUtil.js +58 -0
- package/dist/esm/modules/util/ScriptUtil.js.map +1 -0
- package/dist/esm/modules/util/StringUtils.js +21 -0
- package/dist/esm/modules/util/StringUtils.js.map +1 -0
- package/dist/esm/modules/util/TestUtils.js +14 -0
- package/dist/esm/modules/util/TestUtils.js.map +1 -0
- package/dist/esm/modules/util/UsernameGenerator.js +436 -0
- package/dist/esm/modules/util/UsernameGenerator.js.map +1 -0
- package/dist/esm/modules/util/XMLUtils.js +135 -0
- package/dist/esm/modules/util/XMLUtils.js.map +1 -0
- package/dist/esm/modules/version/ComponentsVersions.js +52 -0
- package/dist/esm/modules/version/ComponentsVersions.js.map +1 -0
- package/dist/esm/modules/videosipgw/JitsiVideoSIPGWSession.js +137 -0
- package/dist/esm/modules/videosipgw/JitsiVideoSIPGWSession.js.map +1 -0
- package/dist/esm/modules/videosipgw/VideoSIPGW.js +102 -0
- package/dist/esm/modules/videosipgw/VideoSIPGW.js.map +1 -0
- package/dist/esm/modules/videosipgw/VideoSIPGWConstants.js +65 -0
- package/dist/esm/modules/videosipgw/VideoSIPGWConstants.js.map +1 -0
- package/dist/esm/modules/watchRTC/WatchRTC.js +69 -0
- package/dist/esm/modules/watchRTC/WatchRTC.js.map +1 -0
- package/dist/esm/modules/watchRTC/functions.js +31 -0
- package/dist/esm/modules/watchRTC/functions.js.map +1 -0
- package/dist/esm/modules/watchRTC/interfaces.js +2 -0
- package/dist/esm/modules/watchRTC/interfaces.js.map +1 -0
- package/dist/esm/modules/webaudio/AudioMixer.js +74 -0
- package/dist/esm/modules/webaudio/AudioMixer.js.map +1 -0
- package/dist/esm/modules/webaudio/WebAudioUtils.js +13 -0
- package/dist/esm/modules/webaudio/WebAudioUtils.js.map +1 -0
- package/dist/esm/modules/xmpp/AVModeration.js +156 -0
- package/dist/esm/modules/xmpp/AVModeration.js.map +1 -0
- package/dist/esm/modules/xmpp/BreakoutRooms.js +230 -0
- package/dist/esm/modules/xmpp/BreakoutRooms.js.map +1 -0
- package/dist/esm/modules/xmpp/Caps.js +223 -0
- package/dist/esm/modules/xmpp/Caps.js.map +1 -0
- package/dist/esm/modules/xmpp/ChatRoom.js +1877 -0
- package/dist/esm/modules/xmpp/ChatRoom.js.map +1 -0
- package/dist/esm/modules/xmpp/ConnectionPlugin.js +37 -0
- package/dist/esm/modules/xmpp/ConnectionPlugin.js.map +1 -0
- package/dist/esm/modules/xmpp/FileSharing.js +95 -0
- package/dist/esm/modules/xmpp/FileSharing.js.map +1 -0
- package/dist/esm/modules/xmpp/JingleHelperFunctions.js +168 -0
- package/dist/esm/modules/xmpp/JingleHelperFunctions.js.map +1 -0
- package/dist/esm/modules/xmpp/JingleSession.js +166 -0
- package/dist/esm/modules/xmpp/JingleSession.js.map +1 -0
- package/dist/esm/modules/xmpp/JingleSessionPC.js +1969 -0
- package/dist/esm/modules/xmpp/JingleSessionPC.js.map +1 -0
- package/dist/esm/modules/xmpp/JingleSessionState.js +23 -0
- package/dist/esm/modules/xmpp/JingleSessionState.js.map +1 -0
- package/dist/esm/modules/xmpp/Lobby.js +384 -0
- package/dist/esm/modules/xmpp/Lobby.js.map +1 -0
- package/dist/esm/modules/xmpp/MediaSessionEvents.js +12 -0
- package/dist/esm/modules/xmpp/MediaSessionEvents.js.map +1 -0
- package/dist/esm/modules/xmpp/MockClasses.js +77 -0
- package/dist/esm/modules/xmpp/MockClasses.js.map +1 -0
- package/dist/esm/modules/xmpp/Polls.js +87 -0
- package/dist/esm/modules/xmpp/Polls.js.map +1 -0
- package/dist/esm/modules/xmpp/ResumeTask.js +149 -0
- package/dist/esm/modules/xmpp/ResumeTask.js.map +1 -0
- package/dist/esm/modules/xmpp/RoomMetadata.js +96 -0
- package/dist/esm/modules/xmpp/RoomMetadata.js.map +1 -0
- package/dist/esm/modules/xmpp/SignalingLayerImpl.js +313 -0
- package/dist/esm/modules/xmpp/SignalingLayerImpl.js.map +1 -0
- package/dist/esm/modules/xmpp/StropheErrorHandler.js +53 -0
- package/dist/esm/modules/xmpp/StropheErrorHandler.js.map +1 -0
- package/dist/esm/modules/xmpp/StropheLastSuccess.js +52 -0
- package/dist/esm/modules/xmpp/StropheLastSuccess.js.map +1 -0
- package/dist/esm/modules/xmpp/XmppConnection.js +579 -0
- package/dist/esm/modules/xmpp/XmppConnection.js.map +1 -0
- package/dist/esm/modules/xmpp/moderator.js +524 -0
- package/dist/esm/modules/xmpp/moderator.js.map +1 -0
- package/dist/esm/modules/xmpp/sha1.js +165 -0
- package/dist/esm/modules/xmpp/sha1.js.map +1 -0
- package/dist/esm/modules/xmpp/strophe.disco.js +222 -0
- package/dist/esm/modules/xmpp/strophe.disco.js.map +1 -0
- package/dist/esm/modules/xmpp/strophe.emuc.js +206 -0
- package/dist/esm/modules/xmpp/strophe.emuc.js.map +1 -0
- package/dist/esm/modules/xmpp/strophe.jingle.js +404 -0
- package/dist/esm/modules/xmpp/strophe.jingle.js.map +1 -0
- package/dist/esm/modules/xmpp/strophe.logger.js +44 -0
- package/dist/esm/modules/xmpp/strophe.logger.js.map +1 -0
- package/dist/esm/modules/xmpp/strophe.ping.js +170 -0
- package/dist/esm/modules/xmpp/strophe.ping.js.map +1 -0
- package/dist/esm/modules/xmpp/strophe.rayo.js +117 -0
- package/dist/esm/modules/xmpp/strophe.rayo.js.map +1 -0
- package/dist/esm/modules/xmpp/strophe.stream-management.js +365 -0
- package/dist/esm/modules/xmpp/strophe.stream-management.js.map +1 -0
- package/dist/esm/modules/xmpp/strophe.util.js +116 -0
- package/dist/esm/modules/xmpp/strophe.util.js.map +1 -0
- package/dist/esm/modules/xmpp/xmpp.js +973 -0
- package/dist/esm/modules/xmpp/xmpp.js.map +1 -0
- package/dist/esm/service/RTC/BridgeVideoType.js +24 -0
- package/dist/esm/service/RTC/BridgeVideoType.js.map +1 -0
- package/dist/esm/service/RTC/CameraFacingMode.js +21 -0
- package/dist/esm/service/RTC/CameraFacingMode.js.map +1 -0
- package/dist/esm/service/RTC/CodecMimeType.js +36 -0
- package/dist/esm/service/RTC/CodecMimeType.js.map +1 -0
- package/dist/esm/service/RTC/MediaDirection.js +23 -0
- package/dist/esm/service/RTC/MediaDirection.js.map +1 -0
- package/dist/esm/service/RTC/MediaType.js +20 -0
- package/dist/esm/service/RTC/MediaType.js.map +1 -0
- package/dist/esm/service/RTC/RTCEvents.js +111 -0
- package/dist/esm/service/RTC/RTCEvents.js.map +1 -0
- package/dist/esm/service/RTC/ReceiverAudioSubscription.js +27 -0
- package/dist/esm/service/RTC/ReceiverAudioSubscription.js.map +1 -0
- package/dist/esm/service/RTC/Resolutions.js +56 -0
- package/dist/esm/service/RTC/Resolutions.js.map +1 -0
- package/dist/esm/service/RTC/SignalingEvents.js +42 -0
- package/dist/esm/service/RTC/SignalingEvents.js.map +1 -0
- package/dist/esm/service/RTC/SignalingLayer.js +153 -0
- package/dist/esm/service/RTC/SignalingLayer.js.map +1 -0
- package/dist/esm/service/RTC/StandardVideoQualitySettings.js +180 -0
- package/dist/esm/service/RTC/StandardVideoQualitySettings.js.map +1 -0
- package/dist/esm/service/RTC/VideoEncoderScalabilityMode.js +36 -0
- package/dist/esm/service/RTC/VideoEncoderScalabilityMode.js.map +1 -0
- package/dist/esm/service/RTC/VideoType.js +19 -0
- package/dist/esm/service/RTC/VideoType.js.map +1 -0
- package/dist/esm/service/authentication/AuthenticationEvents.js +13 -0
- package/dist/esm/service/authentication/AuthenticationEvents.js.map +1 -0
- package/dist/esm/service/connectivity/ConnectionQualityEvents.js +13 -0
- package/dist/esm/service/connectivity/ConnectionQualityEvents.js.map +1 -0
- package/dist/esm/service/connectivity/Constants.js +3 -0
- package/dist/esm/service/connectivity/Constants.js.map +1 -0
- package/dist/esm/service/e2eping/E2ePingEvents.js +8 -0
- package/dist/esm/service/e2eping/E2ePingEvents.js.map +1 -0
- package/dist/esm/service/statistics/AnalyticsEvents.js +521 -0
- package/dist/esm/service/statistics/AnalyticsEvents.js.map +1 -0
- package/dist/esm/service/statistics/Events.js +36 -0
- package/dist/esm/service/statistics/Events.js.map +1 -0
- package/dist/esm/service/statistics/constants.js +2 -0
- package/dist/esm/service/statistics/constants.js.map +1 -0
- package/dist/esm/service/xmpp/XMPPEvents.js +359 -0
- package/dist/esm/service/xmpp/XMPPEvents.js.map +1 -0
- package/dist/esm/service/xmpp/XMPPExtensioProtocols.js +64 -0
- package/dist/esm/service/xmpp/XMPPExtensioProtocols.js.map +1 -0
- package/dist/esm/test-setup-polyfill.js +34 -0
- package/dist/esm/test-setup-polyfill.js.map +1 -0
- package/dist/esm/tools/gen-version.js +15 -0
- package/dist/esm/tools/gen-version.js.map +1 -0
- package/dist/esm/version.js +3 -0
- package/dist/esm/version.js.map +1 -0
- package/dist/umd/lib-jitsi-meet.e2ee-worker.js +484 -0
- package/dist/umd/lib-jitsi-meet.min.js +3 -0
- package/dist/umd/lib-jitsi-meet.min.js.LICENSE.txt +18 -0
- package/dist/umd/lib-jitsi-meet.min.map +1 -0
- package/package.json +93 -0
- 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"}
|