@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,168 @@
|
|
|
1
|
+
import EventEmitter from '../util/EventEmitter';
|
|
2
|
+
import { calculateAverage, filterPositiveValues } from '../util/MathUtil';
|
|
3
|
+
import { DetectionEvents } from './DetectionEvents';
|
|
4
|
+
/**
|
|
5
|
+
* The average value VAD needs to be under over a period of time to be considered noise.
|
|
6
|
+
* @type {number}
|
|
7
|
+
*/
|
|
8
|
+
const VAD_NOISE_AVG_THRESHOLD = 0.2;
|
|
9
|
+
/**
|
|
10
|
+
* The average values that audio input need to be over to be considered loud.
|
|
11
|
+
* @type {number}
|
|
12
|
+
*/
|
|
13
|
+
const NOISY_AUDIO_LEVEL_THRESHOLD = 0.040;
|
|
14
|
+
/**
|
|
15
|
+
* The value that a VAD score needs to be under in order for processing to begin.
|
|
16
|
+
* @type {number}
|
|
17
|
+
*/
|
|
18
|
+
const VAD_SCORE_TRIGGER = 0.2;
|
|
19
|
+
/**
|
|
20
|
+
* The value that a VAD score needs to be under in order for processing to begin.
|
|
21
|
+
* @type {number}
|
|
22
|
+
*/
|
|
23
|
+
const AUDIO_LEVEL_SCORE_TRIGGER = 0.020;
|
|
24
|
+
/**
|
|
25
|
+
* Time span over which we calculate an average score used to determine if we trigger the event.
|
|
26
|
+
* @type {number}
|
|
27
|
+
*/
|
|
28
|
+
const PROCESS_TIME_FRAME_SPAN_MS = 1500;
|
|
29
|
+
/**
|
|
30
|
+
* Detect if provided VAD score and PCM data is considered noise.
|
|
31
|
+
*/
|
|
32
|
+
export default class VADNoiseDetection extends EventEmitter {
|
|
33
|
+
/**
|
|
34
|
+
* Creates <tt>VADNoiseDetection</tt>
|
|
35
|
+
*
|
|
36
|
+
* @constructor
|
|
37
|
+
*/
|
|
38
|
+
constructor() {
|
|
39
|
+
super();
|
|
40
|
+
/**
|
|
41
|
+
* Flag which denotes the current state of the detection service i.e.if there is already a processing operation
|
|
42
|
+
* ongoing.
|
|
43
|
+
*/
|
|
44
|
+
this._processing = false;
|
|
45
|
+
/**
|
|
46
|
+
* Buffer that keeps the VAD scores for a period of time.
|
|
47
|
+
*/
|
|
48
|
+
this._scoreArray = [];
|
|
49
|
+
/**
|
|
50
|
+
* Buffer that keeps audio level samples for a period of time.
|
|
51
|
+
*/
|
|
52
|
+
this._audioLvlArray = [];
|
|
53
|
+
/**
|
|
54
|
+
* Current state of the service, if it's not active no processing will occur.
|
|
55
|
+
*/
|
|
56
|
+
this._active = false;
|
|
57
|
+
/**
|
|
58
|
+
* Timeout reference for processing VAD scores.
|
|
59
|
+
*/
|
|
60
|
+
this._processTimeout = null;
|
|
61
|
+
this._calculateNoisyScore = this._calculateNoisyScore.bind(this);
|
|
62
|
+
}
|
|
63
|
+
/**
|
|
64
|
+
* Compute cumulative VAD score and PCM audio levels once the PROCESS_TIME_FRAME_SPAN_MS timeout has elapsed.
|
|
65
|
+
* If the score is above the set threshold fire the event.
|
|
66
|
+
* @returns {void}
|
|
67
|
+
* @fires VAD_NOISY_DEVICE
|
|
68
|
+
*/
|
|
69
|
+
_calculateNoisyScore() {
|
|
70
|
+
const scoreAvg = calculateAverage(new Float32Array(this._scoreArray));
|
|
71
|
+
const audioLevelAvg = calculateAverage(new Float32Array(this._audioLvlArray));
|
|
72
|
+
if (scoreAvg < VAD_NOISE_AVG_THRESHOLD && audioLevelAvg > NOISY_AUDIO_LEVEL_THRESHOLD) {
|
|
73
|
+
this.emit(DetectionEvents.VAD_NOISY_DEVICE);
|
|
74
|
+
this._setActiveState(false);
|
|
75
|
+
}
|
|
76
|
+
// We reset the context in case a new process phase needs to be triggered.
|
|
77
|
+
this.reset();
|
|
78
|
+
}
|
|
79
|
+
/**
|
|
80
|
+
* Set the active state of the detection service and notify any listeners.
|
|
81
|
+
*
|
|
82
|
+
* @param {boolean} active
|
|
83
|
+
* @fires DETECTOR_STATE_CHANGE
|
|
84
|
+
*/
|
|
85
|
+
_setActiveState(active) {
|
|
86
|
+
this._active = active;
|
|
87
|
+
this.emit(DetectionEvents.DETECTOR_STATE_CHANGE, this._active);
|
|
88
|
+
}
|
|
89
|
+
/**
|
|
90
|
+
* Record the vad score and average volume in the appropriate buffers.
|
|
91
|
+
*
|
|
92
|
+
* @param {number} vadScore
|
|
93
|
+
* @param {number} avgAudioLvl - average audio level of the PCM sample associated with the VAD score.s
|
|
94
|
+
*/
|
|
95
|
+
_recordValues(vadScore, avgAudioLvl) {
|
|
96
|
+
this._scoreArray.push(vadScore);
|
|
97
|
+
this._audioLvlArray.push(avgAudioLvl);
|
|
98
|
+
}
|
|
99
|
+
/**
|
|
100
|
+
* Change the state according to the muted status of the tracked device.
|
|
101
|
+
*
|
|
102
|
+
* @param {boolean} isMuted - Is the device muted or not.
|
|
103
|
+
*/
|
|
104
|
+
changeMuteState(isMuted) {
|
|
105
|
+
// This service only needs to run when the microphone is not muted.
|
|
106
|
+
this._setActiveState(!isMuted);
|
|
107
|
+
this.reset();
|
|
108
|
+
}
|
|
109
|
+
/**
|
|
110
|
+
* Check whether or not the service is active or not.
|
|
111
|
+
*
|
|
112
|
+
* @returns {boolean}
|
|
113
|
+
*/
|
|
114
|
+
isActive() {
|
|
115
|
+
return this._active;
|
|
116
|
+
}
|
|
117
|
+
/**
|
|
118
|
+
* Listens for {@link TrackVADEmitter} events and processes them.
|
|
119
|
+
*
|
|
120
|
+
* @param {Object} vadScore -VAD score emitted by {@link TrackVADEmitter}
|
|
121
|
+
* @param {number} vadScore.timestamp - Exact time at which processed PCM sample was generated.
|
|
122
|
+
* @param {number} vadScore.score - VAD score on a scale from 0 to 1 (i.e. 0.7)
|
|
123
|
+
* @param {Float32Array} vadScore.pcmData - Raw PCM Data associated with the VAD score.
|
|
124
|
+
* @param {string} vadScore.deviceId - Device id of the associated track.
|
|
125
|
+
* @listens VAD_SCORE_PUBLISHED
|
|
126
|
+
*/
|
|
127
|
+
processVADScore(vadScore) {
|
|
128
|
+
if (!this._active) {
|
|
129
|
+
return;
|
|
130
|
+
}
|
|
131
|
+
// There is a processing phase on going, add score to buffer array.
|
|
132
|
+
if (this._processing) {
|
|
133
|
+
// Filter and calculate sample average so we don't have to process one large array at a time.
|
|
134
|
+
const pcmDataArray = Array.isArray(vadScore.pcmData) ? new Float32Array(vadScore.pcmData) : vadScore.pcmData;
|
|
135
|
+
const posAudioLevels = filterPositiveValues(pcmDataArray);
|
|
136
|
+
this._recordValues(vadScore.score, calculateAverage(new Float32Array(posAudioLevels)));
|
|
137
|
+
return;
|
|
138
|
+
}
|
|
139
|
+
// If the VAD score for the sample is low and audio level has a high enough level we can start listening for
|
|
140
|
+
// noise
|
|
141
|
+
if (vadScore.score < VAD_SCORE_TRIGGER) {
|
|
142
|
+
const pcmDataArray = Array.isArray(vadScore.pcmData) ? new Float32Array(vadScore.pcmData) : vadScore.pcmData;
|
|
143
|
+
const posAudioLevels = filterPositiveValues(pcmDataArray);
|
|
144
|
+
const avgAudioLvl = calculateAverage(new Float32Array(posAudioLevels));
|
|
145
|
+
if (avgAudioLvl > AUDIO_LEVEL_SCORE_TRIGGER) {
|
|
146
|
+
this._processing = true;
|
|
147
|
+
this._recordValues(vadScore.score, avgAudioLvl);
|
|
148
|
+
// Once the preset timeout executes the final score will be calculated.
|
|
149
|
+
this._processTimeout = setTimeout(this._calculateNoisyScore, PROCESS_TIME_FRAME_SPAN_MS);
|
|
150
|
+
}
|
|
151
|
+
}
|
|
152
|
+
}
|
|
153
|
+
/**
|
|
154
|
+
* Reset the processing context, clear buffers, cancel the timeout trigger.
|
|
155
|
+
*
|
|
156
|
+
* @returns {void}
|
|
157
|
+
*/
|
|
158
|
+
reset() {
|
|
159
|
+
this._processing = false;
|
|
160
|
+
this._scoreArray = [];
|
|
161
|
+
this._audioLvlArray = [];
|
|
162
|
+
if (this._processTimeout) {
|
|
163
|
+
clearTimeout(this._processTimeout);
|
|
164
|
+
this._processTimeout = null;
|
|
165
|
+
}
|
|
166
|
+
}
|
|
167
|
+
}
|
|
168
|
+
//# sourceMappingURL=VADNoiseDetection.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"VADNoiseDetection.js","sourceRoot":"","sources":["../../../../modules/detection/VADNoiseDetection.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,203 @@
|
|
|
1
|
+
import { getLogger } from '@jitsi/logger';
|
|
2
|
+
import EventEmitter from '../util/EventEmitter';
|
|
3
|
+
import { DetectionEvents } from './DetectionEvents';
|
|
4
|
+
import TrackVADEmitter from './TrackVADEmitter';
|
|
5
|
+
const logger = getLogger('vad:VADReportingService');
|
|
6
|
+
/**
|
|
7
|
+
* Sample rate used by TrackVADEmitter, this value determines how often the ScriptProcessorNode is going to call the
|
|
8
|
+
* process audio function and with what sample size.
|
|
9
|
+
* Basically lower values mean more callbacks with lower processing times bigger values less callbacks with longer
|
|
10
|
+
* processing times. This value is somewhere in the middle, so we strike a balance between flooding with callbacks
|
|
11
|
+
* and processing time. Possible values 256, 512, 1024, 2048, 4096, 8192, 16384. Passing other values will default
|
|
12
|
+
* to closes neighbor.
|
|
13
|
+
*/
|
|
14
|
+
const SCRIPT_NODE_SAMPLE_RATE = 4096;
|
|
15
|
+
/**
|
|
16
|
+
* Voice activity detection reporting service. The service create TrackVADEmitters for the provided devices and
|
|
17
|
+
* publishes an average of their VAD score over the specified interval via EventEmitter.
|
|
18
|
+
* The service is not reusable if destroyed a new one needs to be created, i.e. when a new device is added to the system
|
|
19
|
+
* a new service needs to be created and the old discarded.
|
|
20
|
+
*/
|
|
21
|
+
export default class VADReportingService extends EventEmitter {
|
|
22
|
+
/**
|
|
23
|
+
*
|
|
24
|
+
* @param {number} intervalDelay - Delay at which to publish VAD score for monitored devices.
|
|
25
|
+
*
|
|
26
|
+
* @constructor
|
|
27
|
+
*/
|
|
28
|
+
constructor(intervalDelay) {
|
|
29
|
+
super();
|
|
30
|
+
/**
|
|
31
|
+
* Map containing context for devices currently being monitored by the reporting service.
|
|
32
|
+
*/
|
|
33
|
+
this._contextMap = new Map();
|
|
34
|
+
/**
|
|
35
|
+
* State flag, check if the instance was destroyed.
|
|
36
|
+
*/
|
|
37
|
+
this._destroyed = false;
|
|
38
|
+
/**
|
|
39
|
+
* Delay at which to publish VAD score for monitored devices.
|
|
40
|
+
*/
|
|
41
|
+
this._intervalDelay = intervalDelay;
|
|
42
|
+
/**
|
|
43
|
+
* Identifier for the interval publishing stats on the set interval.
|
|
44
|
+
*/
|
|
45
|
+
this._intervalId = null;
|
|
46
|
+
logger.debug(`Constructed VADReportingService with publish interval of: ${intervalDelay}`);
|
|
47
|
+
}
|
|
48
|
+
/**
|
|
49
|
+
* Factory methods that creates the TrackVADEmitters for the associated array of devices and instantiates
|
|
50
|
+
* a VADReportingService.
|
|
51
|
+
*
|
|
52
|
+
* @param {Array<MediaDeviceInfo>} micDeviceList - Device list that is monitored inside the service.
|
|
53
|
+
* @param {number} intervalDelay - Delay at which to publish VAD score for monitored devices.
|
|
54
|
+
* @param {Object} createVADProcessor - Function that creates a Voice activity detection processor. The processor
|
|
55
|
+
* needs to implement the following functions:
|
|
56
|
+
* - <tt>getSampleLength()</tt> - Returns the sample size accepted by getSampleLength.
|
|
57
|
+
* - <tt>getRequiredPCMFrequency()</tt> - Returns the PCM frequency at which the processor operates.
|
|
58
|
+
* - <tt>calculateAudioFrameVAD(pcmSample)</tt> - Process a 32 float pcm sample of getSampleLength size.
|
|
59
|
+
*
|
|
60
|
+
* @returns {Promise<VADReportingService>}
|
|
61
|
+
*/
|
|
62
|
+
static create(micDeviceList, intervalDelay, createVADProcessor) {
|
|
63
|
+
const vadReportingService = new VADReportingService(intervalDelay);
|
|
64
|
+
const emitterPromiseArray = [];
|
|
65
|
+
const audioDeviceList = micDeviceList.filter(device => device.kind === 'audioinput');
|
|
66
|
+
// Create a TrackVADEmitter for each provided audio input device.
|
|
67
|
+
for (const micDevice of audioDeviceList) {
|
|
68
|
+
logger.debug(`Initializing VAD context for mic: ${micDevice.label} -> ${micDevice.deviceId}`);
|
|
69
|
+
const emitterPromise = createVADProcessor()
|
|
70
|
+
.then(rnnoiseProcessor => TrackVADEmitter.create(micDevice.deviceId, SCRIPT_NODE_SAMPLE_RATE, rnnoiseProcessor))
|
|
71
|
+
.then(emitter => {
|
|
72
|
+
emitter.on(DetectionEvents.VAD_SCORE_PUBLISHED, vadReportingService._devicePublishVADScore.bind(vadReportingService));
|
|
73
|
+
emitter.start();
|
|
74
|
+
return {
|
|
75
|
+
deviceInfo: micDevice,
|
|
76
|
+
scoreArray: [],
|
|
77
|
+
vadEmitter: emitter
|
|
78
|
+
};
|
|
79
|
+
});
|
|
80
|
+
emitterPromiseArray.push(emitterPromise);
|
|
81
|
+
}
|
|
82
|
+
// Once all the TrackVADEmitter promises are resolved get the ones that were successfully initialized and start
|
|
83
|
+
// monitoring them.
|
|
84
|
+
return Promise.allSettled(emitterPromiseArray).then(outcomeArray => {
|
|
85
|
+
const successfulPromises = outcomeArray.filter(p => p.status === 'fulfilled');
|
|
86
|
+
const rejectedPromises = outcomeArray.filter(p => p.status === 'rejected');
|
|
87
|
+
const availableDeviceContexts = successfulPromises.map(p => p.value);
|
|
88
|
+
const rejectReasons = rejectedPromises.map(p => p.reason);
|
|
89
|
+
for (const reason of rejectReasons) {
|
|
90
|
+
logger.error('Failed to acquire audio device with error: ', reason);
|
|
91
|
+
}
|
|
92
|
+
vadReportingService._setVADContextArray(availableDeviceContexts);
|
|
93
|
+
vadReportingService._startPublish();
|
|
94
|
+
return vadReportingService;
|
|
95
|
+
});
|
|
96
|
+
}
|
|
97
|
+
/**
|
|
98
|
+
* Destroy TrackVADEmitters and clear the context map.
|
|
99
|
+
*
|
|
100
|
+
* @returns {void}
|
|
101
|
+
*/
|
|
102
|
+
_clearContextMap() {
|
|
103
|
+
for (const vadContext of this._contextMap.values()) {
|
|
104
|
+
vadContext.vadEmitter.destroy();
|
|
105
|
+
}
|
|
106
|
+
this._contextMap.clear();
|
|
107
|
+
}
|
|
108
|
+
/**
|
|
109
|
+
* Set the watched device contexts.
|
|
110
|
+
*
|
|
111
|
+
* @param {Array<IVADDeviceContext>} vadContextArray - List of mics.
|
|
112
|
+
* @returns {void}
|
|
113
|
+
*/
|
|
114
|
+
_setVADContextArray(vadContextArray) {
|
|
115
|
+
for (const vadContext of vadContextArray) {
|
|
116
|
+
this._contextMap.set(vadContext.deviceInfo.deviceId, vadContext);
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
/**
|
|
120
|
+
* Start the setInterval reporting process.
|
|
121
|
+
*
|
|
122
|
+
* @returns {void}.
|
|
123
|
+
*/
|
|
124
|
+
_startPublish() {
|
|
125
|
+
logger.debug('VADReportingService started publishing.');
|
|
126
|
+
this._intervalId = setInterval(() => {
|
|
127
|
+
this._reportVadScore();
|
|
128
|
+
}, this._intervalDelay);
|
|
129
|
+
}
|
|
130
|
+
/**
|
|
131
|
+
* Function called at set interval with selected compute. The result will be published on the set callback.
|
|
132
|
+
*
|
|
133
|
+
* @returns {void}
|
|
134
|
+
* @fires VAD_REPORT_PUBLISHED
|
|
135
|
+
*/
|
|
136
|
+
_reportVadScore() {
|
|
137
|
+
const vadComputeScoreArray = [];
|
|
138
|
+
const computeTimestamp = Date.now();
|
|
139
|
+
// Go through each device and compute cumulated VAD score.
|
|
140
|
+
for (const [deviceId, vadContext] of this._contextMap) {
|
|
141
|
+
const nrOfVADScores = vadContext.scoreArray.length;
|
|
142
|
+
let vadSum = 0;
|
|
143
|
+
vadContext.scoreArray.forEach(vadScore => {
|
|
144
|
+
vadSum += vadScore.score;
|
|
145
|
+
});
|
|
146
|
+
// TODO For now we just calculate the average score for each device, more compute algorithms will be added.
|
|
147
|
+
const avgVAD = vadSum / nrOfVADScores;
|
|
148
|
+
vadContext.scoreArray = [];
|
|
149
|
+
vadComputeScoreArray.push({
|
|
150
|
+
deviceId,
|
|
151
|
+
score: avgVAD,
|
|
152
|
+
timestamp: computeTimestamp
|
|
153
|
+
});
|
|
154
|
+
}
|
|
155
|
+
logger.debug('VADReportingService reported.', vadComputeScoreArray);
|
|
156
|
+
/**
|
|
157
|
+
* Once the computation for all the tracked devices is done, fire an event containing all the necessary
|
|
158
|
+
* information.
|
|
159
|
+
*
|
|
160
|
+
* @event VAD_REPORT_PUBLISHED
|
|
161
|
+
* @type Array<Object> with the following structure:
|
|
162
|
+
* @property {Date} timestamp - Timestamo at which the compute took place.
|
|
163
|
+
* @property {number} avgVAD - Average VAD score over monitored period of time.
|
|
164
|
+
* @property {string} deviceId - Associate local audio device ID.
|
|
165
|
+
*/
|
|
166
|
+
this.emit(DetectionEvents.VAD_REPORT_PUBLISHED, vadComputeScoreArray);
|
|
167
|
+
}
|
|
168
|
+
/**
|
|
169
|
+
* Callback method passed to vad emitters in order to publish their score.
|
|
170
|
+
*
|
|
171
|
+
* @param {Object} vadScore -VAD score emitted by.
|
|
172
|
+
* @param {Date} vadScore.timestamp - Exact time at which processed PCM sample was generated.
|
|
173
|
+
* @param {number} vadScore.score - VAD score on a scale from 0 to 1 (i.e. 0.7).
|
|
174
|
+
* @param {string} vadScore.deviceId - Device id of the associated track.
|
|
175
|
+
* @returns {void}
|
|
176
|
+
* @listens VAD_SCORE_PUBLISHED
|
|
177
|
+
*/
|
|
178
|
+
_devicePublishVADScore(vadScore) {
|
|
179
|
+
const context = this._contextMap.get(vadScore.deviceId);
|
|
180
|
+
if (context) {
|
|
181
|
+
context.scoreArray.push(vadScore);
|
|
182
|
+
}
|
|
183
|
+
}
|
|
184
|
+
/**
|
|
185
|
+
* Destroy the VADReportingService, stops the setInterval reporting, destroys the emitters and clears the map.
|
|
186
|
+
* After this call the instance is no longer usable.
|
|
187
|
+
*
|
|
188
|
+
* @returns {void}.
|
|
189
|
+
*/
|
|
190
|
+
destroy() {
|
|
191
|
+
if (this._destroyed) {
|
|
192
|
+
return;
|
|
193
|
+
}
|
|
194
|
+
logger.debug('Destroying VADReportingService.');
|
|
195
|
+
if (this._intervalId) {
|
|
196
|
+
clearInterval(this._intervalId);
|
|
197
|
+
this._intervalId = null;
|
|
198
|
+
}
|
|
199
|
+
this._clearContextMap();
|
|
200
|
+
this._destroyed = true;
|
|
201
|
+
}
|
|
202
|
+
}
|
|
203
|
+
//# sourceMappingURL=VADReportingService.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"VADReportingService.js","sourceRoot":"","sources":["../../../../modules/detection/VADReportingService.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,131 @@
|
|
|
1
|
+
import EventEmitter from '../util/EventEmitter';
|
|
2
|
+
import { calculateAverage } from '../util/MathUtil';
|
|
3
|
+
import { DetectionEvents } from './DetectionEvents';
|
|
4
|
+
/**
|
|
5
|
+
* The threshold which the average VAD values for a span of time needs to exceed to trigger an event.
|
|
6
|
+
* @type {number}
|
|
7
|
+
*/
|
|
8
|
+
const VAD_AVG_THRESHOLD = 0.6;
|
|
9
|
+
/**
|
|
10
|
+
* The VAD score needed to trigger the processing algorithm, i.e. if a sample has the VAD score >= VAD_VOICE_LEVEL
|
|
11
|
+
* we start processing all scores for a time span defined by const PROCESS_TIME_FRAME_SPAN_MS.
|
|
12
|
+
* @type {number}
|
|
13
|
+
*/
|
|
14
|
+
const VAD_VOICE_LEVEL = 0.9;
|
|
15
|
+
/**
|
|
16
|
+
* Sample rate of TrackVADEmitter, it defines how many audio samples are processed at a time.
|
|
17
|
+
* @type {number}
|
|
18
|
+
*/
|
|
19
|
+
/**
|
|
20
|
+
* Time span over which we calculate an average score used to determine if we trigger the event.
|
|
21
|
+
* @type {number}
|
|
22
|
+
*/
|
|
23
|
+
const PROCESS_TIME_FRAME_SPAN_MS = 700;
|
|
24
|
+
/**
|
|
25
|
+
* Detect if provided VAD score which is generated on a muted device is voice and fires an event.
|
|
26
|
+
*/
|
|
27
|
+
export default class VADTalkMutedDetection extends EventEmitter {
|
|
28
|
+
/**
|
|
29
|
+
* Creates <tt>VADTalkMutedDetection</tt>
|
|
30
|
+
* @constructor
|
|
31
|
+
*/
|
|
32
|
+
constructor() {
|
|
33
|
+
super();
|
|
34
|
+
/**
|
|
35
|
+
* Flag which denotes the current state of the detection service i.e.if there is already a processing operation
|
|
36
|
+
* ongoing.
|
|
37
|
+
*/
|
|
38
|
+
this._processing = false;
|
|
39
|
+
/**
|
|
40
|
+
* Buffer that keeps the VAD scores for a period of time.
|
|
41
|
+
*/
|
|
42
|
+
this._scoreArray = [];
|
|
43
|
+
/**
|
|
44
|
+
* Current mute state of the audio track being monitored.
|
|
45
|
+
*/
|
|
46
|
+
this._active = false;
|
|
47
|
+
this._calculateVADScore = this._calculateVADScore.bind(this);
|
|
48
|
+
}
|
|
49
|
+
/**
|
|
50
|
+
* Compute cumulative VAD score function called once the PROCESS_TIME_FRAME_SPAN_MS timeout has elapsed.
|
|
51
|
+
* @returns {void}
|
|
52
|
+
* @fires VAD_TALK_WHILE_MUTED
|
|
53
|
+
*/
|
|
54
|
+
_calculateVADScore() {
|
|
55
|
+
const score = calculateAverage(new Float32Array(this._scoreArray));
|
|
56
|
+
if (score > VAD_AVG_THRESHOLD) {
|
|
57
|
+
this.emit(DetectionEvents.VAD_TALK_WHILE_MUTED);
|
|
58
|
+
// Event was fired. Stop event emitter and remove listeners so no residue events kick off after this point
|
|
59
|
+
// and a single VAD_TALK_WHILE_MUTED is generated per mic muted state.
|
|
60
|
+
this._setActiveState(false);
|
|
61
|
+
}
|
|
62
|
+
// We reset the context in case a new process phase needs to be triggered.
|
|
63
|
+
this.reset();
|
|
64
|
+
}
|
|
65
|
+
/**
|
|
66
|
+
* Set the active state of the detection service and notify any listeners.
|
|
67
|
+
*
|
|
68
|
+
* @param {boolean} active
|
|
69
|
+
* @fires DETECTOR_STATE_CHANGE
|
|
70
|
+
*/
|
|
71
|
+
_setActiveState(active) {
|
|
72
|
+
this._active = active;
|
|
73
|
+
this.emit(DetectionEvents.DETECTOR_STATE_CHANGE, this._active);
|
|
74
|
+
}
|
|
75
|
+
/**
|
|
76
|
+
* Change the state according to the muted status of the tracked device.
|
|
77
|
+
*
|
|
78
|
+
* @param {boolean} isMuted - Is the device muted or not.
|
|
79
|
+
*/
|
|
80
|
+
changeMuteState(isMuted) {
|
|
81
|
+
// This service only needs to run when the microphone is muted.
|
|
82
|
+
this._setActiveState(isMuted);
|
|
83
|
+
this.reset();
|
|
84
|
+
}
|
|
85
|
+
/**
|
|
86
|
+
* Check whether or not the service is active or not.
|
|
87
|
+
*
|
|
88
|
+
* @returns {boolean}
|
|
89
|
+
*/
|
|
90
|
+
isActive() {
|
|
91
|
+
return this._active;
|
|
92
|
+
}
|
|
93
|
+
/**
|
|
94
|
+
* Listens for {@link TrackVADEmitter} events and processes them.
|
|
95
|
+
*
|
|
96
|
+
* @param {Object} vadScore -VAD score emitted by {@link TrackVADEmitter}
|
|
97
|
+
* @param {number} vadScore.timestamp - Exact time at which processed PCM sample was generated.
|
|
98
|
+
* @param {number} vadScore.score - VAD score on a scale from 0 to 1 (i.e. 0.7)
|
|
99
|
+
* @param {string} vadScore.deviceId - Device id of the associated track.
|
|
100
|
+
* @listens VAD_SCORE_PUBLISHED
|
|
101
|
+
*/
|
|
102
|
+
processVADScore(vadScore) {
|
|
103
|
+
if (!this._active) {
|
|
104
|
+
return;
|
|
105
|
+
}
|
|
106
|
+
// There is a processing phase on going, add score to buffer array.
|
|
107
|
+
if (this._processing) {
|
|
108
|
+
this._scoreArray.push(vadScore.score);
|
|
109
|
+
return;
|
|
110
|
+
}
|
|
111
|
+
// Because we remove all listeners on the vadEmitter once the main event is triggered,
|
|
112
|
+
// there is no need to check for rogue events.
|
|
113
|
+
if (vadScore.score > VAD_VOICE_LEVEL) {
|
|
114
|
+
this._processing = true;
|
|
115
|
+
this._scoreArray.push(vadScore.score);
|
|
116
|
+
// Start gathering VAD scores for the configured period of time.
|
|
117
|
+
this._processTimeout = setTimeout(this._calculateVADScore, PROCESS_TIME_FRAME_SPAN_MS);
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
/**
|
|
121
|
+
* Reset the processing context, clear buffer, cancel the timeout trigger.
|
|
122
|
+
*
|
|
123
|
+
* @returns {void}
|
|
124
|
+
*/
|
|
125
|
+
reset() {
|
|
126
|
+
this._processing = false;
|
|
127
|
+
this._scoreArray = [];
|
|
128
|
+
clearTimeout(this._processTimeout);
|
|
129
|
+
}
|
|
130
|
+
}
|
|
131
|
+
//# sourceMappingURL=VADTalkMutedDetection.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"VADTalkMutedDetection.js","sourceRoot":"","sources":["../../../../modules/detection/VADTalkMutedDetection.ts"],"names":[],"mappings":"AAAA,OAAO,YAAY,MAAM,sBAAsB,CAAC;AAChD,OAAO,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AAEpD,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AAEpD;;;GAGG;AACH,MAAM,iBAAiB,GAAG,GAAG,CAAC;AAE9B;;;;GAIG;AACH,MAAM,eAAe,GAAG,GAAG,CAAC;AAE5B;;;GAGG;AAEH;;;GAGG;AACH,MAAM,0BAA0B,GAAG,GAAG,CAAC;AAQvC;;GAEG;AACH,MAAM,CAAC,OAAO,OAAO,qBAAsB,SAAQ,YAAY;IAM3D;;;OAGG;IACH;QACI,KAAK,EAAE,CAAC;QAER;;;WAGG;QACH,IAAI,CAAC,WAAW,GAAG,KAAK,CAAC;QAEzB;;WAEG;QACH,IAAI,CAAC,WAAW,GAAG,EAAE,CAAC;QAEtB;;WAEG;QACH,IAAI,CAAC,OAAO,GAAG,KAAK,CAAC;QACrB,IAAI,CAAC,kBAAkB,GAAG,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACjE,CAAC;IAED;;;;OAIG;IACK,kBAAkB;QACtB,MAAM,KAAK,GAAG,gBAAgB,CAAC,IAAI,YAAY,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC;QAEnE,IAAI,KAAK,GAAG,iBAAiB,EAAE,CAAC;YAC5B,IAAI,CAAC,IAAI,CAAC,eAAe,CAAC,oBAAoB,CAAC,CAAC;YAEhD,0GAA0G;YAC1G,sEAAsE;YACtE,IAAI,CAAC,eAAe,CAAC,KAAK,CAAC,CAAC;QAChC,CAAC;QAED,0EAA0E;QAC1E,IAAI,CAAC,KAAK,EAAE,CAAC;IACjB,CAAC;IAED;;;;;OAKG;IACK,eAAe,CAAC,MAAe;QACnC,IAAI,CAAC,OAAO,GAAG,MAAM,CAAC;QACtB,IAAI,CAAC,IAAI,CAAC,eAAe,CAAC,qBAAqB,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC;IACnE,CAAC;IAED;;;;OAIG;IACI,eAAe,CAAC,OAAgB;QACnC,+DAA+D;QAC/D,IAAI,CAAC,eAAe,CAAC,OAAO,CAAC,CAAC;QAC9B,IAAI,CAAC,KAAK,EAAE,CAAC;IACjB,CAAC;IAED;;;;OAIG;IACI,QAAQ;QACX,OAAO,IAAI,CAAC,OAAO,CAAC;IACxB,CAAC;IAED;;;;;;;;OAQG;IACI,eAAe,CAAC,QAAmB;QACtC,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC;YAChB,OAAO;QACX,CAAC;QACD,mEAAmE;QAGnE,IAAI,IAAI,CAAC,WAAW,EAAE,CAAC;YACnB,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;YAEtC,OAAO;QACX,CAAC;QAED,sFAAsF;QACtF,8CAA8C;QAC9C,IAAI,QAAQ,CAAC,KAAK,GAAG,eAAe,EAAE,CAAC;YACnC,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC;YACxB,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;YAEtC,gEAAgE;YAChE,IAAI,CAAC,eAAe,GAAG,UAAU,CAAC,IAAI,CAAC,kBAAkB,EAAE,0BAA0B,CAAC,CAAC;QAC3F,CAAC;IACL,CAAC;IAED;;;;OAIG;IACI,KAAK;QACR,IAAI,CAAC,WAAW,GAAG,KAAK,CAAC;QACzB,IAAI,CAAC,WAAW,GAAG,EAAE,CAAC;QACtB,YAAY,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;IACvC,CAAC;CACJ"}
|