@whereby.com/media 8.0.1 → 8.0.2
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 +9 -5
- package/dist/index.d.cts +24 -8
- package/dist/index.d.mts +24 -8
- package/dist/index.d.ts +24 -8
- package/dist/index.mjs +9 -5
- package/dist/legacy-esm.js +9 -5
- package/package.json +1 -1
package/dist/index.cjs
CHANGED
|
@@ -6747,11 +6747,11 @@ class BandwidthTester extends EventEmitter {
|
|
|
6747
6747
|
const wsUrl = `wss://${host}`;
|
|
6748
6748
|
this._vegaConnection = new VegaConnection(wsUrl, "whereby-sfu#bw-test-v1");
|
|
6749
6749
|
this._vegaConnection.on("open", () => this._start());
|
|
6750
|
-
this._vegaConnection.on("close", () => this.close());
|
|
6750
|
+
this._vegaConnection.on("close", () => this.close(true));
|
|
6751
6751
|
this._vegaConnection.on("message", (message) => this._onMessage(message));
|
|
6752
6752
|
this._startTimeout();
|
|
6753
6753
|
}
|
|
6754
|
-
close() {
|
|
6754
|
+
close(vegaConnectionClosed) {
|
|
6755
6755
|
logger$1.info("close()");
|
|
6756
6756
|
this.closed = true;
|
|
6757
6757
|
if (!!this._timeout || Date.now() - this._startTime < 750) {
|
|
@@ -6759,6 +6759,12 @@ class BandwidthTester extends EventEmitter {
|
|
|
6759
6759
|
error: true,
|
|
6760
6760
|
});
|
|
6761
6761
|
}
|
|
6762
|
+
else if (vegaConnectionClosed && this._resultTimeout) {
|
|
6763
|
+
this.emit("result", {
|
|
6764
|
+
error: true,
|
|
6765
|
+
});
|
|
6766
|
+
clearTimeout(this._resultTimeout);
|
|
6767
|
+
}
|
|
6762
6768
|
this._clearTimeouts();
|
|
6763
6769
|
clearInterval(this._drawInterval);
|
|
6764
6770
|
this._drawInterval = null;
|
|
@@ -7101,9 +7107,7 @@ function buildDeviceList({ busyDeviceIds, devices, kind }) {
|
|
|
7101
7107
|
label: `${busyDeviceIds.includes(d.deviceId) ? "(busy) " : ""}${d.label || d.deviceId.slice(0, 5)}`,
|
|
7102
7108
|
busy: busyDeviceIds.includes(d.deviceId),
|
|
7103
7109
|
}));
|
|
7104
|
-
return deviceList && deviceList.length !== 0
|
|
7105
|
-
? deviceList
|
|
7106
|
-
: [{ [idFieldsByKind[kind]]: "", label: "Default" }];
|
|
7110
|
+
return deviceList && deviceList.length !== 0 ? deviceList : [{ [idFieldsByKind[kind]]: "", label: "Default" }];
|
|
7107
7111
|
}
|
|
7108
7112
|
function getUserMedia(constraints) {
|
|
7109
7113
|
if (!constraints.audio && !constraints.video) {
|
package/dist/index.d.cts
CHANGED
|
@@ -506,8 +506,8 @@ type GetMediaConstraintsOptions = {
|
|
|
506
506
|
};
|
|
507
507
|
type GetConstraintsOptions = {
|
|
508
508
|
devices: MediaDeviceInfo[];
|
|
509
|
-
audioId?: boolean | string;
|
|
510
|
-
videoId?: boolean | string;
|
|
509
|
+
audioId?: boolean | string | null;
|
|
510
|
+
videoId?: boolean | string | null;
|
|
511
511
|
type?: "ideal" | "exact";
|
|
512
512
|
options: Omit<GetMediaConstraintsOptions, "preferredDeviceIds">;
|
|
513
513
|
};
|
|
@@ -515,6 +515,11 @@ type GetStreamOptions = {
|
|
|
515
515
|
replaceStream?: MediaStream;
|
|
516
516
|
fallback?: boolean;
|
|
517
517
|
};
|
|
518
|
+
interface BuildDeviceListOptions {
|
|
519
|
+
devices: MediaDeviceInfo[];
|
|
520
|
+
busyDeviceIds: string[];
|
|
521
|
+
kind: MediaDeviceKind;
|
|
522
|
+
}
|
|
518
523
|
type GetStreamResult = {
|
|
519
524
|
error?: unknown;
|
|
520
525
|
replacedTracks?: MediaStreamTrack[];
|
|
@@ -1136,7 +1141,7 @@ declare class BandwidthTester extends EventEmitter {
|
|
|
1136
1141
|
features?: any;
|
|
1137
1142
|
});
|
|
1138
1143
|
start(runTime?: number): void;
|
|
1139
|
-
close(): void;
|
|
1144
|
+
close(vegaConnectionClosed?: boolean): void;
|
|
1140
1145
|
_start(): Promise<void>;
|
|
1141
1146
|
_createTransport(send: any): Promise<void>;
|
|
1142
1147
|
_getTestTrack(): any;
|
|
@@ -1163,22 +1168,33 @@ declare class NoDevicesError extends Error {
|
|
|
1163
1168
|
constructor(...args: any);
|
|
1164
1169
|
}
|
|
1165
1170
|
declare function enumerate(): Promise<MediaDeviceInfo[]>;
|
|
1166
|
-
declare function buildDeviceList({ busyDeviceIds, devices, kind }:
|
|
1171
|
+
declare function buildDeviceList({ busyDeviceIds, devices, kind }: BuildDeviceListOptions): {
|
|
1172
|
+
[x: string]: string | boolean;
|
|
1173
|
+
label: string;
|
|
1174
|
+
busy: boolean;
|
|
1175
|
+
}[] | {
|
|
1176
|
+
[x: string]: string;
|
|
1177
|
+
label: string;
|
|
1178
|
+
}[];
|
|
1167
1179
|
declare function getUserMedia(constraints: any): Promise<MediaStream>;
|
|
1168
1180
|
declare function getDeviceData({ audioTrack, videoTrack, devices, stoppedVideoTrack, lastAudioId, lastVideoId, }: {
|
|
1169
1181
|
audioTrack?: MediaStreamTrack | null;
|
|
1170
1182
|
videoTrack?: MediaStreamTrack | null;
|
|
1171
1183
|
devices: MediaDeviceInfo[];
|
|
1172
|
-
stoppedVideoTrack?:
|
|
1184
|
+
stoppedVideoTrack?: MediaStreamTrack;
|
|
1173
1185
|
lastAudioId?: string | undefined;
|
|
1174
1186
|
lastVideoId?: string | undefined;
|
|
1175
1187
|
}): GetDeviceDataResult;
|
|
1176
1188
|
declare function stopStreamTracks(stream: MediaStream, only?: "audio" | "video" | false): void;
|
|
1177
1189
|
declare function replaceTracksInStream(stream: MediaStream, newStream: MediaStream, only: "audio" | "video" | false): MediaStreamTrack[];
|
|
1178
|
-
declare function getStream(constraintOpt:
|
|
1190
|
+
declare function getStream(constraintOpt: GetConstraintsOptions, { replaceStream, fallback }?: GetStreamOptions): Promise<GetStreamResult>;
|
|
1179
1191
|
declare function hasGetDisplayMedia(): boolean;
|
|
1180
1192
|
declare function getDisplayMedia(constraints?: DisplayMediaStreamOptions, contentHint?: string): Promise<MediaStream>;
|
|
1181
|
-
declare function compareLocalDevices(before: MediaDeviceInfo[], after: MediaDeviceInfo[]):
|
|
1193
|
+
declare function compareLocalDevices(before: MediaDeviceInfo[], after: MediaDeviceInfo[]): Record<MediaDeviceKind, {
|
|
1194
|
+
removed: Record<string, MediaDeviceInfo>;
|
|
1195
|
+
added: Record<string, MediaDeviceInfo>;
|
|
1196
|
+
changed: Record<string, MediaDeviceInfo>;
|
|
1197
|
+
}>;
|
|
1182
1198
|
declare function getUpdatedDevices({ oldDevices, newDevices, currentAudioId, currentVideoId, currentSpeakerId, }: {
|
|
1183
1199
|
oldDevices: MediaDeviceInfo[];
|
|
1184
1200
|
newDevices: MediaDeviceInfo[];
|
|
@@ -1936,4 +1952,4 @@ declare const STREAM_TYPES: {
|
|
|
1936
1952
|
};
|
|
1937
1953
|
|
|
1938
1954
|
export { ADDITIONAL_SCREEN_SHARE_SETTINGS, AUDIO_SETTINGS, BandwidthTester, CAMERA_STREAM_ID, EVENTS, 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, isMobile, issueDetectorOrMetricEnabled, maybeTurnOnly, modifyMediaCapabilities, removePeerConnection, replaceTracksInStream, _default as rtcManagerEvents, rtcStats, setClientProvider, setCodecPreferenceSDP, setPeerConnectionsForTests, setVideoBandwidthUsingSetParameters, sortCodecs, standardDeviation, startPerformanceMonitor, stopStreamTracks, subscribeIssues, subscribeStats, trackAnnotations, turnServerOverride, variance };
|
|
1939
|
-
export type { AddCameraStreamOptions, AddSpotlightRequest, AudioEnableRequest, AudioEnableRequestedEvent, AudioEnabledEvent, BreakoutConfig, BreakoutGroupJoinedEvent, BreakoutSessionUpdatedEvent, CannotJoinUnclaimedRoomError, ChatMessage, ClearableTimeout, ClientKickedEvent, ClientLeftEvent, ClientMetadataPayload, ClientMetadataReceivedEvent, ClientRole, ClientUnableToJoinEvent, CloudRecordingStartedEvent, Codec, Credentials, ForbiddenError, ForbiddenErrorNames, GetConstraintsOptions, GetDeviceDataResult, GetMediaConstraintsOptions, GetStreamOptions, GetStreamResult, GetUpdatedDevicesResult, HostPresenceControlsError, IdentifyDeviceRequest, InternalServerError, InvalidAssistantKeyError, IssuesAndMetricsByView, JoinRoomRequest, KnockAcceptedEvent, KnockRejectedEvent, KnockRoomRequest, KnockerLeftEvent, LiveTranscriptionStartedEvent, LiveTranscriptionStoppedEvent, MaxViewerLimitReachedError, 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, VegaRtcManagerOptions, VideoEnableRequest, VideoEnableRequestedEvent, VideoEnabledEvent, WebRTCProvider };
|
|
1955
|
+
export type { AddCameraStreamOptions, AddSpotlightRequest, AudioEnableRequest, AudioEnableRequestedEvent, AudioEnabledEvent, BreakoutConfig, BreakoutGroupJoinedEvent, BreakoutSessionUpdatedEvent, BuildDeviceListOptions, CannotJoinUnclaimedRoomError, ChatMessage, ClearableTimeout, ClientKickedEvent, ClientLeftEvent, ClientMetadataPayload, ClientMetadataReceivedEvent, ClientRole, ClientUnableToJoinEvent, CloudRecordingStartedEvent, Codec, Credentials, ForbiddenError, ForbiddenErrorNames, GetConstraintsOptions, GetDeviceDataResult, GetMediaConstraintsOptions, GetStreamOptions, GetStreamResult, GetUpdatedDevicesResult, HostPresenceControlsError, IdentifyDeviceRequest, InternalServerError, InvalidAssistantKeyError, IssuesAndMetricsByView, JoinRoomRequest, KnockAcceptedEvent, KnockRejectedEvent, KnockRoomRequest, KnockerLeftEvent, LiveTranscriptionStartedEvent, LiveTranscriptionStoppedEvent, MaxViewerLimitReachedError, 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, VegaRtcManagerOptions, VideoEnableRequest, VideoEnableRequestedEvent, VideoEnabledEvent, WebRTCProvider };
|
package/dist/index.d.mts
CHANGED
|
@@ -506,8 +506,8 @@ type GetMediaConstraintsOptions = {
|
|
|
506
506
|
};
|
|
507
507
|
type GetConstraintsOptions = {
|
|
508
508
|
devices: MediaDeviceInfo[];
|
|
509
|
-
audioId?: boolean | string;
|
|
510
|
-
videoId?: boolean | string;
|
|
509
|
+
audioId?: boolean | string | null;
|
|
510
|
+
videoId?: boolean | string | null;
|
|
511
511
|
type?: "ideal" | "exact";
|
|
512
512
|
options: Omit<GetMediaConstraintsOptions, "preferredDeviceIds">;
|
|
513
513
|
};
|
|
@@ -515,6 +515,11 @@ type GetStreamOptions = {
|
|
|
515
515
|
replaceStream?: MediaStream;
|
|
516
516
|
fallback?: boolean;
|
|
517
517
|
};
|
|
518
|
+
interface BuildDeviceListOptions {
|
|
519
|
+
devices: MediaDeviceInfo[];
|
|
520
|
+
busyDeviceIds: string[];
|
|
521
|
+
kind: MediaDeviceKind;
|
|
522
|
+
}
|
|
518
523
|
type GetStreamResult = {
|
|
519
524
|
error?: unknown;
|
|
520
525
|
replacedTracks?: MediaStreamTrack[];
|
|
@@ -1136,7 +1141,7 @@ declare class BandwidthTester extends EventEmitter {
|
|
|
1136
1141
|
features?: any;
|
|
1137
1142
|
});
|
|
1138
1143
|
start(runTime?: number): void;
|
|
1139
|
-
close(): void;
|
|
1144
|
+
close(vegaConnectionClosed?: boolean): void;
|
|
1140
1145
|
_start(): Promise<void>;
|
|
1141
1146
|
_createTransport(send: any): Promise<void>;
|
|
1142
1147
|
_getTestTrack(): any;
|
|
@@ -1163,22 +1168,33 @@ declare class NoDevicesError extends Error {
|
|
|
1163
1168
|
constructor(...args: any);
|
|
1164
1169
|
}
|
|
1165
1170
|
declare function enumerate(): Promise<MediaDeviceInfo[]>;
|
|
1166
|
-
declare function buildDeviceList({ busyDeviceIds, devices, kind }:
|
|
1171
|
+
declare function buildDeviceList({ busyDeviceIds, devices, kind }: BuildDeviceListOptions): {
|
|
1172
|
+
[x: string]: string | boolean;
|
|
1173
|
+
label: string;
|
|
1174
|
+
busy: boolean;
|
|
1175
|
+
}[] | {
|
|
1176
|
+
[x: string]: string;
|
|
1177
|
+
label: string;
|
|
1178
|
+
}[];
|
|
1167
1179
|
declare function getUserMedia(constraints: any): Promise<MediaStream>;
|
|
1168
1180
|
declare function getDeviceData({ audioTrack, videoTrack, devices, stoppedVideoTrack, lastAudioId, lastVideoId, }: {
|
|
1169
1181
|
audioTrack?: MediaStreamTrack | null;
|
|
1170
1182
|
videoTrack?: MediaStreamTrack | null;
|
|
1171
1183
|
devices: MediaDeviceInfo[];
|
|
1172
|
-
stoppedVideoTrack?:
|
|
1184
|
+
stoppedVideoTrack?: MediaStreamTrack;
|
|
1173
1185
|
lastAudioId?: string | undefined;
|
|
1174
1186
|
lastVideoId?: string | undefined;
|
|
1175
1187
|
}): GetDeviceDataResult;
|
|
1176
1188
|
declare function stopStreamTracks(stream: MediaStream, only?: "audio" | "video" | false): void;
|
|
1177
1189
|
declare function replaceTracksInStream(stream: MediaStream, newStream: MediaStream, only: "audio" | "video" | false): MediaStreamTrack[];
|
|
1178
|
-
declare function getStream(constraintOpt:
|
|
1190
|
+
declare function getStream(constraintOpt: GetConstraintsOptions, { replaceStream, fallback }?: GetStreamOptions): Promise<GetStreamResult>;
|
|
1179
1191
|
declare function hasGetDisplayMedia(): boolean;
|
|
1180
1192
|
declare function getDisplayMedia(constraints?: DisplayMediaStreamOptions, contentHint?: string): Promise<MediaStream>;
|
|
1181
|
-
declare function compareLocalDevices(before: MediaDeviceInfo[], after: MediaDeviceInfo[]):
|
|
1193
|
+
declare function compareLocalDevices(before: MediaDeviceInfo[], after: MediaDeviceInfo[]): Record<MediaDeviceKind, {
|
|
1194
|
+
removed: Record<string, MediaDeviceInfo>;
|
|
1195
|
+
added: Record<string, MediaDeviceInfo>;
|
|
1196
|
+
changed: Record<string, MediaDeviceInfo>;
|
|
1197
|
+
}>;
|
|
1182
1198
|
declare function getUpdatedDevices({ oldDevices, newDevices, currentAudioId, currentVideoId, currentSpeakerId, }: {
|
|
1183
1199
|
oldDevices: MediaDeviceInfo[];
|
|
1184
1200
|
newDevices: MediaDeviceInfo[];
|
|
@@ -1936,4 +1952,4 @@ declare const STREAM_TYPES: {
|
|
|
1936
1952
|
};
|
|
1937
1953
|
|
|
1938
1954
|
export { ADDITIONAL_SCREEN_SHARE_SETTINGS, AUDIO_SETTINGS, BandwidthTester, CAMERA_STREAM_ID, EVENTS, 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, isMobile, issueDetectorOrMetricEnabled, maybeTurnOnly, modifyMediaCapabilities, removePeerConnection, replaceTracksInStream, _default as rtcManagerEvents, rtcStats, setClientProvider, setCodecPreferenceSDP, setPeerConnectionsForTests, setVideoBandwidthUsingSetParameters, sortCodecs, standardDeviation, startPerformanceMonitor, stopStreamTracks, subscribeIssues, subscribeStats, trackAnnotations, turnServerOverride, variance };
|
|
1939
|
-
export type { AddCameraStreamOptions, AddSpotlightRequest, AudioEnableRequest, AudioEnableRequestedEvent, AudioEnabledEvent, BreakoutConfig, BreakoutGroupJoinedEvent, BreakoutSessionUpdatedEvent, CannotJoinUnclaimedRoomError, ChatMessage, ClearableTimeout, ClientKickedEvent, ClientLeftEvent, ClientMetadataPayload, ClientMetadataReceivedEvent, ClientRole, ClientUnableToJoinEvent, CloudRecordingStartedEvent, Codec, Credentials, ForbiddenError, ForbiddenErrorNames, GetConstraintsOptions, GetDeviceDataResult, GetMediaConstraintsOptions, GetStreamOptions, GetStreamResult, GetUpdatedDevicesResult, HostPresenceControlsError, IdentifyDeviceRequest, InternalServerError, InvalidAssistantKeyError, IssuesAndMetricsByView, JoinRoomRequest, KnockAcceptedEvent, KnockRejectedEvent, KnockRoomRequest, KnockerLeftEvent, LiveTranscriptionStartedEvent, LiveTranscriptionStoppedEvent, MaxViewerLimitReachedError, 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, VegaRtcManagerOptions, VideoEnableRequest, VideoEnableRequestedEvent, VideoEnabledEvent, WebRTCProvider };
|
|
1955
|
+
export type { AddCameraStreamOptions, AddSpotlightRequest, AudioEnableRequest, AudioEnableRequestedEvent, AudioEnabledEvent, BreakoutConfig, BreakoutGroupJoinedEvent, BreakoutSessionUpdatedEvent, BuildDeviceListOptions, CannotJoinUnclaimedRoomError, ChatMessage, ClearableTimeout, ClientKickedEvent, ClientLeftEvent, ClientMetadataPayload, ClientMetadataReceivedEvent, ClientRole, ClientUnableToJoinEvent, CloudRecordingStartedEvent, Codec, Credentials, ForbiddenError, ForbiddenErrorNames, GetConstraintsOptions, GetDeviceDataResult, GetMediaConstraintsOptions, GetStreamOptions, GetStreamResult, GetUpdatedDevicesResult, HostPresenceControlsError, IdentifyDeviceRequest, InternalServerError, InvalidAssistantKeyError, IssuesAndMetricsByView, JoinRoomRequest, KnockAcceptedEvent, KnockRejectedEvent, KnockRoomRequest, KnockerLeftEvent, LiveTranscriptionStartedEvent, LiveTranscriptionStoppedEvent, MaxViewerLimitReachedError, 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, VegaRtcManagerOptions, VideoEnableRequest, VideoEnableRequestedEvent, VideoEnabledEvent, WebRTCProvider };
|
package/dist/index.d.ts
CHANGED
|
@@ -506,8 +506,8 @@ type GetMediaConstraintsOptions = {
|
|
|
506
506
|
};
|
|
507
507
|
type GetConstraintsOptions = {
|
|
508
508
|
devices: MediaDeviceInfo[];
|
|
509
|
-
audioId?: boolean | string;
|
|
510
|
-
videoId?: boolean | string;
|
|
509
|
+
audioId?: boolean | string | null;
|
|
510
|
+
videoId?: boolean | string | null;
|
|
511
511
|
type?: "ideal" | "exact";
|
|
512
512
|
options: Omit<GetMediaConstraintsOptions, "preferredDeviceIds">;
|
|
513
513
|
};
|
|
@@ -515,6 +515,11 @@ type GetStreamOptions = {
|
|
|
515
515
|
replaceStream?: MediaStream;
|
|
516
516
|
fallback?: boolean;
|
|
517
517
|
};
|
|
518
|
+
interface BuildDeviceListOptions {
|
|
519
|
+
devices: MediaDeviceInfo[];
|
|
520
|
+
busyDeviceIds: string[];
|
|
521
|
+
kind: MediaDeviceKind;
|
|
522
|
+
}
|
|
518
523
|
type GetStreamResult = {
|
|
519
524
|
error?: unknown;
|
|
520
525
|
replacedTracks?: MediaStreamTrack[];
|
|
@@ -1136,7 +1141,7 @@ declare class BandwidthTester extends EventEmitter {
|
|
|
1136
1141
|
features?: any;
|
|
1137
1142
|
});
|
|
1138
1143
|
start(runTime?: number): void;
|
|
1139
|
-
close(): void;
|
|
1144
|
+
close(vegaConnectionClosed?: boolean): void;
|
|
1140
1145
|
_start(): Promise<void>;
|
|
1141
1146
|
_createTransport(send: any): Promise<void>;
|
|
1142
1147
|
_getTestTrack(): any;
|
|
@@ -1163,22 +1168,33 @@ declare class NoDevicesError extends Error {
|
|
|
1163
1168
|
constructor(...args: any);
|
|
1164
1169
|
}
|
|
1165
1170
|
declare function enumerate(): Promise<MediaDeviceInfo[]>;
|
|
1166
|
-
declare function buildDeviceList({ busyDeviceIds, devices, kind }:
|
|
1171
|
+
declare function buildDeviceList({ busyDeviceIds, devices, kind }: BuildDeviceListOptions): {
|
|
1172
|
+
[x: string]: string | boolean;
|
|
1173
|
+
label: string;
|
|
1174
|
+
busy: boolean;
|
|
1175
|
+
}[] | {
|
|
1176
|
+
[x: string]: string;
|
|
1177
|
+
label: string;
|
|
1178
|
+
}[];
|
|
1167
1179
|
declare function getUserMedia(constraints: any): Promise<MediaStream>;
|
|
1168
1180
|
declare function getDeviceData({ audioTrack, videoTrack, devices, stoppedVideoTrack, lastAudioId, lastVideoId, }: {
|
|
1169
1181
|
audioTrack?: MediaStreamTrack | null;
|
|
1170
1182
|
videoTrack?: MediaStreamTrack | null;
|
|
1171
1183
|
devices: MediaDeviceInfo[];
|
|
1172
|
-
stoppedVideoTrack?:
|
|
1184
|
+
stoppedVideoTrack?: MediaStreamTrack;
|
|
1173
1185
|
lastAudioId?: string | undefined;
|
|
1174
1186
|
lastVideoId?: string | undefined;
|
|
1175
1187
|
}): GetDeviceDataResult;
|
|
1176
1188
|
declare function stopStreamTracks(stream: MediaStream, only?: "audio" | "video" | false): void;
|
|
1177
1189
|
declare function replaceTracksInStream(stream: MediaStream, newStream: MediaStream, only: "audio" | "video" | false): MediaStreamTrack[];
|
|
1178
|
-
declare function getStream(constraintOpt:
|
|
1190
|
+
declare function getStream(constraintOpt: GetConstraintsOptions, { replaceStream, fallback }?: GetStreamOptions): Promise<GetStreamResult>;
|
|
1179
1191
|
declare function hasGetDisplayMedia(): boolean;
|
|
1180
1192
|
declare function getDisplayMedia(constraints?: DisplayMediaStreamOptions, contentHint?: string): Promise<MediaStream>;
|
|
1181
|
-
declare function compareLocalDevices(before: MediaDeviceInfo[], after: MediaDeviceInfo[]):
|
|
1193
|
+
declare function compareLocalDevices(before: MediaDeviceInfo[], after: MediaDeviceInfo[]): Record<MediaDeviceKind, {
|
|
1194
|
+
removed: Record<string, MediaDeviceInfo>;
|
|
1195
|
+
added: Record<string, MediaDeviceInfo>;
|
|
1196
|
+
changed: Record<string, MediaDeviceInfo>;
|
|
1197
|
+
}>;
|
|
1182
1198
|
declare function getUpdatedDevices({ oldDevices, newDevices, currentAudioId, currentVideoId, currentSpeakerId, }: {
|
|
1183
1199
|
oldDevices: MediaDeviceInfo[];
|
|
1184
1200
|
newDevices: MediaDeviceInfo[];
|
|
@@ -1936,4 +1952,4 @@ declare const STREAM_TYPES: {
|
|
|
1936
1952
|
};
|
|
1937
1953
|
|
|
1938
1954
|
export { ADDITIONAL_SCREEN_SHARE_SETTINGS, AUDIO_SETTINGS, BandwidthTester, CAMERA_STREAM_ID, EVENTS, 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, isMobile, issueDetectorOrMetricEnabled, maybeTurnOnly, modifyMediaCapabilities, removePeerConnection, replaceTracksInStream, _default as rtcManagerEvents, rtcStats, setClientProvider, setCodecPreferenceSDP, setPeerConnectionsForTests, setVideoBandwidthUsingSetParameters, sortCodecs, standardDeviation, startPerformanceMonitor, stopStreamTracks, subscribeIssues, subscribeStats, trackAnnotations, turnServerOverride, variance };
|
|
1939
|
-
export type { AddCameraStreamOptions, AddSpotlightRequest, AudioEnableRequest, AudioEnableRequestedEvent, AudioEnabledEvent, BreakoutConfig, BreakoutGroupJoinedEvent, BreakoutSessionUpdatedEvent, CannotJoinUnclaimedRoomError, ChatMessage, ClearableTimeout, ClientKickedEvent, ClientLeftEvent, ClientMetadataPayload, ClientMetadataReceivedEvent, ClientRole, ClientUnableToJoinEvent, CloudRecordingStartedEvent, Codec, Credentials, ForbiddenError, ForbiddenErrorNames, GetConstraintsOptions, GetDeviceDataResult, GetMediaConstraintsOptions, GetStreamOptions, GetStreamResult, GetUpdatedDevicesResult, HostPresenceControlsError, IdentifyDeviceRequest, InternalServerError, InvalidAssistantKeyError, IssuesAndMetricsByView, JoinRoomRequest, KnockAcceptedEvent, KnockRejectedEvent, KnockRoomRequest, KnockerLeftEvent, LiveTranscriptionStartedEvent, LiveTranscriptionStoppedEvent, MaxViewerLimitReachedError, 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, VegaRtcManagerOptions, VideoEnableRequest, VideoEnableRequestedEvent, VideoEnabledEvent, WebRTCProvider };
|
|
1955
|
+
export type { AddCameraStreamOptions, AddSpotlightRequest, AudioEnableRequest, AudioEnableRequestedEvent, AudioEnabledEvent, BreakoutConfig, BreakoutGroupJoinedEvent, BreakoutSessionUpdatedEvent, BuildDeviceListOptions, CannotJoinUnclaimedRoomError, ChatMessage, ClearableTimeout, ClientKickedEvent, ClientLeftEvent, ClientMetadataPayload, ClientMetadataReceivedEvent, ClientRole, ClientUnableToJoinEvent, CloudRecordingStartedEvent, Codec, Credentials, ForbiddenError, ForbiddenErrorNames, GetConstraintsOptions, GetDeviceDataResult, GetMediaConstraintsOptions, GetStreamOptions, GetStreamResult, GetUpdatedDevicesResult, HostPresenceControlsError, IdentifyDeviceRequest, InternalServerError, InvalidAssistantKeyError, IssuesAndMetricsByView, JoinRoomRequest, KnockAcceptedEvent, KnockRejectedEvent, KnockRoomRequest, KnockerLeftEvent, LiveTranscriptionStartedEvent, LiveTranscriptionStoppedEvent, MaxViewerLimitReachedError, 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, VegaRtcManagerOptions, VideoEnableRequest, VideoEnableRequestedEvent, VideoEnabledEvent, WebRTCProvider };
|
package/dist/index.mjs
CHANGED
|
@@ -6726,11 +6726,11 @@ class BandwidthTester extends EventEmitter {
|
|
|
6726
6726
|
const wsUrl = `wss://${host}`;
|
|
6727
6727
|
this._vegaConnection = new VegaConnection(wsUrl, "whereby-sfu#bw-test-v1");
|
|
6728
6728
|
this._vegaConnection.on("open", () => this._start());
|
|
6729
|
-
this._vegaConnection.on("close", () => this.close());
|
|
6729
|
+
this._vegaConnection.on("close", () => this.close(true));
|
|
6730
6730
|
this._vegaConnection.on("message", (message) => this._onMessage(message));
|
|
6731
6731
|
this._startTimeout();
|
|
6732
6732
|
}
|
|
6733
|
-
close() {
|
|
6733
|
+
close(vegaConnectionClosed) {
|
|
6734
6734
|
logger$1.info("close()");
|
|
6735
6735
|
this.closed = true;
|
|
6736
6736
|
if (!!this._timeout || Date.now() - this._startTime < 750) {
|
|
@@ -6738,6 +6738,12 @@ class BandwidthTester extends EventEmitter {
|
|
|
6738
6738
|
error: true,
|
|
6739
6739
|
});
|
|
6740
6740
|
}
|
|
6741
|
+
else if (vegaConnectionClosed && this._resultTimeout) {
|
|
6742
|
+
this.emit("result", {
|
|
6743
|
+
error: true,
|
|
6744
|
+
});
|
|
6745
|
+
clearTimeout(this._resultTimeout);
|
|
6746
|
+
}
|
|
6741
6747
|
this._clearTimeouts();
|
|
6742
6748
|
clearInterval(this._drawInterval);
|
|
6743
6749
|
this._drawInterval = null;
|
|
@@ -7080,9 +7086,7 @@ function buildDeviceList({ busyDeviceIds, devices, kind }) {
|
|
|
7080
7086
|
label: `${busyDeviceIds.includes(d.deviceId) ? "(busy) " : ""}${d.label || d.deviceId.slice(0, 5)}`,
|
|
7081
7087
|
busy: busyDeviceIds.includes(d.deviceId),
|
|
7082
7088
|
}));
|
|
7083
|
-
return deviceList && deviceList.length !== 0
|
|
7084
|
-
? deviceList
|
|
7085
|
-
: [{ [idFieldsByKind[kind]]: "", label: "Default" }];
|
|
7089
|
+
return deviceList && deviceList.length !== 0 ? deviceList : [{ [idFieldsByKind[kind]]: "", label: "Default" }];
|
|
7086
7090
|
}
|
|
7087
7091
|
function getUserMedia(constraints) {
|
|
7088
7092
|
if (!constraints.audio && !constraints.video) {
|
package/dist/legacy-esm.js
CHANGED
|
@@ -6726,11 +6726,11 @@ class BandwidthTester extends EventEmitter {
|
|
|
6726
6726
|
const wsUrl = `wss://${host}`;
|
|
6727
6727
|
this._vegaConnection = new VegaConnection(wsUrl, "whereby-sfu#bw-test-v1");
|
|
6728
6728
|
this._vegaConnection.on("open", () => this._start());
|
|
6729
|
-
this._vegaConnection.on("close", () => this.close());
|
|
6729
|
+
this._vegaConnection.on("close", () => this.close(true));
|
|
6730
6730
|
this._vegaConnection.on("message", (message) => this._onMessage(message));
|
|
6731
6731
|
this._startTimeout();
|
|
6732
6732
|
}
|
|
6733
|
-
close() {
|
|
6733
|
+
close(vegaConnectionClosed) {
|
|
6734
6734
|
logger$1.info("close()");
|
|
6735
6735
|
this.closed = true;
|
|
6736
6736
|
if (!!this._timeout || Date.now() - this._startTime < 750) {
|
|
@@ -6738,6 +6738,12 @@ class BandwidthTester extends EventEmitter {
|
|
|
6738
6738
|
error: true,
|
|
6739
6739
|
});
|
|
6740
6740
|
}
|
|
6741
|
+
else if (vegaConnectionClosed && this._resultTimeout) {
|
|
6742
|
+
this.emit("result", {
|
|
6743
|
+
error: true,
|
|
6744
|
+
});
|
|
6745
|
+
clearTimeout(this._resultTimeout);
|
|
6746
|
+
}
|
|
6741
6747
|
this._clearTimeouts();
|
|
6742
6748
|
clearInterval(this._drawInterval);
|
|
6743
6749
|
this._drawInterval = null;
|
|
@@ -7080,9 +7086,7 @@ function buildDeviceList({ busyDeviceIds, devices, kind }) {
|
|
|
7080
7086
|
label: `${busyDeviceIds.includes(d.deviceId) ? "(busy) " : ""}${d.label || d.deviceId.slice(0, 5)}`,
|
|
7081
7087
|
busy: busyDeviceIds.includes(d.deviceId),
|
|
7082
7088
|
}));
|
|
7083
|
-
return deviceList && deviceList.length !== 0
|
|
7084
|
-
? deviceList
|
|
7085
|
-
: [{ [idFieldsByKind[kind]]: "", label: "Default" }];
|
|
7089
|
+
return deviceList && deviceList.length !== 0 ? deviceList : [{ [idFieldsByKind[kind]]: "", label: "Default" }];
|
|
7086
7090
|
}
|
|
7087
7091
|
function getUserMedia(constraints) {
|
|
7088
7092
|
if (!constraints.audio && !constraints.video) {
|