@whereby.com/media 9.3.1 → 9.5.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/dist/index.cjs CHANGED
@@ -1457,6 +1457,8 @@ function captureVideoSsrcMetrics(ssrcMetrics, currentSsrcStats, prevSsrcStats, t
1457
1457
  ssrcMetrics.fps = (frameCountDiff * 1000) / timeDiff;
1458
1458
  const freezeCountDiff = (currentSsrcStats.freezeCount || 0) - ((prevSsrcStats === null || prevSsrcStats === void 0 ? void 0 : prevSsrcStats.freezeCount) || 0);
1459
1459
  ssrcMetrics.freezeRate = (freezeCountDiff * 1000) / timeDiff;
1460
+ const freezeDurationDiff = (currentSsrcStats.totalFreezesDuration || 0) - ((prevSsrcStats === null || prevSsrcStats === void 0 ? void 0 : prevSsrcStats.totalFreezesDuration) || 0);
1461
+ ssrcMetrics.freezeFraction = (freezeDurationDiff * 1000) / timeDiff;
1460
1462
  }
1461
1463
  else {
1462
1464
  const kfCountDiff = currentSsrcStats.keyFramesEncoded - ((prevSsrcStats === null || prevSsrcStats === void 0 ? void 0 : prevSsrcStats.keyFramesEncoded) || 0);
@@ -6052,6 +6054,7 @@ const createQualityDetector = (type) => {
6052
6054
  const maxSideReceived = Math.max(ssrc0.width || 0, ssrc0.height || 0);
6053
6055
  const fpsReceived = ssrc0.fps || 0;
6054
6056
  const hadFreeze = !!ssrc0.freezeRate;
6057
+ const freezeFraction = ssrc0.freezeFraction || 0;
6055
6058
  const bitrate = ssrc0.bitrate || 0;
6056
6059
  if (maxSideRendered < 100) {
6057
6060
  if (type === "warning" && maxSideReceived < 160)
@@ -6076,8 +6079,12 @@ const createQualityDetector = (type) => {
6076
6079
  return true;
6077
6080
  if (type === "critical" && fpsReceived < 9)
6078
6081
  return true;
6079
- if (hadFreeze)
6080
- return true;
6082
+ if (hadFreeze) {
6083
+ if (type === "warning" && freezeFraction > 0.3)
6084
+ return true;
6085
+ if (type === "critical" && freezeFraction > 0.6)
6086
+ return true;
6087
+ }
6081
6088
  if (type === "warning" && bitrate < 50000)
6082
6089
  return true;
6083
6090
  if (type === "critical" && bitrate < 20000)
@@ -6096,8 +6103,12 @@ const createQualityDetector = (type) => {
6096
6103
  return true;
6097
6104
  if (type === "critical" && bitrate < 50000)
6098
6105
  return true;
6099
- if (hadFreeze)
6100
- return true;
6106
+ if (hadFreeze) {
6107
+ if (type === "warning" && freezeFraction > 0.2)
6108
+ return true;
6109
+ if (type === "critical" && freezeFraction > 0.4)
6110
+ return true;
6111
+ }
6101
6112
  }
6102
6113
  }
6103
6114
  }
@@ -6108,9 +6119,9 @@ const createQualityDetector = (type) => {
6108
6119
  const deceleration = ssrc0.audioDeceleration || 0;
6109
6120
  const audioDistortion = concealment + acceleration + deceleration;
6110
6121
  if (audioLevel >= 0.01) {
6111
- if (type === "warning" && audioDistortion > 0.1)
6122
+ if (type === "warning" && audioDistortion > 0.15)
6112
6123
  return true;
6113
- if (type === "critical" && audioDistortion > 0.2)
6124
+ if (type === "critical" && audioDistortion > 0.3)
6114
6125
  return true;
6115
6126
  }
6116
6127
  }
package/dist/index.d.cts CHANGED
@@ -100,6 +100,7 @@ interface SsrcStats {
100
100
  sourceWidth?: number;
101
101
  sourceFps?: number;
102
102
  freezeRate?: number;
103
+ freezeFraction?: number;
103
104
  }
104
105
 
105
106
  interface IssueDetector {
@@ -911,16 +912,31 @@ interface ClientKickedEvent {
911
912
  interface KnockerLeftEvent {
912
913
  clientId: string;
913
914
  }
915
+ interface KnockResponseSender {
916
+ displayName?: string | null;
917
+ avatarUrl?: string | null;
918
+ }
919
+ interface KnockResponse {
920
+ message?: string;
921
+ sender?: KnockResponseSender;
922
+ }
914
923
  interface KnockAcceptedEvent {
915
924
  clientId: string;
925
+ knockResponse?: KnockResponse;
916
926
  metadata: {
917
927
  roomKey: string;
918
928
  roomName: string;
919
929
  };
920
930
  resolution: "accepted";
921
931
  }
932
+ interface KnockOnHoldEvent {
933
+ clientId: string;
934
+ knockResponse?: KnockResponse;
935
+ resolution: "on_hold";
936
+ }
922
937
  interface KnockRejectedEvent {
923
938
  clientId: string;
939
+ knockResponse?: KnockResponse;
924
940
  resolution: "rejected";
925
941
  }
926
942
  interface BreakoutConfig {
@@ -1141,7 +1157,7 @@ interface SignalEvents {
1141
1157
  connect_error: void;
1142
1158
  device_identified: void;
1143
1159
  disconnect: void;
1144
- knock_handled: KnockAcceptedEvent | KnockRejectedEvent;
1160
+ knock_handled: KnockAcceptedEvent | KnockOnHoldEvent | KnockRejectedEvent;
1145
1161
  knocker_left: KnockerLeftEvent;
1146
1162
  new_client: NewClientEvent;
1147
1163
  room_joined: RoomJoinedEvent;
@@ -1221,9 +1237,9 @@ interface SignalRequests {
1221
1237
  enabled: boolean;
1222
1238
  };
1223
1239
  handle_knock: {
1224
- action: "accept" | "reject";
1240
+ action: "accept" | "hold" | "reject";
1225
1241
  clientId: string;
1226
- response: unknown;
1242
+ knockResponse: KnockResponse;
1227
1243
  };
1228
1244
  identify_device: IdentifyDeviceRequest;
1229
1245
  join_breakout_group: {
@@ -2110,4 +2126,4 @@ declare class VegaRtcManager implements RtcManager {
2110
2126
  }
2111
2127
 
2112
2128
  export { ADDITIONAL_SCREEN_SHARE_SETTINGS, AUDIO_SETTINGS, BandwidthTester, CAMERA_STREAM_ID, EVENTS, FILE_SHARE_ERROR_CODES, KNOCK_MESSAGES, KalmanFilter, Logger, MEDIA_JITTER_BUFFER_TARGET, NoDevicesError, P2pRtcManager, PROTOCOL_ERRORS, PROTOCOL_EVENTS, PROTOCOL_REQUESTS, PROTOCOL_RESPONSES, RELAY_MESSAGES, ReconnectManager, RtcEventNames, RtcManagerDispatcher, SCREEN_SHARE_SETTINGS, SCREEN_SHARE_SIMULCAST_SETTINGS, STREAM_TYPES, ServerSocket, Session, SfuV2Parser, TYPES, VIDEO_SETTINGS_HD, VIDEO_SETTINGS_SD, VIDEO_SETTINGS_VP9, VIDEO_SETTINGS_VP9_LOW_BANDWIDTH, VegaConnection, VegaMediaQualityMonitor, VegaRtcManager, addAbsCaptureTimeExtMap, addExtMap, assert, buildDeviceList, calculateStd, captureAudioSsrcMetrics, captureCandidatePairInfoMetrics, captureCommonSsrcMetrics, captureSsrcInfo, captureVideoSsrcMetrics, cleanSdp, compareLocalDevices, createACFCalculator, createMicAnalyser, createWorker, deprioritizeH264, detectMicrophoneNotWorking, enumerate, external_stun_servers, filterMidExtension, filterMsidSemantic, fromLocation, generateByteString, getConstraints, getCurrentPeerConnections, getDeviceData, getDisplayMedia, getIssuesAndMetrics, getMediaConstraints, getMediaSettings, getMediasoupDeviceAsync, getNumFailedStatsReports, getNumFailedTrackSsrcLookups, getNumMissingTrackSsrcLookups, getPeerConnectionIndex, getStats, getStream, getUpdatedDevices, getUpdatedStats, getUserMedia, hasGetDisplayMedia, ipRegex, isFileShareError, isMobile, issueDetectorOrMetricEnabled, maybeTurnOnly, modifyMediaCapabilities, removePeerConnection, replaceTracksInStream, _default as rtcManagerEvents, rtcStats, setClientProvider, setCodecPreferenceSDP, setPeerConnectionsForTests, setVideoBandwidthUsingSetParameters, sortCodecs, standardDeviation, startPerformanceMonitor, stopStreamTracks, subscribeIssues, subscribeStats, trackAnnotations, turnServerOverride, updateRenderedDimensions, variance };
2113
- export type { AddCameraStreamOptions, AddSpotlightRequest, AudioEnableRequest, AudioEnableRequestedEvent, AudioEnabledEvent, BreakoutConfig, BreakoutGroupJoinedEvent, BreakoutSessionUpdatedEvent, BuildDeviceListOptions, CannotJoinUnclaimedRoomError, ChatFileShare, ChatMessage, ChatMessageError, ChatMessageRemoved, ChatMessageRequest, ClearableTimeout, ClientKickedEvent, ClientLeftEvent, ClientMetadataPayload, ClientMetadataReceivedEvent, ClientRole, ClientUnableToJoinEvent, CloudRecordingStartedEvent, Codec, ConnectionStatus, Credentials, FileShareErrorCode, FileUploadUrl, ForbiddenError, ForbiddenErrorNames, GetConstraintsOptions, GetDeviceDataResult, GetMediaConstraintsOptions, GetStreamOptions, GetStreamResult, GetUpdatedDevicesResult, GetUserMediaAttempt, GetUserMediaAttemptOutcome, HostPresenceControlsError, IdentifyDeviceRequest, InternalServerError, InvalidAssistantKeyError, IssuesAndMetricsByView, JoinRoomRequest, KnockAcceptedEvent, KnockRejectedEvent, KnockRoomRequest, KnockerLeftEvent, LiveCaptionEvent, LiveCaptionsStartedEvent, LiveCaptionsStoppedEvent, LiveTranscriptionStartedEvent, LiveTranscriptionStoppedEvent, MaxViewerLimitReachedError, MediaPrefs, Metric, NewClientEvent, OrganizationAssistantNotEnabledError, OrganizationAssistantNotFoundError, OrganizationPlanExhaustedError, RemoveScreenshareStreamOptions, RemoveSpotlightRequest, RoleName, RoomConcurrencyControlsError, RoomEmptyError, RoomFullError, RoomJoinPermissionDeniedError, RoomJoinedErrors, RoomJoinedEvent, RoomJoinedSuccess, RoomKnockedEvent, RoomLockedError, RoomLockedEvent, RoomMeetingTimeExhaustedError, RoomMode, RoomSessionEndedEvent, RtcClientConnectionStatusChangedPayload, RtcEventEmitter, RtcEvents, RtcLocalStreamTrackAddedPayload, RtcLocalStreamTrackRemovedPayload, RtcManager, RtcManagerCreatedPayload, RtcManagerOptions, RtcStreamAddedPayload, ScreenshareStartedEvent, ScreenshareStoppedEvent, SendClientMetadataRequest, SignalClient, SignalEvents, SignalIceCandidateMessage, SignalIceEndOfCandidatesMessage, SignalIceServer, SignalKnocker, SignalMediaServerConfig, SignalRTCSessionDescription, SignalReadyToReceiveOfferMessage, SignalRequests, SignalRoom, SignalSDPMessage, SignalSFUServer, SignalTurnServer, SocketConf, SocketManager, Spotlight, SpotlightAddedEvent, SpotlightRemovedEvent, StatsMonitorOptions, StatsMonitorState, StatsSubscription, TurnTransportProtocol, UniqueRoleAlreadyInRoomError, UpdatedDeviceInfo, UpdatedDevicesInfo, VegaConnectionOptions, VegaRtcManagerOptions, VideoEnableRequest, VideoEnableRequestedEvent, VideoEnabledEvent, WebRTCProvider };
2129
+ export type { AddCameraStreamOptions, AddSpotlightRequest, AudioEnableRequest, AudioEnableRequestedEvent, AudioEnabledEvent, BreakoutConfig, BreakoutGroupJoinedEvent, BreakoutSessionUpdatedEvent, BuildDeviceListOptions, CannotJoinUnclaimedRoomError, ChatFileShare, ChatMessage, ChatMessageError, ChatMessageRemoved, ChatMessageRequest, ClearableTimeout, ClientKickedEvent, ClientLeftEvent, ClientMetadataPayload, ClientMetadataReceivedEvent, ClientRole, ClientUnableToJoinEvent, CloudRecordingStartedEvent, Codec, ConnectionStatus, Credentials, FileShareErrorCode, FileUploadUrl, ForbiddenError, ForbiddenErrorNames, GetConstraintsOptions, GetDeviceDataResult, GetMediaConstraintsOptions, GetStreamOptions, GetStreamResult, GetUpdatedDevicesResult, GetUserMediaAttempt, GetUserMediaAttemptOutcome, HostPresenceControlsError, IdentifyDeviceRequest, InternalServerError, InvalidAssistantKeyError, IssuesAndMetricsByView, JoinRoomRequest, KnockAcceptedEvent, KnockOnHoldEvent, KnockRejectedEvent, KnockResponse, KnockResponseSender, KnockRoomRequest, KnockerLeftEvent, LiveCaptionEvent, LiveCaptionsStartedEvent, LiveCaptionsStoppedEvent, LiveTranscriptionStartedEvent, LiveTranscriptionStoppedEvent, MaxViewerLimitReachedError, MediaPrefs, Metric, NewClientEvent, OrganizationAssistantNotEnabledError, OrganizationAssistantNotFoundError, OrganizationPlanExhaustedError, RemoveScreenshareStreamOptions, RemoveSpotlightRequest, RoleName, RoomConcurrencyControlsError, RoomEmptyError, RoomFullError, RoomJoinPermissionDeniedError, RoomJoinedErrors, RoomJoinedEvent, RoomJoinedSuccess, RoomKnockedEvent, RoomLockedError, RoomLockedEvent, RoomMeetingTimeExhaustedError, RoomMode, RoomSessionEndedEvent, RtcClientConnectionStatusChangedPayload, RtcEventEmitter, RtcEvents, RtcLocalStreamTrackAddedPayload, RtcLocalStreamTrackRemovedPayload, RtcManager, RtcManagerCreatedPayload, RtcManagerOptions, RtcStreamAddedPayload, ScreenshareStartedEvent, ScreenshareStoppedEvent, SendClientMetadataRequest, SignalClient, SignalEvents, SignalIceCandidateMessage, SignalIceEndOfCandidatesMessage, SignalIceServer, SignalKnocker, SignalMediaServerConfig, SignalRTCSessionDescription, SignalReadyToReceiveOfferMessage, SignalRequests, SignalRoom, SignalSDPMessage, SignalSFUServer, SignalTurnServer, SocketConf, SocketManager, Spotlight, SpotlightAddedEvent, SpotlightRemovedEvent, StatsMonitorOptions, StatsMonitorState, StatsSubscription, TurnTransportProtocol, UniqueRoleAlreadyInRoomError, UpdatedDeviceInfo, UpdatedDevicesInfo, VegaConnectionOptions, VegaRtcManagerOptions, VideoEnableRequest, VideoEnableRequestedEvent, VideoEnabledEvent, WebRTCProvider };
package/dist/index.d.mts CHANGED
@@ -100,6 +100,7 @@ interface SsrcStats {
100
100
  sourceWidth?: number;
101
101
  sourceFps?: number;
102
102
  freezeRate?: number;
103
+ freezeFraction?: number;
103
104
  }
104
105
 
105
106
  interface IssueDetector {
@@ -911,16 +912,31 @@ interface ClientKickedEvent {
911
912
  interface KnockerLeftEvent {
912
913
  clientId: string;
913
914
  }
915
+ interface KnockResponseSender {
916
+ displayName?: string | null;
917
+ avatarUrl?: string | null;
918
+ }
919
+ interface KnockResponse {
920
+ message?: string;
921
+ sender?: KnockResponseSender;
922
+ }
914
923
  interface KnockAcceptedEvent {
915
924
  clientId: string;
925
+ knockResponse?: KnockResponse;
916
926
  metadata: {
917
927
  roomKey: string;
918
928
  roomName: string;
919
929
  };
920
930
  resolution: "accepted";
921
931
  }
932
+ interface KnockOnHoldEvent {
933
+ clientId: string;
934
+ knockResponse?: KnockResponse;
935
+ resolution: "on_hold";
936
+ }
922
937
  interface KnockRejectedEvent {
923
938
  clientId: string;
939
+ knockResponse?: KnockResponse;
924
940
  resolution: "rejected";
925
941
  }
926
942
  interface BreakoutConfig {
@@ -1141,7 +1157,7 @@ interface SignalEvents {
1141
1157
  connect_error: void;
1142
1158
  device_identified: void;
1143
1159
  disconnect: void;
1144
- knock_handled: KnockAcceptedEvent | KnockRejectedEvent;
1160
+ knock_handled: KnockAcceptedEvent | KnockOnHoldEvent | KnockRejectedEvent;
1145
1161
  knocker_left: KnockerLeftEvent;
1146
1162
  new_client: NewClientEvent;
1147
1163
  room_joined: RoomJoinedEvent;
@@ -1221,9 +1237,9 @@ interface SignalRequests {
1221
1237
  enabled: boolean;
1222
1238
  };
1223
1239
  handle_knock: {
1224
- action: "accept" | "reject";
1240
+ action: "accept" | "hold" | "reject";
1225
1241
  clientId: string;
1226
- response: unknown;
1242
+ knockResponse: KnockResponse;
1227
1243
  };
1228
1244
  identify_device: IdentifyDeviceRequest;
1229
1245
  join_breakout_group: {
@@ -2110,4 +2126,4 @@ declare class VegaRtcManager implements RtcManager {
2110
2126
  }
2111
2127
 
2112
2128
  export { ADDITIONAL_SCREEN_SHARE_SETTINGS, AUDIO_SETTINGS, BandwidthTester, CAMERA_STREAM_ID, EVENTS, FILE_SHARE_ERROR_CODES, KNOCK_MESSAGES, KalmanFilter, Logger, MEDIA_JITTER_BUFFER_TARGET, NoDevicesError, P2pRtcManager, PROTOCOL_ERRORS, PROTOCOL_EVENTS, PROTOCOL_REQUESTS, PROTOCOL_RESPONSES, RELAY_MESSAGES, ReconnectManager, RtcEventNames, RtcManagerDispatcher, SCREEN_SHARE_SETTINGS, SCREEN_SHARE_SIMULCAST_SETTINGS, STREAM_TYPES, ServerSocket, Session, SfuV2Parser, TYPES, VIDEO_SETTINGS_HD, VIDEO_SETTINGS_SD, VIDEO_SETTINGS_VP9, VIDEO_SETTINGS_VP9_LOW_BANDWIDTH, VegaConnection, VegaMediaQualityMonitor, VegaRtcManager, addAbsCaptureTimeExtMap, addExtMap, assert, buildDeviceList, calculateStd, captureAudioSsrcMetrics, captureCandidatePairInfoMetrics, captureCommonSsrcMetrics, captureSsrcInfo, captureVideoSsrcMetrics, cleanSdp, compareLocalDevices, createACFCalculator, createMicAnalyser, createWorker, deprioritizeH264, detectMicrophoneNotWorking, enumerate, external_stun_servers, filterMidExtension, filterMsidSemantic, fromLocation, generateByteString, getConstraints, getCurrentPeerConnections, getDeviceData, getDisplayMedia, getIssuesAndMetrics, getMediaConstraints, getMediaSettings, getMediasoupDeviceAsync, getNumFailedStatsReports, getNumFailedTrackSsrcLookups, getNumMissingTrackSsrcLookups, getPeerConnectionIndex, getStats, getStream, getUpdatedDevices, getUpdatedStats, getUserMedia, hasGetDisplayMedia, ipRegex, isFileShareError, isMobile, issueDetectorOrMetricEnabled, maybeTurnOnly, modifyMediaCapabilities, removePeerConnection, replaceTracksInStream, _default as rtcManagerEvents, rtcStats, setClientProvider, setCodecPreferenceSDP, setPeerConnectionsForTests, setVideoBandwidthUsingSetParameters, sortCodecs, standardDeviation, startPerformanceMonitor, stopStreamTracks, subscribeIssues, subscribeStats, trackAnnotations, turnServerOverride, updateRenderedDimensions, variance };
2113
- export type { AddCameraStreamOptions, AddSpotlightRequest, AudioEnableRequest, AudioEnableRequestedEvent, AudioEnabledEvent, BreakoutConfig, BreakoutGroupJoinedEvent, BreakoutSessionUpdatedEvent, BuildDeviceListOptions, CannotJoinUnclaimedRoomError, ChatFileShare, ChatMessage, ChatMessageError, ChatMessageRemoved, ChatMessageRequest, ClearableTimeout, ClientKickedEvent, ClientLeftEvent, ClientMetadataPayload, ClientMetadataReceivedEvent, ClientRole, ClientUnableToJoinEvent, CloudRecordingStartedEvent, Codec, ConnectionStatus, Credentials, FileShareErrorCode, FileUploadUrl, ForbiddenError, ForbiddenErrorNames, GetConstraintsOptions, GetDeviceDataResult, GetMediaConstraintsOptions, GetStreamOptions, GetStreamResult, GetUpdatedDevicesResult, GetUserMediaAttempt, GetUserMediaAttemptOutcome, HostPresenceControlsError, IdentifyDeviceRequest, InternalServerError, InvalidAssistantKeyError, IssuesAndMetricsByView, JoinRoomRequest, KnockAcceptedEvent, KnockRejectedEvent, KnockRoomRequest, KnockerLeftEvent, LiveCaptionEvent, LiveCaptionsStartedEvent, LiveCaptionsStoppedEvent, LiveTranscriptionStartedEvent, LiveTranscriptionStoppedEvent, MaxViewerLimitReachedError, MediaPrefs, Metric, NewClientEvent, OrganizationAssistantNotEnabledError, OrganizationAssistantNotFoundError, OrganizationPlanExhaustedError, RemoveScreenshareStreamOptions, RemoveSpotlightRequest, RoleName, RoomConcurrencyControlsError, RoomEmptyError, RoomFullError, RoomJoinPermissionDeniedError, RoomJoinedErrors, RoomJoinedEvent, RoomJoinedSuccess, RoomKnockedEvent, RoomLockedError, RoomLockedEvent, RoomMeetingTimeExhaustedError, RoomMode, RoomSessionEndedEvent, RtcClientConnectionStatusChangedPayload, RtcEventEmitter, RtcEvents, RtcLocalStreamTrackAddedPayload, RtcLocalStreamTrackRemovedPayload, RtcManager, RtcManagerCreatedPayload, RtcManagerOptions, RtcStreamAddedPayload, ScreenshareStartedEvent, ScreenshareStoppedEvent, SendClientMetadataRequest, SignalClient, SignalEvents, SignalIceCandidateMessage, SignalIceEndOfCandidatesMessage, SignalIceServer, SignalKnocker, SignalMediaServerConfig, SignalRTCSessionDescription, SignalReadyToReceiveOfferMessage, SignalRequests, SignalRoom, SignalSDPMessage, SignalSFUServer, SignalTurnServer, SocketConf, SocketManager, Spotlight, SpotlightAddedEvent, SpotlightRemovedEvent, StatsMonitorOptions, StatsMonitorState, StatsSubscription, TurnTransportProtocol, UniqueRoleAlreadyInRoomError, UpdatedDeviceInfo, UpdatedDevicesInfo, VegaConnectionOptions, VegaRtcManagerOptions, VideoEnableRequest, VideoEnableRequestedEvent, VideoEnabledEvent, WebRTCProvider };
2129
+ export type { AddCameraStreamOptions, AddSpotlightRequest, AudioEnableRequest, AudioEnableRequestedEvent, AudioEnabledEvent, BreakoutConfig, BreakoutGroupJoinedEvent, BreakoutSessionUpdatedEvent, BuildDeviceListOptions, CannotJoinUnclaimedRoomError, ChatFileShare, ChatMessage, ChatMessageError, ChatMessageRemoved, ChatMessageRequest, ClearableTimeout, ClientKickedEvent, ClientLeftEvent, ClientMetadataPayload, ClientMetadataReceivedEvent, ClientRole, ClientUnableToJoinEvent, CloudRecordingStartedEvent, Codec, ConnectionStatus, Credentials, FileShareErrorCode, FileUploadUrl, ForbiddenError, ForbiddenErrorNames, GetConstraintsOptions, GetDeviceDataResult, GetMediaConstraintsOptions, GetStreamOptions, GetStreamResult, GetUpdatedDevicesResult, GetUserMediaAttempt, GetUserMediaAttemptOutcome, HostPresenceControlsError, IdentifyDeviceRequest, InternalServerError, InvalidAssistantKeyError, IssuesAndMetricsByView, JoinRoomRequest, KnockAcceptedEvent, KnockOnHoldEvent, KnockRejectedEvent, KnockResponse, KnockResponseSender, KnockRoomRequest, KnockerLeftEvent, LiveCaptionEvent, LiveCaptionsStartedEvent, LiveCaptionsStoppedEvent, LiveTranscriptionStartedEvent, LiveTranscriptionStoppedEvent, MaxViewerLimitReachedError, MediaPrefs, Metric, NewClientEvent, OrganizationAssistantNotEnabledError, OrganizationAssistantNotFoundError, OrganizationPlanExhaustedError, RemoveScreenshareStreamOptions, RemoveSpotlightRequest, RoleName, RoomConcurrencyControlsError, RoomEmptyError, RoomFullError, RoomJoinPermissionDeniedError, RoomJoinedErrors, RoomJoinedEvent, RoomJoinedSuccess, RoomKnockedEvent, RoomLockedError, RoomLockedEvent, RoomMeetingTimeExhaustedError, RoomMode, RoomSessionEndedEvent, RtcClientConnectionStatusChangedPayload, RtcEventEmitter, RtcEvents, RtcLocalStreamTrackAddedPayload, RtcLocalStreamTrackRemovedPayload, RtcManager, RtcManagerCreatedPayload, RtcManagerOptions, RtcStreamAddedPayload, ScreenshareStartedEvent, ScreenshareStoppedEvent, SendClientMetadataRequest, SignalClient, SignalEvents, SignalIceCandidateMessage, SignalIceEndOfCandidatesMessage, SignalIceServer, SignalKnocker, SignalMediaServerConfig, SignalRTCSessionDescription, SignalReadyToReceiveOfferMessage, SignalRequests, SignalRoom, SignalSDPMessage, SignalSFUServer, SignalTurnServer, SocketConf, SocketManager, Spotlight, SpotlightAddedEvent, SpotlightRemovedEvent, StatsMonitorOptions, StatsMonitorState, StatsSubscription, TurnTransportProtocol, UniqueRoleAlreadyInRoomError, UpdatedDeviceInfo, UpdatedDevicesInfo, VegaConnectionOptions, VegaRtcManagerOptions, VideoEnableRequest, VideoEnableRequestedEvent, VideoEnabledEvent, WebRTCProvider };
package/dist/index.d.ts CHANGED
@@ -100,6 +100,7 @@ interface SsrcStats {
100
100
  sourceWidth?: number;
101
101
  sourceFps?: number;
102
102
  freezeRate?: number;
103
+ freezeFraction?: number;
103
104
  }
104
105
 
105
106
  interface IssueDetector {
@@ -911,16 +912,31 @@ interface ClientKickedEvent {
911
912
  interface KnockerLeftEvent {
912
913
  clientId: string;
913
914
  }
915
+ interface KnockResponseSender {
916
+ displayName?: string | null;
917
+ avatarUrl?: string | null;
918
+ }
919
+ interface KnockResponse {
920
+ message?: string;
921
+ sender?: KnockResponseSender;
922
+ }
914
923
  interface KnockAcceptedEvent {
915
924
  clientId: string;
925
+ knockResponse?: KnockResponse;
916
926
  metadata: {
917
927
  roomKey: string;
918
928
  roomName: string;
919
929
  };
920
930
  resolution: "accepted";
921
931
  }
932
+ interface KnockOnHoldEvent {
933
+ clientId: string;
934
+ knockResponse?: KnockResponse;
935
+ resolution: "on_hold";
936
+ }
922
937
  interface KnockRejectedEvent {
923
938
  clientId: string;
939
+ knockResponse?: KnockResponse;
924
940
  resolution: "rejected";
925
941
  }
926
942
  interface BreakoutConfig {
@@ -1141,7 +1157,7 @@ interface SignalEvents {
1141
1157
  connect_error: void;
1142
1158
  device_identified: void;
1143
1159
  disconnect: void;
1144
- knock_handled: KnockAcceptedEvent | KnockRejectedEvent;
1160
+ knock_handled: KnockAcceptedEvent | KnockOnHoldEvent | KnockRejectedEvent;
1145
1161
  knocker_left: KnockerLeftEvent;
1146
1162
  new_client: NewClientEvent;
1147
1163
  room_joined: RoomJoinedEvent;
@@ -1221,9 +1237,9 @@ interface SignalRequests {
1221
1237
  enabled: boolean;
1222
1238
  };
1223
1239
  handle_knock: {
1224
- action: "accept" | "reject";
1240
+ action: "accept" | "hold" | "reject";
1225
1241
  clientId: string;
1226
- response: unknown;
1242
+ knockResponse: KnockResponse;
1227
1243
  };
1228
1244
  identify_device: IdentifyDeviceRequest;
1229
1245
  join_breakout_group: {
@@ -2110,4 +2126,4 @@ declare class VegaRtcManager implements RtcManager {
2110
2126
  }
2111
2127
 
2112
2128
  export { ADDITIONAL_SCREEN_SHARE_SETTINGS, AUDIO_SETTINGS, BandwidthTester, CAMERA_STREAM_ID, EVENTS, FILE_SHARE_ERROR_CODES, KNOCK_MESSAGES, KalmanFilter, Logger, MEDIA_JITTER_BUFFER_TARGET, NoDevicesError, P2pRtcManager, PROTOCOL_ERRORS, PROTOCOL_EVENTS, PROTOCOL_REQUESTS, PROTOCOL_RESPONSES, RELAY_MESSAGES, ReconnectManager, RtcEventNames, RtcManagerDispatcher, SCREEN_SHARE_SETTINGS, SCREEN_SHARE_SIMULCAST_SETTINGS, STREAM_TYPES, ServerSocket, Session, SfuV2Parser, TYPES, VIDEO_SETTINGS_HD, VIDEO_SETTINGS_SD, VIDEO_SETTINGS_VP9, VIDEO_SETTINGS_VP9_LOW_BANDWIDTH, VegaConnection, VegaMediaQualityMonitor, VegaRtcManager, addAbsCaptureTimeExtMap, addExtMap, assert, buildDeviceList, calculateStd, captureAudioSsrcMetrics, captureCandidatePairInfoMetrics, captureCommonSsrcMetrics, captureSsrcInfo, captureVideoSsrcMetrics, cleanSdp, compareLocalDevices, createACFCalculator, createMicAnalyser, createWorker, deprioritizeH264, detectMicrophoneNotWorking, enumerate, external_stun_servers, filterMidExtension, filterMsidSemantic, fromLocation, generateByteString, getConstraints, getCurrentPeerConnections, getDeviceData, getDisplayMedia, getIssuesAndMetrics, getMediaConstraints, getMediaSettings, getMediasoupDeviceAsync, getNumFailedStatsReports, getNumFailedTrackSsrcLookups, getNumMissingTrackSsrcLookups, getPeerConnectionIndex, getStats, getStream, getUpdatedDevices, getUpdatedStats, getUserMedia, hasGetDisplayMedia, ipRegex, isFileShareError, isMobile, issueDetectorOrMetricEnabled, maybeTurnOnly, modifyMediaCapabilities, removePeerConnection, replaceTracksInStream, _default as rtcManagerEvents, rtcStats, setClientProvider, setCodecPreferenceSDP, setPeerConnectionsForTests, setVideoBandwidthUsingSetParameters, sortCodecs, standardDeviation, startPerformanceMonitor, stopStreamTracks, subscribeIssues, subscribeStats, trackAnnotations, turnServerOverride, updateRenderedDimensions, variance };
2113
- export type { AddCameraStreamOptions, AddSpotlightRequest, AudioEnableRequest, AudioEnableRequestedEvent, AudioEnabledEvent, BreakoutConfig, BreakoutGroupJoinedEvent, BreakoutSessionUpdatedEvent, BuildDeviceListOptions, CannotJoinUnclaimedRoomError, ChatFileShare, ChatMessage, ChatMessageError, ChatMessageRemoved, ChatMessageRequest, ClearableTimeout, ClientKickedEvent, ClientLeftEvent, ClientMetadataPayload, ClientMetadataReceivedEvent, ClientRole, ClientUnableToJoinEvent, CloudRecordingStartedEvent, Codec, ConnectionStatus, Credentials, FileShareErrorCode, FileUploadUrl, ForbiddenError, ForbiddenErrorNames, GetConstraintsOptions, GetDeviceDataResult, GetMediaConstraintsOptions, GetStreamOptions, GetStreamResult, GetUpdatedDevicesResult, GetUserMediaAttempt, GetUserMediaAttemptOutcome, HostPresenceControlsError, IdentifyDeviceRequest, InternalServerError, InvalidAssistantKeyError, IssuesAndMetricsByView, JoinRoomRequest, KnockAcceptedEvent, KnockRejectedEvent, KnockRoomRequest, KnockerLeftEvent, LiveCaptionEvent, LiveCaptionsStartedEvent, LiveCaptionsStoppedEvent, LiveTranscriptionStartedEvent, LiveTranscriptionStoppedEvent, MaxViewerLimitReachedError, MediaPrefs, Metric, NewClientEvent, OrganizationAssistantNotEnabledError, OrganizationAssistantNotFoundError, OrganizationPlanExhaustedError, RemoveScreenshareStreamOptions, RemoveSpotlightRequest, RoleName, RoomConcurrencyControlsError, RoomEmptyError, RoomFullError, RoomJoinPermissionDeniedError, RoomJoinedErrors, RoomJoinedEvent, RoomJoinedSuccess, RoomKnockedEvent, RoomLockedError, RoomLockedEvent, RoomMeetingTimeExhaustedError, RoomMode, RoomSessionEndedEvent, RtcClientConnectionStatusChangedPayload, RtcEventEmitter, RtcEvents, RtcLocalStreamTrackAddedPayload, RtcLocalStreamTrackRemovedPayload, RtcManager, RtcManagerCreatedPayload, RtcManagerOptions, RtcStreamAddedPayload, ScreenshareStartedEvent, ScreenshareStoppedEvent, SendClientMetadataRequest, SignalClient, SignalEvents, SignalIceCandidateMessage, SignalIceEndOfCandidatesMessage, SignalIceServer, SignalKnocker, SignalMediaServerConfig, SignalRTCSessionDescription, SignalReadyToReceiveOfferMessage, SignalRequests, SignalRoom, SignalSDPMessage, SignalSFUServer, SignalTurnServer, SocketConf, SocketManager, Spotlight, SpotlightAddedEvent, SpotlightRemovedEvent, StatsMonitorOptions, StatsMonitorState, StatsSubscription, TurnTransportProtocol, UniqueRoleAlreadyInRoomError, UpdatedDeviceInfo, UpdatedDevicesInfo, VegaConnectionOptions, VegaRtcManagerOptions, VideoEnableRequest, VideoEnableRequestedEvent, VideoEnabledEvent, WebRTCProvider };
2129
+ export type { AddCameraStreamOptions, AddSpotlightRequest, AudioEnableRequest, AudioEnableRequestedEvent, AudioEnabledEvent, BreakoutConfig, BreakoutGroupJoinedEvent, BreakoutSessionUpdatedEvent, BuildDeviceListOptions, CannotJoinUnclaimedRoomError, ChatFileShare, ChatMessage, ChatMessageError, ChatMessageRemoved, ChatMessageRequest, ClearableTimeout, ClientKickedEvent, ClientLeftEvent, ClientMetadataPayload, ClientMetadataReceivedEvent, ClientRole, ClientUnableToJoinEvent, CloudRecordingStartedEvent, Codec, ConnectionStatus, Credentials, FileShareErrorCode, FileUploadUrl, ForbiddenError, ForbiddenErrorNames, GetConstraintsOptions, GetDeviceDataResult, GetMediaConstraintsOptions, GetStreamOptions, GetStreamResult, GetUpdatedDevicesResult, GetUserMediaAttempt, GetUserMediaAttemptOutcome, HostPresenceControlsError, IdentifyDeviceRequest, InternalServerError, InvalidAssistantKeyError, IssuesAndMetricsByView, JoinRoomRequest, KnockAcceptedEvent, KnockOnHoldEvent, KnockRejectedEvent, KnockResponse, KnockResponseSender, KnockRoomRequest, KnockerLeftEvent, LiveCaptionEvent, LiveCaptionsStartedEvent, LiveCaptionsStoppedEvent, LiveTranscriptionStartedEvent, LiveTranscriptionStoppedEvent, MaxViewerLimitReachedError, MediaPrefs, Metric, NewClientEvent, OrganizationAssistantNotEnabledError, OrganizationAssistantNotFoundError, OrganizationPlanExhaustedError, RemoveScreenshareStreamOptions, RemoveSpotlightRequest, RoleName, RoomConcurrencyControlsError, RoomEmptyError, RoomFullError, RoomJoinPermissionDeniedError, RoomJoinedErrors, RoomJoinedEvent, RoomJoinedSuccess, RoomKnockedEvent, RoomLockedError, RoomLockedEvent, RoomMeetingTimeExhaustedError, RoomMode, RoomSessionEndedEvent, RtcClientConnectionStatusChangedPayload, RtcEventEmitter, RtcEvents, RtcLocalStreamTrackAddedPayload, RtcLocalStreamTrackRemovedPayload, RtcManager, RtcManagerCreatedPayload, RtcManagerOptions, RtcStreamAddedPayload, ScreenshareStartedEvent, ScreenshareStoppedEvent, SendClientMetadataRequest, SignalClient, SignalEvents, SignalIceCandidateMessage, SignalIceEndOfCandidatesMessage, SignalIceServer, SignalKnocker, SignalMediaServerConfig, SignalRTCSessionDescription, SignalReadyToReceiveOfferMessage, SignalRequests, SignalRoom, SignalSDPMessage, SignalSFUServer, SignalTurnServer, SocketConf, SocketManager, Spotlight, SpotlightAddedEvent, SpotlightRemovedEvent, StatsMonitorOptions, StatsMonitorState, StatsSubscription, TurnTransportProtocol, UniqueRoleAlreadyInRoomError, UpdatedDeviceInfo, UpdatedDevicesInfo, VegaConnectionOptions, VegaRtcManagerOptions, VideoEnableRequest, VideoEnableRequestedEvent, VideoEnabledEvent, WebRTCProvider };
package/dist/index.mjs CHANGED
@@ -1437,6 +1437,8 @@ function captureVideoSsrcMetrics(ssrcMetrics, currentSsrcStats, prevSsrcStats, t
1437
1437
  ssrcMetrics.fps = (frameCountDiff * 1000) / timeDiff;
1438
1438
  const freezeCountDiff = (currentSsrcStats.freezeCount || 0) - ((prevSsrcStats === null || prevSsrcStats === void 0 ? void 0 : prevSsrcStats.freezeCount) || 0);
1439
1439
  ssrcMetrics.freezeRate = (freezeCountDiff * 1000) / timeDiff;
1440
+ const freezeDurationDiff = (currentSsrcStats.totalFreezesDuration || 0) - ((prevSsrcStats === null || prevSsrcStats === void 0 ? void 0 : prevSsrcStats.totalFreezesDuration) || 0);
1441
+ ssrcMetrics.freezeFraction = (freezeDurationDiff * 1000) / timeDiff;
1440
1442
  }
1441
1443
  else {
1442
1444
  const kfCountDiff = currentSsrcStats.keyFramesEncoded - ((prevSsrcStats === null || prevSsrcStats === void 0 ? void 0 : prevSsrcStats.keyFramesEncoded) || 0);
@@ -6032,6 +6034,7 @@ const createQualityDetector = (type) => {
6032
6034
  const maxSideReceived = Math.max(ssrc0.width || 0, ssrc0.height || 0);
6033
6035
  const fpsReceived = ssrc0.fps || 0;
6034
6036
  const hadFreeze = !!ssrc0.freezeRate;
6037
+ const freezeFraction = ssrc0.freezeFraction || 0;
6035
6038
  const bitrate = ssrc0.bitrate || 0;
6036
6039
  if (maxSideRendered < 100) {
6037
6040
  if (type === "warning" && maxSideReceived < 160)
@@ -6056,8 +6059,12 @@ const createQualityDetector = (type) => {
6056
6059
  return true;
6057
6060
  if (type === "critical" && fpsReceived < 9)
6058
6061
  return true;
6059
- if (hadFreeze)
6060
- return true;
6062
+ if (hadFreeze) {
6063
+ if (type === "warning" && freezeFraction > 0.3)
6064
+ return true;
6065
+ if (type === "critical" && freezeFraction > 0.6)
6066
+ return true;
6067
+ }
6061
6068
  if (type === "warning" && bitrate < 50000)
6062
6069
  return true;
6063
6070
  if (type === "critical" && bitrate < 20000)
@@ -6076,8 +6083,12 @@ const createQualityDetector = (type) => {
6076
6083
  return true;
6077
6084
  if (type === "critical" && bitrate < 50000)
6078
6085
  return true;
6079
- if (hadFreeze)
6080
- return true;
6086
+ if (hadFreeze) {
6087
+ if (type === "warning" && freezeFraction > 0.2)
6088
+ return true;
6089
+ if (type === "critical" && freezeFraction > 0.4)
6090
+ return true;
6091
+ }
6081
6092
  }
6082
6093
  }
6083
6094
  }
@@ -6088,9 +6099,9 @@ const createQualityDetector = (type) => {
6088
6099
  const deceleration = ssrc0.audioDeceleration || 0;
6089
6100
  const audioDistortion = concealment + acceleration + deceleration;
6090
6101
  if (audioLevel >= 0.01) {
6091
- if (type === "warning" && audioDistortion > 0.1)
6102
+ if (type === "warning" && audioDistortion > 0.15)
6092
6103
  return true;
6093
- if (type === "critical" && audioDistortion > 0.2)
6104
+ if (type === "critical" && audioDistortion > 0.3)
6094
6105
  return true;
6095
6106
  }
6096
6107
  }
@@ -1437,6 +1437,8 @@ function captureVideoSsrcMetrics(ssrcMetrics, currentSsrcStats, prevSsrcStats, t
1437
1437
  ssrcMetrics.fps = (frameCountDiff * 1000) / timeDiff;
1438
1438
  const freezeCountDiff = (currentSsrcStats.freezeCount || 0) - ((prevSsrcStats === null || prevSsrcStats === void 0 ? void 0 : prevSsrcStats.freezeCount) || 0);
1439
1439
  ssrcMetrics.freezeRate = (freezeCountDiff * 1000) / timeDiff;
1440
+ const freezeDurationDiff = (currentSsrcStats.totalFreezesDuration || 0) - ((prevSsrcStats === null || prevSsrcStats === void 0 ? void 0 : prevSsrcStats.totalFreezesDuration) || 0);
1441
+ ssrcMetrics.freezeFraction = (freezeDurationDiff * 1000) / timeDiff;
1440
1442
  }
1441
1443
  else {
1442
1444
  const kfCountDiff = currentSsrcStats.keyFramesEncoded - ((prevSsrcStats === null || prevSsrcStats === void 0 ? void 0 : prevSsrcStats.keyFramesEncoded) || 0);
@@ -6032,6 +6034,7 @@ const createQualityDetector = (type) => {
6032
6034
  const maxSideReceived = Math.max(ssrc0.width || 0, ssrc0.height || 0);
6033
6035
  const fpsReceived = ssrc0.fps || 0;
6034
6036
  const hadFreeze = !!ssrc0.freezeRate;
6037
+ const freezeFraction = ssrc0.freezeFraction || 0;
6035
6038
  const bitrate = ssrc0.bitrate || 0;
6036
6039
  if (maxSideRendered < 100) {
6037
6040
  if (type === "warning" && maxSideReceived < 160)
@@ -6056,8 +6059,12 @@ const createQualityDetector = (type) => {
6056
6059
  return true;
6057
6060
  if (type === "critical" && fpsReceived < 9)
6058
6061
  return true;
6059
- if (hadFreeze)
6060
- return true;
6062
+ if (hadFreeze) {
6063
+ if (type === "warning" && freezeFraction > 0.3)
6064
+ return true;
6065
+ if (type === "critical" && freezeFraction > 0.6)
6066
+ return true;
6067
+ }
6061
6068
  if (type === "warning" && bitrate < 50000)
6062
6069
  return true;
6063
6070
  if (type === "critical" && bitrate < 20000)
@@ -6076,8 +6083,12 @@ const createQualityDetector = (type) => {
6076
6083
  return true;
6077
6084
  if (type === "critical" && bitrate < 50000)
6078
6085
  return true;
6079
- if (hadFreeze)
6080
- return true;
6086
+ if (hadFreeze) {
6087
+ if (type === "warning" && freezeFraction > 0.2)
6088
+ return true;
6089
+ if (type === "critical" && freezeFraction > 0.4)
6090
+ return true;
6091
+ }
6081
6092
  }
6082
6093
  }
6083
6094
  }
@@ -6088,9 +6099,9 @@ const createQualityDetector = (type) => {
6088
6099
  const deceleration = ssrc0.audioDeceleration || 0;
6089
6100
  const audioDistortion = concealment + acceleration + deceleration;
6090
6101
  if (audioLevel >= 0.01) {
6091
- if (type === "warning" && audioDistortion > 0.1)
6102
+ if (type === "warning" && audioDistortion > 0.15)
6092
6103
  return true;
6093
- if (type === "critical" && audioDistortion > 0.2)
6104
+ if (type === "critical" && audioDistortion > 0.3)
6094
6105
  return true;
6095
6106
  }
6096
6107
  }
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@whereby.com/media",
3
3
  "description": "Media library for Whereby",
4
- "version": "9.3.1",
4
+ "version": "9.5.0",
5
5
  "license": "MIT",
6
6
  "homepage": "https://github.com/whereby/sdk",
7
7
  "repository": {