@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,453 @@
|
|
|
1
|
+
import { getLogger } from '@jitsi/logger';
|
|
2
|
+
import { JitsiConferenceEvents } from '../../JitsiConferenceEvents';
|
|
3
|
+
import { JitsiTrackEvents } from '../../JitsiTrackEvents';
|
|
4
|
+
import { RTCEvents } from '../../service/RTC/RTCEvents';
|
|
5
|
+
import { createTrackStreamingStatusEvent } from '../../service/statistics/AnalyticsEvents';
|
|
6
|
+
import RTCStats from '../RTCStats/RTCStats';
|
|
7
|
+
import { RTCStatsEvents } from '../RTCStats/RTCStatsEvents';
|
|
8
|
+
import browser from '../browser';
|
|
9
|
+
import Statistics from '../statistics/statistics';
|
|
10
|
+
/** Track streaming statuses. */
|
|
11
|
+
export var TrackStreamingStatus;
|
|
12
|
+
(function (TrackStreamingStatus) {
|
|
13
|
+
/**
|
|
14
|
+
* Status indicating that streaming is currently active.
|
|
15
|
+
*/
|
|
16
|
+
TrackStreamingStatus["ACTIVE"] = "active";
|
|
17
|
+
/**
|
|
18
|
+
* Status indicating that streaming is currently inactive.
|
|
19
|
+
* Inactive means the streaming was stopped on purpose from the bridge, like exiting forwarded sources or
|
|
20
|
+
* adaptivity decided to drop video because of not enough bandwidth.
|
|
21
|
+
*/
|
|
22
|
+
TrackStreamingStatus["INACTIVE"] = "inactive";
|
|
23
|
+
/**
|
|
24
|
+
* Status indicating that streaming is currently interrupted.
|
|
25
|
+
*/
|
|
26
|
+
TrackStreamingStatus["INTERRUPTED"] = "interrupted";
|
|
27
|
+
/**
|
|
28
|
+
* Status indicating that streaming is currently restoring.
|
|
29
|
+
*/
|
|
30
|
+
TrackStreamingStatus["RESTORING"] = "restoring";
|
|
31
|
+
})(TrackStreamingStatus || (TrackStreamingStatus = {}));
|
|
32
|
+
const logger = getLogger('connectivity:TrackStreamingStatus');
|
|
33
|
+
/**
|
|
34
|
+
* Default value of 500 milliseconds for {@link TrackStreamingStatusImpl.outOfForwardedSourcesTimeout}.
|
|
35
|
+
*/
|
|
36
|
+
const DEFAULT_NOT_IN_FORWARDED_SOURCES_TIMEOUT = 500;
|
|
37
|
+
/**
|
|
38
|
+
* Default value of 2500 milliseconds for {@link TrackStreamingStatusImpl.p2pRtcMuteTimeout}.
|
|
39
|
+
*/
|
|
40
|
+
const DEFAULT_P2P_RTC_MUTE_TIMEOUT = 2500;
|
|
41
|
+
/**
|
|
42
|
+
* Default value of 10000 milliseconds for {@link TrackStreamingStatusImpl.rtcMuteTimeout}.
|
|
43
|
+
*/
|
|
44
|
+
const DEFAULT_RTC_MUTE_TIMEOUT = 10000;
|
|
45
|
+
/**
|
|
46
|
+
* The time to wait a track to be restored. Track which was out of forwarded sources should be inactive and when
|
|
47
|
+
* entering forwarded sources it becomes restoring and when data is received from bridge it will become active, but if
|
|
48
|
+
* no data is received for some time we set status of that track streaming to interrupted.
|
|
49
|
+
*/
|
|
50
|
+
const DEFAULT_RESTORING_TIMEOUT = 10000;
|
|
51
|
+
/**
|
|
52
|
+
* Class is responsible for emitting JitsiTrackEvents.TRACK_STREAMING_STATUS_CHANGED events.
|
|
53
|
+
*/
|
|
54
|
+
export class TrackStreamingStatusImpl {
|
|
55
|
+
/* eslint-disable max-params */
|
|
56
|
+
/**
|
|
57
|
+
* Calculates the new {@link TrackStreamingStatus} based on the values given for some specific remote track. It is
|
|
58
|
+
* assumed that the conference is currently in the JVB mode (in contrary to the P2P mode)
|
|
59
|
+
* @param isInForwardedSources - indicates whether the track is in the forwarded sources set. When set to
|
|
60
|
+
* false it means that JVB is not sending any video for the track.
|
|
61
|
+
* @param isRestoringTimedout - if true it means that the track has been outside of forwarded sources too
|
|
62
|
+
* long to be considered {@link TrackStreamingStatus.RESTORING}.
|
|
63
|
+
* @param isVideoMuted - true if the track is video muted and we should not expect to receive any video.
|
|
64
|
+
* @param isVideoTrackFrozen - if the current browser support video frozen detection then it will be set to
|
|
65
|
+
* true when the video track is frozen. If the current browser does not support frozen detection the it's always
|
|
66
|
+
* false.
|
|
67
|
+
* @return {TrackStreamingStatus} the new streaming status for the track for whom the values above were provided.
|
|
68
|
+
* @private
|
|
69
|
+
*/
|
|
70
|
+
static _getNewStateForJvbMode(isInForwardedSources, isRestoringTimedout, isVideoMuted, isVideoTrackFrozen) {
|
|
71
|
+
// We are currently not checking the endpoint connection status received from the JVB.
|
|
72
|
+
if (isVideoMuted) {
|
|
73
|
+
// If the connection is active according to JVB and the track is video muted there is no way for the
|
|
74
|
+
// connection to be inactive, because the detection logic below only makes sense for video.
|
|
75
|
+
return TrackStreamingStatus.ACTIVE;
|
|
76
|
+
}
|
|
77
|
+
// Logic when isVideoTrackFrozen is supported
|
|
78
|
+
if (browser.supportsVideoMuteOnConnInterrupted()) {
|
|
79
|
+
if (!isVideoTrackFrozen) {
|
|
80
|
+
// If the video is playing we're good
|
|
81
|
+
return TrackStreamingStatus.ACTIVE;
|
|
82
|
+
}
|
|
83
|
+
else if (isInForwardedSources) {
|
|
84
|
+
return isRestoringTimedout ? TrackStreamingStatus.INTERRUPTED : TrackStreamingStatus.RESTORING;
|
|
85
|
+
}
|
|
86
|
+
return TrackStreamingStatus.INACTIVE;
|
|
87
|
+
}
|
|
88
|
+
// Because this browser is incapable of detecting frozen video we must rely on the forwarded sources value
|
|
89
|
+
return isInForwardedSources ? TrackStreamingStatus.ACTIVE : TrackStreamingStatus.INACTIVE;
|
|
90
|
+
}
|
|
91
|
+
/* eslint-enable max-params */
|
|
92
|
+
/**
|
|
93
|
+
* In P2P mode we don't care about any values coming from the JVB and the streaming status can be only active or
|
|
94
|
+
* interrupted.
|
|
95
|
+
* @param isVideoMuted - true if video muted
|
|
96
|
+
* @param isVideoTrackFrozen - true if the video track for the remote track is currently frozen. If the
|
|
97
|
+
* current browser does not support video frozen detection then it's always false.
|
|
98
|
+
* @return {TrackStreamingStatus}
|
|
99
|
+
* @private
|
|
100
|
+
*/
|
|
101
|
+
static _getNewStateForP2PMode(isVideoMuted, isVideoTrackFrozen) {
|
|
102
|
+
if (!browser.supportsVideoMuteOnConnInterrupted()) {
|
|
103
|
+
// There's no way to detect problems in P2P when there's no video track frozen detection...
|
|
104
|
+
return TrackStreamingStatus.ACTIVE;
|
|
105
|
+
}
|
|
106
|
+
return isVideoMuted || !isVideoTrackFrozen
|
|
107
|
+
? TrackStreamingStatus.ACTIVE : TrackStreamingStatus.INTERRUPTED;
|
|
108
|
+
}
|
|
109
|
+
/**
|
|
110
|
+
* Creates new instance of <tt>TrackStreamingStatus</tt>.
|
|
111
|
+
*
|
|
112
|
+
* @constructor
|
|
113
|
+
* @param rtc - the RTC service instance
|
|
114
|
+
* @param conference - parent conference instance // TODO: Needs JitsiConference Type
|
|
115
|
+
* @param {Object} options
|
|
116
|
+
* @param {number} [options.p2pRtcMuteTimeout=2500] custom value for
|
|
117
|
+
* {@link TrackStreamingStatusImpl.p2pRtcMuteTimeout}.
|
|
118
|
+
* @param {number} [options.rtcMuteTimeout=2000] custom value for
|
|
119
|
+
* {@link TrackStreamingStatusImpl.rtcMuteTimeout}.
|
|
120
|
+
* @param {number} [options.outOfForwardedSourcesTimeout=500] custom value for
|
|
121
|
+
* {@link TrackStreamingStatusImpl.outOfForwardedSourcesTimeout}.
|
|
122
|
+
*/
|
|
123
|
+
constructor(rtc, conference, track, options) {
|
|
124
|
+
this.rtc = rtc;
|
|
125
|
+
this.conference = conference;
|
|
126
|
+
this.track = track;
|
|
127
|
+
this.restoringTimer = null;
|
|
128
|
+
this.rtcMutedTimestamp = null;
|
|
129
|
+
this.streamingStatusMap = {};
|
|
130
|
+
this.trackTimer = null;
|
|
131
|
+
this.outOfForwardedSourcesTimeout = typeof options.outOfForwardedSourcesTimeout === 'number'
|
|
132
|
+
? options.outOfForwardedSourcesTimeout : DEFAULT_NOT_IN_FORWARDED_SOURCES_TIMEOUT;
|
|
133
|
+
this.p2pRtcMuteTimeout = typeof options.p2pRtcMuteTimeout === 'number'
|
|
134
|
+
? options.p2pRtcMuteTimeout : DEFAULT_P2P_RTC_MUTE_TIMEOUT;
|
|
135
|
+
this.rtcMuteTimeout = typeof options.rtcMuteTimeout === 'number'
|
|
136
|
+
? options.rtcMuteTimeout : DEFAULT_RTC_MUTE_TIMEOUT;
|
|
137
|
+
logger.info(`RtcMuteTimeout set to: ${this.rtcMuteTimeout}`);
|
|
138
|
+
}
|
|
139
|
+
/**
|
|
140
|
+
* Gets the video frozen timeout for given source name.
|
|
141
|
+
* @return how long are we going to wait since RTC video muted even, before a video track is considered
|
|
142
|
+
* frozen.
|
|
143
|
+
* @private
|
|
144
|
+
*/
|
|
145
|
+
_getVideoFrozenTimeout() {
|
|
146
|
+
const sourceName = this.track.getSourceName();
|
|
147
|
+
return this.rtc.isInForwardedSources(sourceName)
|
|
148
|
+
? this.rtcMuteTimeout
|
|
149
|
+
: this.conference.isP2PActive() ? this.p2pRtcMuteTimeout : this.outOfForwardedSourcesTimeout;
|
|
150
|
+
}
|
|
151
|
+
/**
|
|
152
|
+
* Initializes <tt>TrackStreamingStatus</tt> and bind required event listeners.
|
|
153
|
+
*/
|
|
154
|
+
init() {
|
|
155
|
+
// Handles P2P status changes
|
|
156
|
+
this._onP2PStatus = this.figureOutStreamingStatus.bind(this);
|
|
157
|
+
this.conference.on(JitsiConferenceEvents.P2P_STATUS, this._onP2PStatus);
|
|
158
|
+
// Used to send analytics events for the participant that left the call.
|
|
159
|
+
this._onUserLeft = this.onUserLeft.bind(this);
|
|
160
|
+
this.conference.on(JitsiConferenceEvents.USER_LEFT, this._onUserLeft);
|
|
161
|
+
// On some browsers MediaStreamTrack trigger "onmute"/"onunmute" events for video type tracks when they stop
|
|
162
|
+
// receiving data which is often a sign that remote user is having connectivity issues.
|
|
163
|
+
if (browser.supportsVideoMuteOnConnInterrupted()) {
|
|
164
|
+
this._onTrackRtcMuted = this.onTrackRtcMuted.bind(this);
|
|
165
|
+
this.rtc.addListener(RTCEvents.REMOTE_TRACK_MUTE, this._onTrackRtcMuted);
|
|
166
|
+
this._onTrackRtcUnmuted = this.onTrackRtcUnmuted.bind(this);
|
|
167
|
+
this.rtc.addListener(RTCEvents.REMOTE_TRACK_UNMUTE, this._onTrackRtcUnmuted);
|
|
168
|
+
// Listened which will be bound to JitsiRemoteTrack to listen for signalling mute/unmute events.
|
|
169
|
+
this._onSignallingMuteChanged = this.onSignallingMuteChanged.bind(this);
|
|
170
|
+
this.track.on(JitsiTrackEvents.TRACK_MUTE_CHANGED, this._onSignallingMuteChanged);
|
|
171
|
+
// Used to send an analytics event when the video type changes.
|
|
172
|
+
this._onTrackVideoTypeChanged = this.onTrackVideoTypeChanged.bind(this);
|
|
173
|
+
this.track.on(JitsiTrackEvents.TRACK_VIDEOTYPE_CHANGED, this._onTrackVideoTypeChanged);
|
|
174
|
+
}
|
|
175
|
+
this._onForwardedSourcesChanged = this.onForwardedSourcesChanged.bind(this);
|
|
176
|
+
this.conference.on(JitsiConferenceEvents.FORWARDED_SOURCES_CHANGED, this._onForwardedSourcesChanged);
|
|
177
|
+
this._onLastNValueChanged = this.figureOutStreamingStatus.bind(this);
|
|
178
|
+
this.rtc.on(RTCEvents.LASTN_VALUE_CHANGED, this._onLastNValueChanged);
|
|
179
|
+
}
|
|
180
|
+
/**
|
|
181
|
+
* Removes all event listeners and disposes of all resources held by this instance.
|
|
182
|
+
*/
|
|
183
|
+
dispose() {
|
|
184
|
+
if (browser.supportsVideoMuteOnConnInterrupted()) {
|
|
185
|
+
this.rtc.removeListener(RTCEvents.REMOTE_TRACK_MUTE, this._onTrackRtcMuted);
|
|
186
|
+
this.rtc.removeListener(RTCEvents.REMOTE_TRACK_UNMUTE, this._onTrackRtcUnmuted);
|
|
187
|
+
this.track.off(JitsiTrackEvents.TRACK_MUTE_CHANGED, this._onSignallingMuteChanged);
|
|
188
|
+
this.track.off(JitsiTrackEvents.TRACK_VIDEOTYPE_CHANGED, this._onTrackVideoTypeChanged);
|
|
189
|
+
}
|
|
190
|
+
this.conference.off(JitsiConferenceEvents.FORWARDED_SOURCES_CHANGED, this._onForwardedSourcesChanged);
|
|
191
|
+
this.conference.off(JitsiConferenceEvents.P2P_STATUS, this._onP2PStatus);
|
|
192
|
+
this.conference.off(JitsiConferenceEvents.USER_LEFT, this._onUserLeft);
|
|
193
|
+
this.rtc.removeListener(RTCEvents.LASTN_VALUE_CHANGED, this._onLastNValueChanged);
|
|
194
|
+
this.clearTimeout();
|
|
195
|
+
this.clearRtcMutedTimestamp();
|
|
196
|
+
this.maybeSendTrackStreamingStatusEvent(Date.now());
|
|
197
|
+
this.figureOutStreamingStatus();
|
|
198
|
+
}
|
|
199
|
+
/**
|
|
200
|
+
* Changes streaming status.
|
|
201
|
+
* @param newStatus
|
|
202
|
+
*/
|
|
203
|
+
_changeStreamingStatus(newStatus) {
|
|
204
|
+
if (this.track.getTrackStreamingStatus() !== newStatus) {
|
|
205
|
+
const sourceName = this.track.getSourceName();
|
|
206
|
+
this.track._setTrackStreamingStatus(newStatus);
|
|
207
|
+
logger.debug(`Emit track streaming status(${Date.now()}) ${sourceName}: ${newStatus}`);
|
|
208
|
+
// It's common for the event listeners to access the JitsiRemoteTrack. Thus pass it as a parameter here.
|
|
209
|
+
this.track.emit(JitsiTrackEvents.TRACK_STREAMING_STATUS_CHANGED, this.track, newStatus);
|
|
210
|
+
if (newStatus === TrackStreamingStatus.INACTIVE) {
|
|
211
|
+
RTCStats.sendStatsEntry(RTCStatsEvents.REMOTE_SOURCE_SUSPENDED_EVENT);
|
|
212
|
+
}
|
|
213
|
+
else if (newStatus === TrackStreamingStatus.INTERRUPTED) {
|
|
214
|
+
RTCStats.sendStatsEntry(RTCStatsEvents.REMOTE_SOURCE_INTERRUPTED_EVENT);
|
|
215
|
+
}
|
|
216
|
+
}
|
|
217
|
+
}
|
|
218
|
+
/**
|
|
219
|
+
* Reset the postponed "streaming interrupted" event which was previously scheduled as a timeout on RTC 'onmute'
|
|
220
|
+
* event.
|
|
221
|
+
*/
|
|
222
|
+
clearTimeout() {
|
|
223
|
+
if (this.trackTimer) {
|
|
224
|
+
window.clearTimeout(this.trackTimer);
|
|
225
|
+
this.trackTimer = null;
|
|
226
|
+
}
|
|
227
|
+
}
|
|
228
|
+
/**
|
|
229
|
+
* Clears the timestamp of the RTC muted event for remote video track.
|
|
230
|
+
*/
|
|
231
|
+
clearRtcMutedTimestamp() {
|
|
232
|
+
this.rtcMutedTimestamp = null;
|
|
233
|
+
}
|
|
234
|
+
/**
|
|
235
|
+
* Checks if track is considered frozen.
|
|
236
|
+
* @return <tt>true</tt> if the video has frozen or <tt>false</tt> when it's either not considered frozen
|
|
237
|
+
* (yet) or if freeze detection is not supported by the current browser.
|
|
238
|
+
*
|
|
239
|
+
* FIXME merge this logic with NO_DATA_FROM_SOURCE event implemented in JitsiLocalTrack by extending the event to
|
|
240
|
+
* the remote track and allowing to set different timeout for local and remote tracks.
|
|
241
|
+
*/
|
|
242
|
+
isVideoTrackFrozen() {
|
|
243
|
+
if (!browser.supportsVideoMuteOnConnInterrupted()) {
|
|
244
|
+
return false;
|
|
245
|
+
}
|
|
246
|
+
const isVideoRTCMuted = this.track.isWebRTCTrackMuted();
|
|
247
|
+
const rtcMutedTimestamp = this.rtcMutedTimestamp;
|
|
248
|
+
const timeout = this._getVideoFrozenTimeout();
|
|
249
|
+
return isVideoRTCMuted && typeof rtcMutedTimestamp === 'number' && (Date.now() - rtcMutedTimestamp) >= timeout;
|
|
250
|
+
}
|
|
251
|
+
/**
|
|
252
|
+
* Figures out (and updates) the current streaming status for the track identified by the source name.
|
|
253
|
+
*/
|
|
254
|
+
figureOutStreamingStatus() {
|
|
255
|
+
const sourceName = this.track.getSourceName();
|
|
256
|
+
const inP2PMode = this.conference.isP2PActive();
|
|
257
|
+
const isRestoringTimedOut = this._isRestoringTimedout();
|
|
258
|
+
const audioOnlyMode = this.conference.getLastN() === 0;
|
|
259
|
+
// NOTE Overriding videoMuted to true for audioOnlyMode should disable any detection based on video playback or
|
|
260
|
+
// forwarded sources.
|
|
261
|
+
const isVideoMuted = this.track.isMuted() || audioOnlyMode;
|
|
262
|
+
const isVideoTrackFrozen = this.isVideoTrackFrozen();
|
|
263
|
+
const isInForwardedSources = this.rtc.isInForwardedSources(sourceName);
|
|
264
|
+
const newState = inP2PMode
|
|
265
|
+
? TrackStreamingStatusImpl._getNewStateForP2PMode(isVideoMuted, isVideoTrackFrozen)
|
|
266
|
+
: TrackStreamingStatusImpl._getNewStateForJvbMode(isInForwardedSources, isRestoringTimedOut, isVideoMuted, isVideoTrackFrozen);
|
|
267
|
+
// if the new state is not restoring clear timers and timestamps that we use to track the restoring state
|
|
268
|
+
if (newState !== TrackStreamingStatus.RESTORING) {
|
|
269
|
+
this._clearRestoringTimer();
|
|
270
|
+
}
|
|
271
|
+
logger.debug(`Figure out conn status for ${sourceName}, is video muted: ${isVideoMuted} video track frozen: ${isVideoTrackFrozen} p2p mode: ${inP2PMode} is in forwarded sources: ${isInForwardedSources} currentStatus => newStatus: ${this.track.getTrackStreamingStatus()} => ${newState}`);
|
|
272
|
+
const oldStreamingStatus = this.streamingStatusMap || {};
|
|
273
|
+
// Send an analytics event (guard on either the p2p flag or the streaming status has changed since the last
|
|
274
|
+
// time this code block run).
|
|
275
|
+
if (!('p2p' in oldStreamingStatus)
|
|
276
|
+
|| !('streamingStatus' in oldStreamingStatus)
|
|
277
|
+
|| oldStreamingStatus.p2p !== inP2PMode
|
|
278
|
+
|| oldStreamingStatus.streamingStatus !== newState) {
|
|
279
|
+
const nowMs = Date.now();
|
|
280
|
+
this.maybeSendTrackStreamingStatusEvent(nowMs);
|
|
281
|
+
this.streamingStatusMap = {
|
|
282
|
+
...oldStreamingStatus,
|
|
283
|
+
p2p: inP2PMode,
|
|
284
|
+
startedMs: nowMs,
|
|
285
|
+
streamingStatus: newState
|
|
286
|
+
};
|
|
287
|
+
// sometimes (always?) we're late to hook the TRACK_VIDEOTYPE_CHANGED event and the video type is not in
|
|
288
|
+
// oldStreamingStatus.
|
|
289
|
+
if (!('videoType' in this.streamingStatusMap)) {
|
|
290
|
+
this.streamingStatusMap.videoType = this.track.getVideoType();
|
|
291
|
+
}
|
|
292
|
+
}
|
|
293
|
+
this._changeStreamingStatus(newState);
|
|
294
|
+
}
|
|
295
|
+
/**
|
|
296
|
+
* Computes the duration of the current streaming status for the track (i.e. 15 seconds in the INTERRUPTED state)
|
|
297
|
+
* and sends a track streaming status event.
|
|
298
|
+
* @param nowMs - The current time (in millis).
|
|
299
|
+
*/
|
|
300
|
+
maybeSendTrackStreamingStatusEvent(nowMs) {
|
|
301
|
+
const trackStreamingStatus = this.streamingStatusMap;
|
|
302
|
+
if (trackStreamingStatus
|
|
303
|
+
&& 'startedMs' in trackStreamingStatus
|
|
304
|
+
&& 'videoType' in trackStreamingStatus
|
|
305
|
+
&& 'streamingStatus' in trackStreamingStatus
|
|
306
|
+
&& 'p2p' in trackStreamingStatus) {
|
|
307
|
+
trackStreamingStatus.value = nowMs - trackStreamingStatus.startedMs;
|
|
308
|
+
Statistics.sendAnalytics(createTrackStreamingStatusEvent(trackStreamingStatus));
|
|
309
|
+
}
|
|
310
|
+
}
|
|
311
|
+
/**
|
|
312
|
+
* On change in forwarded sources set check all leaving and entering track to change their corresponding statuses.
|
|
313
|
+
*
|
|
314
|
+
* @param leavingForwardedSources - The array of sourceName leaving forwarded sources.
|
|
315
|
+
* @param enteringForwardedSources - The array of sourceName entering forwarded sources.
|
|
316
|
+
* @param timestamp - The time in millis
|
|
317
|
+
* @private
|
|
318
|
+
*/
|
|
319
|
+
onForwardedSourcesChanged(leavingForwardedSources = [], enteringForwardedSources = [], timestamp) {
|
|
320
|
+
const sourceName = this.track.getSourceName();
|
|
321
|
+
// If the browser doesn't fire the mute/onmute events when the remote peer stops/starts sending media,
|
|
322
|
+
// calculate the streaming status for all the tracks since it won't get triggered automatically on the track
|
|
323
|
+
// that has started/stopped receiving media.
|
|
324
|
+
if (!browser.supportsVideoMuteOnConnInterrupted()) {
|
|
325
|
+
this.figureOutStreamingStatus();
|
|
326
|
+
}
|
|
327
|
+
if (leavingForwardedSources.includes(sourceName)) {
|
|
328
|
+
this.track._clearEnteredForwardedSourcesTimestamp();
|
|
329
|
+
this._clearRestoringTimer();
|
|
330
|
+
browser.supportsVideoMuteOnConnInterrupted() && this.figureOutStreamingStatus();
|
|
331
|
+
}
|
|
332
|
+
if (enteringForwardedSources.includes(sourceName)) {
|
|
333
|
+
// store the timestamp this track is entering forwarded sources
|
|
334
|
+
this.track._setEnteredForwardedSourcesTimestamp(timestamp);
|
|
335
|
+
browser.supportsVideoMuteOnConnInterrupted() && this.figureOutStreamingStatus();
|
|
336
|
+
}
|
|
337
|
+
}
|
|
338
|
+
/**
|
|
339
|
+
* Clears the restoring timer for video track and the timestamp for entering forwarded sources.
|
|
340
|
+
*/
|
|
341
|
+
_clearRestoringTimer() {
|
|
342
|
+
const rTimer = this.restoringTimer;
|
|
343
|
+
if (rTimer) {
|
|
344
|
+
clearTimeout(rTimer);
|
|
345
|
+
this.restoringTimer = null;
|
|
346
|
+
}
|
|
347
|
+
}
|
|
348
|
+
/**
|
|
349
|
+
* Checks whether a track had stayed enough in restoring state, compares current time and the time the track
|
|
350
|
+
* entered in forwarded sources. If it hasn't timedout and there is no timer added, add new timer in order to give
|
|
351
|
+
* it more time to become active or mark it as interrupted on next check.
|
|
352
|
+
*
|
|
353
|
+
* @returns <tt>true</tt> if the track was in restoring state more than the timeout
|
|
354
|
+
* ({@link DEFAULT_RESTORING_TIMEOUT}.) in order to set its status to interrupted.
|
|
355
|
+
* @private
|
|
356
|
+
*/
|
|
357
|
+
_isRestoringTimedout() {
|
|
358
|
+
const enteredForwardedSourcesTimestamp = this.track._getEnteredForwardedSourcesTimestamp();
|
|
359
|
+
if (enteredForwardedSourcesTimestamp
|
|
360
|
+
&& (Date.now() - enteredForwardedSourcesTimestamp) >= DEFAULT_RESTORING_TIMEOUT) {
|
|
361
|
+
return true;
|
|
362
|
+
}
|
|
363
|
+
// still haven't reached timeout, if there is no timer scheduled, schedule one so we can track the restoring
|
|
364
|
+
// state and change it after reaching the timeout
|
|
365
|
+
const rTimer = this.restoringTimer;
|
|
366
|
+
if (!rTimer) {
|
|
367
|
+
this.restoringTimer = setTimeout(() => this.figureOutStreamingStatus(), DEFAULT_RESTORING_TIMEOUT);
|
|
368
|
+
}
|
|
369
|
+
return false;
|
|
370
|
+
}
|
|
371
|
+
/** Checks whether a track is the current track. */
|
|
372
|
+
_isCurrentTrack(track) {
|
|
373
|
+
return track.getSourceName() === this.track.getSourceName();
|
|
374
|
+
}
|
|
375
|
+
/**
|
|
376
|
+
* Sends a last/final track streaming status event for the track of the user that left the conference.
|
|
377
|
+
* @param id - The id of the participant that left the conference.
|
|
378
|
+
*/
|
|
379
|
+
onUserLeft(id) {
|
|
380
|
+
if (this.track.getParticipantId() === id) {
|
|
381
|
+
this.maybeSendTrackStreamingStatusEvent(Date.now());
|
|
382
|
+
this.streamingStatusMap = {};
|
|
383
|
+
}
|
|
384
|
+
}
|
|
385
|
+
/**
|
|
386
|
+
* Handles RTC 'onmute' event for the video track.
|
|
387
|
+
*
|
|
388
|
+
* @param track - The video track for which 'onmute' event will be processed.
|
|
389
|
+
*/
|
|
390
|
+
onTrackRtcMuted(track) {
|
|
391
|
+
if (!this._isCurrentTrack(track)) {
|
|
392
|
+
return;
|
|
393
|
+
}
|
|
394
|
+
const sourceName = track.getSourceName();
|
|
395
|
+
logger.debug(`Detector track RTC muted: ${sourceName}`, Date.now());
|
|
396
|
+
this.rtcMutedTimestamp = Date.now();
|
|
397
|
+
if (!track.isMuted()) {
|
|
398
|
+
// If the user is not muted according to the signalling we'll give it some time, before the streaming
|
|
399
|
+
// interrupted event is triggered.
|
|
400
|
+
this.clearTimeout();
|
|
401
|
+
// The timeout is reduced when track is not in the forwarded sources
|
|
402
|
+
const timeout = this._getVideoFrozenTimeout();
|
|
403
|
+
this.trackTimer = window.setTimeout(() => {
|
|
404
|
+
logger.debug(`Set track RTC muted for: ${sourceName} after the timeout of ${timeout} ms`);
|
|
405
|
+
this.clearTimeout();
|
|
406
|
+
this.figureOutStreamingStatus();
|
|
407
|
+
}, timeout);
|
|
408
|
+
}
|
|
409
|
+
}
|
|
410
|
+
/**
|
|
411
|
+
* Handles RTC 'onunmute' event for the video track.
|
|
412
|
+
*
|
|
413
|
+
* @param track - The video track for which 'onunmute' event will be processed.
|
|
414
|
+
*/
|
|
415
|
+
onTrackRtcUnmuted(track) {
|
|
416
|
+
if (!this._isCurrentTrack(track)) {
|
|
417
|
+
return;
|
|
418
|
+
}
|
|
419
|
+
const sourceName = this.track.getSourceName();
|
|
420
|
+
logger.debug(`Detector track RTC unmuted: ${sourceName}`, Date.now());
|
|
421
|
+
this.clearTimeout();
|
|
422
|
+
this.clearRtcMutedTimestamp();
|
|
423
|
+
this.figureOutStreamingStatus();
|
|
424
|
+
}
|
|
425
|
+
/**
|
|
426
|
+
* Here the signalling "mute"/"unmute" events are processed.
|
|
427
|
+
*
|
|
428
|
+
* @param track - The remote video track for which the signalling mute/unmute event will be
|
|
429
|
+
* processed.
|
|
430
|
+
*/
|
|
431
|
+
onSignallingMuteChanged(track) {
|
|
432
|
+
if (!this._isCurrentTrack(track)) {
|
|
433
|
+
return;
|
|
434
|
+
}
|
|
435
|
+
this.figureOutStreamingStatus();
|
|
436
|
+
}
|
|
437
|
+
/**
|
|
438
|
+
* Sends a track streaming status event as a result of the video type changing.
|
|
439
|
+
* @deprecated this will go away with full multiple streams support
|
|
440
|
+
* @param type - The video type.
|
|
441
|
+
*/
|
|
442
|
+
onTrackVideoTypeChanged(type) {
|
|
443
|
+
const nowMs = Date.now();
|
|
444
|
+
this.maybeSendTrackStreamingStatusEvent(nowMs);
|
|
445
|
+
this.streamingStatusMap = {
|
|
446
|
+
...this.streamingStatusMap || {},
|
|
447
|
+
startedMs: nowMs,
|
|
448
|
+
videoType: type
|
|
449
|
+
};
|
|
450
|
+
}
|
|
451
|
+
}
|
|
452
|
+
export default TrackStreamingStatusImpl;
|
|
453
|
+
//# sourceMappingURL=TrackStreamingStatus.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"TrackStreamingStatus.js","sourceRoot":"","sources":["../../../../modules/connectivity/TrackStreamingStatus.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
import { getLogger } from '@jitsi/logger';
|
|
2
|
+
import { JitsiTrackEvents } from '../../JitsiTrackEvents';
|
|
3
|
+
import RTC from '../RTC/RTC';
|
|
4
|
+
import Statistics from '../statistics/statistics';
|
|
5
|
+
const logger = getLogger('vad:ActiveDeviceDetector');
|
|
6
|
+
// If after 3000 ms the detector did not find any active devices consider that there aren't any usable ones available
|
|
7
|
+
// i.e. audioLevel > 0.008
|
|
8
|
+
const DETECTION_TIMEOUT = 3000;
|
|
9
|
+
/**
|
|
10
|
+
* Go through all audio devices on the system and return one that is active, i.e. has audio signal.
|
|
11
|
+
*
|
|
12
|
+
* @returns Promise<IActiveDeviceInfo> - Object containing information about the found device.
|
|
13
|
+
*/
|
|
14
|
+
export default function getActiveAudioDevice() {
|
|
15
|
+
return new Promise(resolve => {
|
|
16
|
+
RTC.enumerateDevices((devices) => {
|
|
17
|
+
const audioDevices = devices.filter(device => device.kind === 'audioinput');
|
|
18
|
+
const devicePromiseArray = [];
|
|
19
|
+
for (const micDevice of audioDevices) {
|
|
20
|
+
const devicePromise = RTC.obtainAudioAndVideoPermissions({
|
|
21
|
+
devices: ['audio'],
|
|
22
|
+
micDeviceId: micDevice.deviceId
|
|
23
|
+
}).then((tracks) => {
|
|
24
|
+
// We expect a single device to be available when obtained from obtainAudioAndVideoPermissions
|
|
25
|
+
// that's why only take p.value[0].
|
|
26
|
+
const track = tracks[0];
|
|
27
|
+
Statistics.startLocalStats(track, track.setAudioLevel.bind(track));
|
|
28
|
+
return track;
|
|
29
|
+
});
|
|
30
|
+
devicePromiseArray.push(devicePromise);
|
|
31
|
+
}
|
|
32
|
+
Promise.allSettled(devicePromiseArray).then(outcomeArray => {
|
|
33
|
+
const successfulPromises = outcomeArray.filter(p => p.status === 'fulfilled');
|
|
34
|
+
const rejectedPromises = outcomeArray.filter(p => p.status === 'rejected');
|
|
35
|
+
const availableDevices = successfulPromises.map(p => p.value);
|
|
36
|
+
const rejectReasons = rejectedPromises.map(p => p.value);
|
|
37
|
+
for (const reason of rejectReasons) {
|
|
38
|
+
logger.error('Failed to acquire audio device with error: ', reason);
|
|
39
|
+
}
|
|
40
|
+
// Setup event handlers for monitored devices.
|
|
41
|
+
for (const device of availableDevices) {
|
|
42
|
+
device.on(JitsiTrackEvents.TRACK_AUDIO_LEVEL_CHANGED, audioLevel => {
|
|
43
|
+
// This is a very naive approach but works, a more accurate one would be to use rnnoise in
|
|
44
|
+
// order to limit the number of false positives. The 0.008 constant is due to how
|
|
45
|
+
// LocalStatsCollector from lib-jitsi-meet publishes audio-levels, in this case 0.008 denotes //
|
|
46
|
+
// no input.
|
|
47
|
+
if (audioLevel > 0.008) {
|
|
48
|
+
stopActiveDevices(availableDevices);
|
|
49
|
+
resolve({
|
|
50
|
+
deviceId: device.deviceId,
|
|
51
|
+
deviceLabel: device.getTrack().label
|
|
52
|
+
});
|
|
53
|
+
}
|
|
54
|
+
});
|
|
55
|
+
}
|
|
56
|
+
// Cancel the detection in case no devices was found with audioLevel > 0 in the set timeout.
|
|
57
|
+
setTimeout(() => {
|
|
58
|
+
stopActiveDevices(availableDevices);
|
|
59
|
+
resolve({
|
|
60
|
+
deviceId: '',
|
|
61
|
+
deviceLabel: ''
|
|
62
|
+
});
|
|
63
|
+
}, DETECTION_TIMEOUT);
|
|
64
|
+
});
|
|
65
|
+
});
|
|
66
|
+
});
|
|
67
|
+
}
|
|
68
|
+
/**
|
|
69
|
+
* Stop the streams of the provided JitsiLocalTracks.
|
|
70
|
+
*
|
|
71
|
+
* @param {Array<JitsiLocalTrack>} deviceList - Array of JitsiLocalTracks to stop.
|
|
72
|
+
* @returns {void}
|
|
73
|
+
*/
|
|
74
|
+
function stopActiveDevices(deviceList) {
|
|
75
|
+
for (const device of deviceList) {
|
|
76
|
+
device.stopStream();
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
//# sourceMappingURL=ActiveDeviceDetector.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ActiveDeviceDetector.js","sourceRoot":"","sources":["../../../../modules/detection/ActiveDeviceDetector.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
export var DetectionEvents;
|
|
2
|
+
(function (DetectionEvents) {
|
|
3
|
+
/** Event triggered by {@link NoAudioSignalDetector} when the local audio device associated with a JitsiConference
|
|
4
|
+
* starts receiving audio levels with the value of 0 meaning no audio is being captured on that device, or when
|
|
5
|
+
* it starts receiving audio levels !== 0 after being in a state of no audio.
|
|
6
|
+
* @event
|
|
7
|
+
* @type {boolean} - true when the current conference audio track has audio input false otherwise.
|
|
8
|
+
*/
|
|
9
|
+
DetectionEvents["AUDIO_INPUT_STATE_CHANGE"] = "audio_input_state_changed";
|
|
10
|
+
/**
|
|
11
|
+
* Event triggered by a audio detector indicating that its active state has changed from active to inactive or vice
|
|
12
|
+
* versa.
|
|
13
|
+
* @event
|
|
14
|
+
* @type {boolean} - true when service has changed to active false otherwise.
|
|
15
|
+
*/
|
|
16
|
+
DetectionEvents["DETECTOR_STATE_CHANGE"] = "detector_state_change";
|
|
17
|
+
/** Event triggered by NoAudioSignalDetector when the local audio device associated with a JitsiConference goes
|
|
18
|
+
* silent for a period of time, meaning that the device is either broken or hardware/software muted.
|
|
19
|
+
* @event
|
|
20
|
+
* @type {void}
|
|
21
|
+
*/
|
|
22
|
+
DetectionEvents["NO_AUDIO_INPUT"] = "no_audio_input_detected";
|
|
23
|
+
/**
|
|
24
|
+
* Event generated by {@link VADNoiseDetection} when the tracked device is considered noisy.
|
|
25
|
+
* @event
|
|
26
|
+
* @type {Object}
|
|
27
|
+
*/
|
|
28
|
+
DetectionEvents["VAD_NOISY_DEVICE"] = "detection.vad_noise_device";
|
|
29
|
+
/**
|
|
30
|
+
* Event generated by VADReportingService when if finishes creating a VAD report for the monitored devices.
|
|
31
|
+
* The generated objects are of type Array<Object>, one score for each monitored device.
|
|
32
|
+
* @event VAD_REPORT_PUBLISHED
|
|
33
|
+
* @type Array<Object> with the following structure:
|
|
34
|
+
* @property {Date} timestamp - Timestamp at which the compute took place.
|
|
35
|
+
* @property {number} avgVAD - Average VAD score over monitored period of time.
|
|
36
|
+
* @property {string} deviceId - Associate local audio device ID.
|
|
37
|
+
*/
|
|
38
|
+
DetectionEvents["VAD_REPORT_PUBLISHED"] = "vad-report-published";
|
|
39
|
+
/**
|
|
40
|
+
* Event generated by {@link TrackVADEmitter} when PCM sample VAD score is available.
|
|
41
|
+
*
|
|
42
|
+
* @event
|
|
43
|
+
* @type {Object}
|
|
44
|
+
* @property {Date} timestamp - Exact time at which processed PCM sample was generated.
|
|
45
|
+
* @property {number} score - VAD score on a scale from 0 to 1 (i.e. 0.7)
|
|
46
|
+
* @property {Float32Array} pcmData - Raw PCM data with which the VAD score was calculated.
|
|
47
|
+
* @property {string} deviceId - Device id of the associated track.
|
|
48
|
+
*/
|
|
49
|
+
DetectionEvents["VAD_SCORE_PUBLISHED"] = "detection.vad_score_published";
|
|
50
|
+
/**
|
|
51
|
+
* Event generated by {@link VADTalkMutedDetection} when a user is talking while the mic is muted.
|
|
52
|
+
*
|
|
53
|
+
* @event
|
|
54
|
+
* @type {Object}
|
|
55
|
+
*/
|
|
56
|
+
DetectionEvents["VAD_TALK_WHILE_MUTED"] = "detection.vad_talk_while_muted";
|
|
57
|
+
})(DetectionEvents || (DetectionEvents = {}));
|
|
58
|
+
//# sourceMappingURL=DetectionEvents.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"DetectionEvents.js","sourceRoot":"","sources":["../../../../modules/detection/DetectionEvents.ts"],"names":[],"mappings":"AAAA,MAAM,CAAN,IAAY,eA8DX;AA9DD,WAAY,eAAe;IAEvB;;;;;OAKG;IACH,yEAAsD,CAAA;IAEtD;;;;;OAKG;IACH,kEAA+C,CAAA;IAE/C;;;;OAIG;IACH,6DAA0C,CAAA;IAE1C;;;;OAIG;IACH,kEAA+C,CAAA;IAE/C;;;;;;;;OAQG;IACH,gEAA6C,CAAA;IAE7C;;;;;;;;;OASG;IACH,wEAAqD,CAAA;IAErD;;;;;OAKG;IACH,0EAAuD,CAAA;AAC3D,CAAC,EA9DW,eAAe,KAAf,eAAe,QA8D1B"}
|