@whereby.com/media 1.6.4 → 1.7.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
@@ -3290,6 +3290,8 @@ const PROTOCOL_RESPONSES = {
3290
3290
  USER_NOTIFIED: "user_notified",
3291
3291
  VIDEO_ENABLED: "video_enabled",
3292
3292
  CLIENT_UNABLE_TO_JOIN: "client_unable_to_join",
3293
+ LIVE_TRANSCRIPTION_STARTED: "live_transcription_started",
3294
+ LIVE_TRANSCRIPTION_STOPPED: "live_transcription_stopped",
3293
3295
  };
3294
3296
  const PROTOCOL_ERRORS = {
3295
3297
  CANNOT_INVITE_YOURSELF: "cannot_invite_yourself",
@@ -3548,20 +3550,32 @@ class P2pRtcManager {
3548
3550
  maybeRestrictRelayBandwidth(session) {
3549
3551
  session.maybeRestrictRelayBandwidth();
3550
3552
  }
3551
- addNewStream(streamId, stream) {
3553
+ addNewStream(streamId, stream, audioPaused, videoPaused, beforeEffectTracks = []) {
3552
3554
  if (stream === this.localStreams[streamId]) {
3553
3555
  return;
3554
3556
  }
3555
3557
  this._addLocalStream(streamId, stream);
3556
3558
  if (streamId === CAMERA_STREAM_ID) {
3557
3559
  this._addStreamToPeerConnections(stream);
3558
- const [audioTrack] = stream.getAudioTracks();
3560
+ const audioTrack = stream.getAudioTracks()[0];
3559
3561
  const videoTrack = stream.getVideoTracks()[0];
3560
3562
  if (audioTrack) {
3561
- this._startMonitoringAudioTrack(audioTrack);
3563
+ if (!audioTrack.effectTrack) {
3564
+ this._monitorAudioTrack(audioTrack);
3565
+ }
3566
+ const beforeEffectTrack = beforeEffectTracks.find((t) => t.kind === "audio");
3567
+ if (beforeEffectTrack) {
3568
+ this._monitorAudioTrack(beforeEffectTrack);
3569
+ }
3562
3570
  }
3563
- if (videoTrack && !videoTrack.replacement) {
3564
- this._startMonitoringVideoTrack(videoTrack);
3571
+ if (videoTrack) {
3572
+ if (!videoTrack.effectTrack) {
3573
+ this._monitorVideoTrack(videoTrack);
3574
+ }
3575
+ const beforeEffectTrack = beforeEffectTracks.find((t) => t.kind === "video");
3576
+ if (beforeEffectTrack) {
3577
+ this._monitorVideoTrack(beforeEffectTrack);
3578
+ }
3565
3579
  }
3566
3580
  if (this._localStreamDeregisterFunction) {
3567
3581
  this._localStreamDeregisterFunction();
@@ -3582,17 +3596,11 @@ class P2pRtcManager {
3582
3596
  return;
3583
3597
  }
3584
3598
  replaceTrack(oldTrack, newTrack) {
3585
- if (oldTrack && oldTrack.kind === "audio") {
3586
- this._stopMonitoringAudioTrack(oldTrack);
3587
- }
3588
- if (oldTrack && oldTrack.kind === "video" && !newTrack.replacement) {
3589
- this._stopMonitoringVideoTrack(oldTrack);
3599
+ if (newTrack.kind === "audio" && !newTrack.effectTrack) {
3600
+ this._monitorAudioTrack(newTrack);
3590
3601
  }
3591
- if (newTrack && newTrack.kind === "audio") {
3592
- this._startMonitoringAudioTrack(newTrack);
3593
- }
3594
- if (newTrack.kind === "video" && !newTrack.replacement) {
3595
- this._startMonitoringVideoTrack(newTrack);
3602
+ if (newTrack.kind === "video" && !newTrack.effectTrack) {
3603
+ this._monitorVideoTrack(newTrack);
3596
3604
  }
3597
3605
  return this._replaceTrackToPeerConnections(oldTrack, newTrack);
3598
3606
  }
@@ -4106,17 +4114,21 @@ class P2pRtcManager {
4106
4114
  clearTimeout(this._fetchMediaServersTimer);
4107
4115
  this._fetchMediaServersTimer = null;
4108
4116
  }
4109
- _startMonitoringAudioTrack(track) {
4117
+ _monitorAudioTrack(track) {
4118
+ var _a, _b;
4119
+ if (((_a = this._audioTrackBeingMonitored) === null || _a === void 0 ? void 0 : _a.id) === track.id)
4120
+ return;
4121
+ (_b = this._audioTrackBeingMonitored) === null || _b === void 0 ? void 0 : _b.removeEventListener("ended", this._audioTrackOnEnded);
4110
4122
  track.addEventListener("ended", this._audioTrackOnEnded);
4123
+ this._audioTrackBeingMonitored = track;
4111
4124
  }
4112
- _stopMonitoringAudioTrack(track) {
4113
- track.removeEventListener("ended", this._audioTrackOnEnded);
4114
- }
4115
- _startMonitoringVideoTrack(track) {
4125
+ _monitorVideoTrack(track) {
4126
+ var _a, _b;
4127
+ if (((_a = this._videoTrackBeingMonitored) === null || _a === void 0 ? void 0 : _a.id) === track.id)
4128
+ return;
4129
+ (_b = this._videoTrackBeingMonitored) === null || _b === void 0 ? void 0 : _b.removeEventListener("ended", this._videoTrackOnEnded);
4116
4130
  track.addEventListener("ended", this._videoTrackOnEnded);
4117
- }
4118
- _stopMonitoringVideoTrack(track) {
4119
- track.removeEventListener("ended", this._videoTrackOnEnded);
4131
+ this._videoTrackBeingMonitored = track;
4120
4132
  }
4121
4133
  _connect(clientId) {
4122
4134
  this.rtcStatsReconnect();
@@ -4476,7 +4488,9 @@ class P2pRtcManager {
4476
4488
  return;
4477
4489
  }
4478
4490
  if (enable === false) {
4479
- const stopCameraDelay = ((_a = localStream.getVideoTracks().find((t) => !t.enabled)) === null || _a === void 0 ? void 0 : _a.readyState) === "ended" ? 0 : 5000;
4491
+ const stopCameraDelay = ((_a = localStream.getVideoTracks().find((t) => !t.enabled)) === null || _a === void 0 ? void 0 : _a.readyState) === "ended"
4492
+ ? 0
4493
+ : 5000;
4480
4494
  setTimeout(() => {
4481
4495
  localStream.getVideoTracks().forEach((track) => {
4482
4496
  if (track.enabled === false) {
@@ -4500,7 +4514,7 @@ class P2pRtcManager {
4500
4514
  navigator.mediaDevices.getUserMedia({ video: constraints }).then((stream) => {
4501
4515
  const track = stream.getVideoTracks()[0];
4502
4516
  localStream.addTrack(track);
4503
- this._startMonitoringVideoTrack(track);
4517
+ this._monitorVideoTrack(track);
4504
4518
  this._emit(EVENTS.LOCAL_STREAM_TRACK_ADDED, {
4505
4519
  streamId: localStream.id,
4506
4520
  tracks: [track],
@@ -5727,20 +5741,16 @@ class VegaRtcManager {
5727
5741
  }
5728
5742
  }
5729
5743
  replaceTrack(oldTrack, track) {
5730
- if (oldTrack && oldTrack.kind === "audio") {
5731
- this._stopMonitoringAudioTrack(oldTrack);
5732
- }
5733
- if (oldTrack && oldTrack.kind === "video" && !track.replacement) {
5734
- this._stopMonitoringVideoTrack(oldTrack);
5735
- }
5736
5744
  if (track.kind === "audio") {
5737
- this._startMonitoringAudioTrack(track);
5745
+ if (!track.effectTrack) {
5746
+ this._monitorAudioTrack(track);
5747
+ }
5738
5748
  this._micTrack = track;
5739
5749
  this._replaceMicTrack();
5740
5750
  }
5741
5751
  if (track.kind === "video") {
5742
- if (!track.replacement) {
5743
- this._startMonitoringVideoTrack(track);
5752
+ if (!track.effectTrack) {
5753
+ this._monitorVideoTrack(track);
5744
5754
  }
5745
5755
  this._webcamTrack = track;
5746
5756
  this._replaceWebcamTrack();
@@ -5764,7 +5774,7 @@ class VegaRtcManager {
5764
5774
  (_b = (_a = this._micAnalyserDebugger) === null || _a === void 0 ? void 0 : _a.onScoreUpdated) === null || _b === void 0 ? void 0 : _b.call(_a, data);
5765
5775
  this._sendMicScore(this._micPaused ? 0 : data.out);
5766
5776
  }
5767
- addNewStream(streamId, stream, audioPaused, videoPaused) {
5777
+ addNewStream(streamId, stream, audioPaused, videoPaused, beforeEffectTracks = []) {
5768
5778
  if (streamId === "0") {
5769
5779
  this._micPaused = audioPaused;
5770
5780
  this._webcamPaused = videoPaused;
@@ -5772,14 +5782,24 @@ class VegaRtcManager {
5772
5782
  const audioTrack = stream.getAudioTracks()[0];
5773
5783
  if (videoTrack) {
5774
5784
  this._sendWebcam(videoTrack);
5775
- if (!videoTrack.replacement) {
5776
- this._startMonitoringVideoTrack(videoTrack);
5785
+ if (!videoTrack.effectTrack) {
5786
+ this._monitorVideoTrack(videoTrack);
5787
+ }
5788
+ const beforeEffectTrack = beforeEffectTracks.find(t => t.kind === "video");
5789
+ if (beforeEffectTrack) {
5790
+ this._monitorVideoTrack(beforeEffectTrack);
5777
5791
  }
5778
5792
  }
5779
5793
  if (audioTrack) {
5780
5794
  this._sendMic(audioTrack);
5781
5795
  this._syncMicAnalyser();
5782
- this._startMonitoringAudioTrack(audioTrack);
5796
+ if (!audioTrack.effectTrack) {
5797
+ this._monitorAudioTrack(audioTrack);
5798
+ }
5799
+ const beforeEffectTrack = beforeEffectTracks.find(t => t.kind === "audio");
5800
+ if (beforeEffectTrack) {
5801
+ this._monitorAudioTrack(beforeEffectTrack);
5802
+ }
5783
5803
  }
5784
5804
  if (this._localStreamDeregisterFunction) {
5785
5805
  this._localStreamDeregisterFunction();
@@ -5867,7 +5887,7 @@ class VegaRtcManager {
5867
5887
  navigator.mediaDevices.getUserMedia({ video: constraints }).then((stream) => {
5868
5888
  const track = stream.getVideoTracks()[0];
5869
5889
  localStream.addTrack(track);
5870
- this._startMonitoringVideoTrack(track);
5890
+ this._monitorVideoTrack(track);
5871
5891
  this._emitToPWA(EVENTS.LOCAL_STREAM_TRACK_ADDED, {
5872
5892
  streamId: localStream.id,
5873
5893
  tracks: [track],
@@ -5964,17 +5984,21 @@ class VegaRtcManager {
5964
5984
  rtcStats.server.connect();
5965
5985
  }
5966
5986
  }
5967
- _startMonitoringAudioTrack(track) {
5987
+ _monitorAudioTrack(track) {
5988
+ var _a, _b;
5989
+ if (((_a = this._audioTrackBeingMonitored) === null || _a === void 0 ? void 0 : _a.id) === track.id)
5990
+ return;
5991
+ (_b = this._audioTrackBeingMonitored) === null || _b === void 0 ? void 0 : _b.removeEventListener("ended", this._audioTrackOnEnded);
5968
5992
  track.addEventListener("ended", this._audioTrackOnEnded);
5993
+ this._audioTrackBeingMonitored = track;
5969
5994
  }
5970
- _stopMonitoringAudioTrack(track) {
5971
- track.removeEventListener("ended", this._audioTrackOnEnded);
5972
- }
5973
- _startMonitoringVideoTrack(track) {
5995
+ _monitorVideoTrack(track) {
5996
+ var _a, _b;
5997
+ if (((_a = this._videoTrackBeingMonitored) === null || _a === void 0 ? void 0 : _a.id) === track.id)
5998
+ return;
5999
+ (_b = this._videoTrackBeingMonitored) === null || _b === void 0 ? void 0 : _b.removeEventListener("ended", this._videoTrackOnEnded);
5974
6000
  track.addEventListener("ended", this._videoTrackOnEnded);
5975
- }
5976
- _stopMonitoringVideoTrack(track) {
5977
- track.removeEventListener("ended", this._videoTrackOnEnded);
6001
+ this._videoTrackBeingMonitored = track;
5978
6002
  }
5979
6003
  _onMessage(message) {
5980
6004
  return __awaiter(this, void 0, void 0, function* () {
package/dist/index.d.cts CHANGED
@@ -264,7 +264,7 @@ type GetDeviceDataResult = {
264
264
  };
265
265
  };
266
266
  interface CustomMediaStreamTrack extends MediaStreamTrack {
267
- replacement?: boolean;
267
+ effectTrack?: boolean;
268
268
  }
269
269
 
270
270
  declare function getMediaConstraints({ disableAEC, disableAGC, hd, lax, lowDataMode, preferredDeviceIds, resolution, simulcast, widescreen, }: GetMediaConstraintsOptions): any;
@@ -343,6 +343,8 @@ declare class P2pRtcManager implements RtcManager {
343
343
  _lastReverseDirectionAttemptByClientId: any;
344
344
  _stoppedVideoTrack: any;
345
345
  icePublicIPGatheringTimeoutID: any;
346
+ _videoTrackBeingMonitored?: CustomMediaStreamTrack;
347
+ _audioTrackBeingMonitored?: CustomMediaStreamTrack;
346
348
  constructor({ selfId, room, emitter, serverSocket, webrtcProvider, features, }: {
347
349
  selfId: any;
348
350
  room: any;
@@ -359,8 +361,8 @@ declare class P2pRtcManager implements RtcManager {
359
361
  }): boolean;
360
362
  supportsScreenShareAudio(): boolean;
361
363
  maybeRestrictRelayBandwidth(session: any): void;
362
- addNewStream(streamId: string, stream: MediaStream): void;
363
- replaceTrack(oldTrack: CustomMediaStreamTrack, newTrack: CustomMediaStreamTrack): Promise<any[]>;
364
+ addNewStream(streamId: string, stream: MediaStream, audioPaused: boolean, videoPaused: boolean, beforeEffectTracks?: CustomMediaStreamTrack[]): void;
365
+ replaceTrack(oldTrack: CustomMediaStreamTrack | null, newTrack: CustomMediaStreamTrack): Promise<any[]>;
364
366
  accept({ clientId, shouldAddLocalVideo }: {
365
367
  clientId: string;
366
368
  shouldAddLocalVideo?: boolean;
@@ -414,10 +416,8 @@ declare class P2pRtcManager implements RtcManager {
414
416
  _removeLocalStream(streamId: string): void;
415
417
  _updateAndScheduleMediaServersRefresh({ iceServers, sfuServer, mediaserverConfigTtlSeconds }: any): void;
416
418
  _clearMediaServersRefresh(): void;
417
- _startMonitoringAudioTrack(track: any): void;
418
- _stopMonitoringAudioTrack(track: any): void;
419
- _startMonitoringVideoTrack(track: CustomMediaStreamTrack): void;
420
- _stopMonitoringVideoTrack(track: CustomMediaStreamTrack): void;
419
+ _monitorAudioTrack(track: any): void;
420
+ _monitorVideoTrack(track: CustomMediaStreamTrack): void;
421
421
  _connect(clientId: string): Promise<any>;
422
422
  _maybeRestartIce(clientId: string, session: any): void;
423
423
  _setCodecPreferences(pc: any, vp9On: any, av1On: any, redOn: any): void;
@@ -705,6 +705,13 @@ interface SpotlightRemovedEvent {
705
705
  streamId: string;
706
706
  requestedByClientId: string;
707
707
  }
708
+ interface LiveTranscriptionStartedEvent {
709
+ startedAt: string;
710
+ transcriptionId: string;
711
+ }
712
+ interface LiveTranscriptionStoppedEvent {
713
+ transcriptionId: string;
714
+ }
708
715
  interface SignalEvents {
709
716
  audio_enabled: AudioEnabledEvent;
710
717
  audio_enable_requested: AudioEnableRequestedEvent;
@@ -732,6 +739,8 @@ interface SignalEvents {
732
739
  spotlight_removed: SpotlightRemovedEvent;
733
740
  streaming_stopped: void;
734
741
  video_enabled: VideoEnabledEvent;
742
+ live_transcription_started: LiveTranscriptionStartedEvent;
743
+ live_transcription_stopped: LiveTranscriptionStoppedEvent;
735
744
  }
736
745
  interface IdentifyDeviceRequest {
737
746
  deviceCredentials: Credentials;
@@ -1110,6 +1119,8 @@ declare class VegaRtcManager implements RtcManager {
1110
1119
  _iceServers: any;
1111
1120
  _sfuServer: any;
1112
1121
  _mediaserverConfigTtlSeconds: any;
1122
+ _videoTrackBeingMonitored?: CustomMediaStreamTrack;
1123
+ _audioTrackBeingMonitored?: CustomMediaStreamTrack;
1113
1124
  constructor({ selfId, room, emitter, serverSocket, webrtcProvider, features, eventClaim, deviceHandlerFactory, }: {
1114
1125
  selfId: any;
1115
1126
  room: any;
@@ -1165,7 +1176,7 @@ declare class VegaRtcManager implements RtcManager {
1165
1176
  replaceTrack(oldTrack: CustomMediaStreamTrack | null, track: CustomMediaStreamTrack): void;
1166
1177
  removeStream(streamId: string, _stream: MediaStream, requestedByClientId: string): void;
1167
1178
  _onMicAnalyserScoreUpdated(data: any): void;
1168
- addNewStream(streamId: string, stream: MediaStream, audioPaused: boolean, videoPaused: boolean): void;
1179
+ addNewStream(streamId: string, stream: MediaStream, audioPaused: boolean, videoPaused: boolean, beforeEffectTracks?: CustomMediaStreamTrack[]): void;
1169
1180
  _syncMicAnalyser(): void;
1170
1181
  stopOrResumeAudio(stream: MediaStream, enabled: boolean): void;
1171
1182
  _handleStopOrResumeVideo({ enable, track }: {
@@ -1188,10 +1199,8 @@ declare class VegaRtcManager implements RtcManager {
1188
1199
  sendStatsCustomEvent(eventName: string, data?: any): void;
1189
1200
  rtcStatsDisconnect(): void;
1190
1201
  rtcStatsReconnect(): void;
1191
- _startMonitoringAudioTrack(track: MediaStreamTrack): void;
1192
- _stopMonitoringAudioTrack(track: MediaStreamTrack): void;
1193
- _startMonitoringVideoTrack(track: CustomMediaStreamTrack): void;
1194
- _stopMonitoringVideoTrack(track: CustomMediaStreamTrack): void;
1202
+ _monitorAudioTrack(track: any): void;
1203
+ _monitorVideoTrack(track: CustomMediaStreamTrack): void;
1195
1204
  _onMessage(message: any): Promise<void>;
1196
1205
  _onConsumerReady(options: any): Promise<void>;
1197
1206
  _onConsumerClosed({ consumerId, reason }: {
@@ -1318,6 +1327,8 @@ declare const PROTOCOL_RESPONSES: {
1318
1327
  USER_NOTIFIED: string;
1319
1328
  VIDEO_ENABLED: string;
1320
1329
  CLIENT_UNABLE_TO_JOIN: string;
1330
+ LIVE_TRANSCRIPTION_STARTED: string;
1331
+ LIVE_TRANSCRIPTION_STOPPED: string;
1321
1332
  };
1322
1333
  declare const PROTOCOL_ERRORS: {
1323
1334
  CANNOT_INVITE_YOURSELF: string;
@@ -1394,4 +1405,4 @@ declare class RtcStream {
1394
1405
  static getTypeFromId(id: string): string;
1395
1406
  }
1396
1407
 
1397
- export { type AddSpotlightRequest, type AudioEnableRequest, type AudioEnableRequestedEvent, type AudioEnabledEvent, BandwidthTester, type ChatMessage, type ClientKickedEvent, type ClientLeftEvent, type ClientMetadataPayload, type ClientMetadataReceivedEvent, type ClientRole, type CloudRecordingStartedEvent, type Credentials, type CustomMediaStreamTrack, EVENTS, type GetConstraintsOptions, type GetDeviceDataResult, type GetMediaConstraintsOptions, type GetStreamOptions, type GetStreamResult, type GetUpdatedDevicesResult, type IdentifyDeviceRequest, type JoinRoomRequest, KNOCK_MESSAGES, KalmanFilter, type KnockAcceptedEvent, type KnockRejectedEvent, type KnockRoomRequest, type KnockerLeftEvent, Logger, MAXIMUM_TURN_BANDWIDTH, MAXIMUM_TURN_BANDWIDTH_UNLIMITED, MEDIA_JITTER_BUFFER_TARGET, type NewClientEvent, NoDevicesError, P2pRtcManager, PROTOCOL_ERRORS, PROTOCOL_EVENTS, PROTOCOL_REQUESTS, PROTOCOL_RESPONSES, RELAY_MESSAGES, ReconnectManager, type RemoveSpotlightRequest, type RoleName, type RoomJoinedEvent, type RoomKnockedEvent, type RoomLockedEvent, type RoomSessionEndedEvent, type RtcClientConnectionStatusChangedPayload, RtcEventNames, type RtcEvents, type RtcLocalStreamTrackAddedPayload, type RtcLocalStreamTrackRemovedPayload, type RtcManager, type RtcManagerCreatedPayload, RtcManagerDispatcher, RtcStream, type RtcStreamAddedPayload, STREAM_TYPES, type ScreenshareStartedEvent, type ScreenshareStoppedEvent, type SendClientMetadataRequest, ServerSocket, Session, SfuV2Parser, type SignalClient, type SignalEvents, type SignalKnocker, type SignalRequests, type SocketConf, type SocketManager, type Spotlight, type SpotlightAddedEvent, type SpotlightRemovedEvent, type StatsMonitorOptions, type StatsMonitorState, TYPES, VegaConnection, VegaMediaQualityMonitor, VegaRtcManager, type VideoEnabledEvent, addAbsCaptureTimeExtMap, addExtMap, assert, buildDeviceList, calculateStd, captureAudioSsrcMetrics, captureCandidatePairInfoMetrics, captureCommonSsrcMetrics, captureSsrcInfo, captureVideoSsrcMetrics, changeMediaDirection, compareLocalDevices, createACFCalculator, createMicAnalyser, createWorker, deprioritizeH264, detectMicrophoneNotWorking, enumerate, filterMidExtension, filterMsidSemantic, fromLocation, generateByteString, getConstraints, getCurrentPeerConnections, getDeviceData, getDisplayMedia, getHandler, getIssuesAndMetrics, getMediaConstraints, getMediaSettings, getOptimalBitrate, getPeerConnectionIndex, getStats, getStream, getStream2, getUpdatedDevices, getUpdatedStats, getUserMedia, hasGetDisplayMedia, ipRegex, isMobile, isRelayed, maybeRejectNoH264, maybeTurnOnly, modifyMediaCapabilities, removePeerConnection, replaceSSRCs, replaceTracksInStream, _default as rtcManagerEvents, rtcStats, setClientProvider, setCodecPreferenceSDP, setPeerConnectionsForTests, setVideoBandwidthUsingSetParameters, standardDeviation, startPerformanceMonitor, stopStreamTracks, subscribeIssues, subscribeStats, variance };
1408
+ export { type AddSpotlightRequest, type AudioEnableRequest, type AudioEnableRequestedEvent, type AudioEnabledEvent, BandwidthTester, type ChatMessage, type ClientKickedEvent, type ClientLeftEvent, type ClientMetadataPayload, type ClientMetadataReceivedEvent, type ClientRole, type CloudRecordingStartedEvent, type Credentials, type CustomMediaStreamTrack, EVENTS, type GetConstraintsOptions, type GetDeviceDataResult, type GetMediaConstraintsOptions, type GetStreamOptions, type GetStreamResult, type GetUpdatedDevicesResult, type IdentifyDeviceRequest, type JoinRoomRequest, KNOCK_MESSAGES, KalmanFilter, type KnockAcceptedEvent, type KnockRejectedEvent, type KnockRoomRequest, type KnockerLeftEvent, type LiveTranscriptionStartedEvent, type LiveTranscriptionStoppedEvent, Logger, MAXIMUM_TURN_BANDWIDTH, MAXIMUM_TURN_BANDWIDTH_UNLIMITED, MEDIA_JITTER_BUFFER_TARGET, type NewClientEvent, NoDevicesError, P2pRtcManager, PROTOCOL_ERRORS, PROTOCOL_EVENTS, PROTOCOL_REQUESTS, PROTOCOL_RESPONSES, RELAY_MESSAGES, ReconnectManager, type RemoveSpotlightRequest, type RoleName, type RoomJoinedEvent, type RoomKnockedEvent, type RoomLockedEvent, type RoomSessionEndedEvent, type RtcClientConnectionStatusChangedPayload, RtcEventNames, type RtcEvents, type RtcLocalStreamTrackAddedPayload, type RtcLocalStreamTrackRemovedPayload, type RtcManager, type RtcManagerCreatedPayload, RtcManagerDispatcher, RtcStream, type RtcStreamAddedPayload, STREAM_TYPES, type ScreenshareStartedEvent, type ScreenshareStoppedEvent, type SendClientMetadataRequest, ServerSocket, Session, SfuV2Parser, type SignalClient, type SignalEvents, type SignalKnocker, type SignalRequests, type SocketConf, type SocketManager, type Spotlight, type SpotlightAddedEvent, type SpotlightRemovedEvent, type StatsMonitorOptions, type StatsMonitorState, TYPES, VegaConnection, VegaMediaQualityMonitor, VegaRtcManager, type VideoEnabledEvent, addAbsCaptureTimeExtMap, addExtMap, assert, buildDeviceList, calculateStd, captureAudioSsrcMetrics, captureCandidatePairInfoMetrics, captureCommonSsrcMetrics, captureSsrcInfo, captureVideoSsrcMetrics, changeMediaDirection, compareLocalDevices, createACFCalculator, createMicAnalyser, createWorker, deprioritizeH264, detectMicrophoneNotWorking, enumerate, filterMidExtension, filterMsidSemantic, fromLocation, generateByteString, getConstraints, getCurrentPeerConnections, getDeviceData, getDisplayMedia, getHandler, getIssuesAndMetrics, getMediaConstraints, getMediaSettings, getOptimalBitrate, getPeerConnectionIndex, getStats, getStream, getStream2, getUpdatedDevices, getUpdatedStats, getUserMedia, hasGetDisplayMedia, ipRegex, isMobile, isRelayed, maybeRejectNoH264, maybeTurnOnly, modifyMediaCapabilities, removePeerConnection, replaceSSRCs, replaceTracksInStream, _default as rtcManagerEvents, rtcStats, setClientProvider, setCodecPreferenceSDP, setPeerConnectionsForTests, setVideoBandwidthUsingSetParameters, standardDeviation, startPerformanceMonitor, stopStreamTracks, subscribeIssues, subscribeStats, variance };
package/dist/index.d.mts CHANGED
@@ -264,7 +264,7 @@ type GetDeviceDataResult = {
264
264
  };
265
265
  };
266
266
  interface CustomMediaStreamTrack extends MediaStreamTrack {
267
- replacement?: boolean;
267
+ effectTrack?: boolean;
268
268
  }
269
269
 
270
270
  declare function getMediaConstraints({ disableAEC, disableAGC, hd, lax, lowDataMode, preferredDeviceIds, resolution, simulcast, widescreen, }: GetMediaConstraintsOptions): any;
@@ -343,6 +343,8 @@ declare class P2pRtcManager implements RtcManager {
343
343
  _lastReverseDirectionAttemptByClientId: any;
344
344
  _stoppedVideoTrack: any;
345
345
  icePublicIPGatheringTimeoutID: any;
346
+ _videoTrackBeingMonitored?: CustomMediaStreamTrack;
347
+ _audioTrackBeingMonitored?: CustomMediaStreamTrack;
346
348
  constructor({ selfId, room, emitter, serverSocket, webrtcProvider, features, }: {
347
349
  selfId: any;
348
350
  room: any;
@@ -359,8 +361,8 @@ declare class P2pRtcManager implements RtcManager {
359
361
  }): boolean;
360
362
  supportsScreenShareAudio(): boolean;
361
363
  maybeRestrictRelayBandwidth(session: any): void;
362
- addNewStream(streamId: string, stream: MediaStream): void;
363
- replaceTrack(oldTrack: CustomMediaStreamTrack, newTrack: CustomMediaStreamTrack): Promise<any[]>;
364
+ addNewStream(streamId: string, stream: MediaStream, audioPaused: boolean, videoPaused: boolean, beforeEffectTracks?: CustomMediaStreamTrack[]): void;
365
+ replaceTrack(oldTrack: CustomMediaStreamTrack | null, newTrack: CustomMediaStreamTrack): Promise<any[]>;
364
366
  accept({ clientId, shouldAddLocalVideo }: {
365
367
  clientId: string;
366
368
  shouldAddLocalVideo?: boolean;
@@ -414,10 +416,8 @@ declare class P2pRtcManager implements RtcManager {
414
416
  _removeLocalStream(streamId: string): void;
415
417
  _updateAndScheduleMediaServersRefresh({ iceServers, sfuServer, mediaserverConfigTtlSeconds }: any): void;
416
418
  _clearMediaServersRefresh(): void;
417
- _startMonitoringAudioTrack(track: any): void;
418
- _stopMonitoringAudioTrack(track: any): void;
419
- _startMonitoringVideoTrack(track: CustomMediaStreamTrack): void;
420
- _stopMonitoringVideoTrack(track: CustomMediaStreamTrack): void;
419
+ _monitorAudioTrack(track: any): void;
420
+ _monitorVideoTrack(track: CustomMediaStreamTrack): void;
421
421
  _connect(clientId: string): Promise<any>;
422
422
  _maybeRestartIce(clientId: string, session: any): void;
423
423
  _setCodecPreferences(pc: any, vp9On: any, av1On: any, redOn: any): void;
@@ -705,6 +705,13 @@ interface SpotlightRemovedEvent {
705
705
  streamId: string;
706
706
  requestedByClientId: string;
707
707
  }
708
+ interface LiveTranscriptionStartedEvent {
709
+ startedAt: string;
710
+ transcriptionId: string;
711
+ }
712
+ interface LiveTranscriptionStoppedEvent {
713
+ transcriptionId: string;
714
+ }
708
715
  interface SignalEvents {
709
716
  audio_enabled: AudioEnabledEvent;
710
717
  audio_enable_requested: AudioEnableRequestedEvent;
@@ -732,6 +739,8 @@ interface SignalEvents {
732
739
  spotlight_removed: SpotlightRemovedEvent;
733
740
  streaming_stopped: void;
734
741
  video_enabled: VideoEnabledEvent;
742
+ live_transcription_started: LiveTranscriptionStartedEvent;
743
+ live_transcription_stopped: LiveTranscriptionStoppedEvent;
735
744
  }
736
745
  interface IdentifyDeviceRequest {
737
746
  deviceCredentials: Credentials;
@@ -1110,6 +1119,8 @@ declare class VegaRtcManager implements RtcManager {
1110
1119
  _iceServers: any;
1111
1120
  _sfuServer: any;
1112
1121
  _mediaserverConfigTtlSeconds: any;
1122
+ _videoTrackBeingMonitored?: CustomMediaStreamTrack;
1123
+ _audioTrackBeingMonitored?: CustomMediaStreamTrack;
1113
1124
  constructor({ selfId, room, emitter, serverSocket, webrtcProvider, features, eventClaim, deviceHandlerFactory, }: {
1114
1125
  selfId: any;
1115
1126
  room: any;
@@ -1165,7 +1176,7 @@ declare class VegaRtcManager implements RtcManager {
1165
1176
  replaceTrack(oldTrack: CustomMediaStreamTrack | null, track: CustomMediaStreamTrack): void;
1166
1177
  removeStream(streamId: string, _stream: MediaStream, requestedByClientId: string): void;
1167
1178
  _onMicAnalyserScoreUpdated(data: any): void;
1168
- addNewStream(streamId: string, stream: MediaStream, audioPaused: boolean, videoPaused: boolean): void;
1179
+ addNewStream(streamId: string, stream: MediaStream, audioPaused: boolean, videoPaused: boolean, beforeEffectTracks?: CustomMediaStreamTrack[]): void;
1169
1180
  _syncMicAnalyser(): void;
1170
1181
  stopOrResumeAudio(stream: MediaStream, enabled: boolean): void;
1171
1182
  _handleStopOrResumeVideo({ enable, track }: {
@@ -1188,10 +1199,8 @@ declare class VegaRtcManager implements RtcManager {
1188
1199
  sendStatsCustomEvent(eventName: string, data?: any): void;
1189
1200
  rtcStatsDisconnect(): void;
1190
1201
  rtcStatsReconnect(): void;
1191
- _startMonitoringAudioTrack(track: MediaStreamTrack): void;
1192
- _stopMonitoringAudioTrack(track: MediaStreamTrack): void;
1193
- _startMonitoringVideoTrack(track: CustomMediaStreamTrack): void;
1194
- _stopMonitoringVideoTrack(track: CustomMediaStreamTrack): void;
1202
+ _monitorAudioTrack(track: any): void;
1203
+ _monitorVideoTrack(track: CustomMediaStreamTrack): void;
1195
1204
  _onMessage(message: any): Promise<void>;
1196
1205
  _onConsumerReady(options: any): Promise<void>;
1197
1206
  _onConsumerClosed({ consumerId, reason }: {
@@ -1318,6 +1327,8 @@ declare const PROTOCOL_RESPONSES: {
1318
1327
  USER_NOTIFIED: string;
1319
1328
  VIDEO_ENABLED: string;
1320
1329
  CLIENT_UNABLE_TO_JOIN: string;
1330
+ LIVE_TRANSCRIPTION_STARTED: string;
1331
+ LIVE_TRANSCRIPTION_STOPPED: string;
1321
1332
  };
1322
1333
  declare const PROTOCOL_ERRORS: {
1323
1334
  CANNOT_INVITE_YOURSELF: string;
@@ -1394,4 +1405,4 @@ declare class RtcStream {
1394
1405
  static getTypeFromId(id: string): string;
1395
1406
  }
1396
1407
 
1397
- export { type AddSpotlightRequest, type AudioEnableRequest, type AudioEnableRequestedEvent, type AudioEnabledEvent, BandwidthTester, type ChatMessage, type ClientKickedEvent, type ClientLeftEvent, type ClientMetadataPayload, type ClientMetadataReceivedEvent, type ClientRole, type CloudRecordingStartedEvent, type Credentials, type CustomMediaStreamTrack, EVENTS, type GetConstraintsOptions, type GetDeviceDataResult, type GetMediaConstraintsOptions, type GetStreamOptions, type GetStreamResult, type GetUpdatedDevicesResult, type IdentifyDeviceRequest, type JoinRoomRequest, KNOCK_MESSAGES, KalmanFilter, type KnockAcceptedEvent, type KnockRejectedEvent, type KnockRoomRequest, type KnockerLeftEvent, Logger, MAXIMUM_TURN_BANDWIDTH, MAXIMUM_TURN_BANDWIDTH_UNLIMITED, MEDIA_JITTER_BUFFER_TARGET, type NewClientEvent, NoDevicesError, P2pRtcManager, PROTOCOL_ERRORS, PROTOCOL_EVENTS, PROTOCOL_REQUESTS, PROTOCOL_RESPONSES, RELAY_MESSAGES, ReconnectManager, type RemoveSpotlightRequest, type RoleName, type RoomJoinedEvent, type RoomKnockedEvent, type RoomLockedEvent, type RoomSessionEndedEvent, type RtcClientConnectionStatusChangedPayload, RtcEventNames, type RtcEvents, type RtcLocalStreamTrackAddedPayload, type RtcLocalStreamTrackRemovedPayload, type RtcManager, type RtcManagerCreatedPayload, RtcManagerDispatcher, RtcStream, type RtcStreamAddedPayload, STREAM_TYPES, type ScreenshareStartedEvent, type ScreenshareStoppedEvent, type SendClientMetadataRequest, ServerSocket, Session, SfuV2Parser, type SignalClient, type SignalEvents, type SignalKnocker, type SignalRequests, type SocketConf, type SocketManager, type Spotlight, type SpotlightAddedEvent, type SpotlightRemovedEvent, type StatsMonitorOptions, type StatsMonitorState, TYPES, VegaConnection, VegaMediaQualityMonitor, VegaRtcManager, type VideoEnabledEvent, addAbsCaptureTimeExtMap, addExtMap, assert, buildDeviceList, calculateStd, captureAudioSsrcMetrics, captureCandidatePairInfoMetrics, captureCommonSsrcMetrics, captureSsrcInfo, captureVideoSsrcMetrics, changeMediaDirection, compareLocalDevices, createACFCalculator, createMicAnalyser, createWorker, deprioritizeH264, detectMicrophoneNotWorking, enumerate, filterMidExtension, filterMsidSemantic, fromLocation, generateByteString, getConstraints, getCurrentPeerConnections, getDeviceData, getDisplayMedia, getHandler, getIssuesAndMetrics, getMediaConstraints, getMediaSettings, getOptimalBitrate, getPeerConnectionIndex, getStats, getStream, getStream2, getUpdatedDevices, getUpdatedStats, getUserMedia, hasGetDisplayMedia, ipRegex, isMobile, isRelayed, maybeRejectNoH264, maybeTurnOnly, modifyMediaCapabilities, removePeerConnection, replaceSSRCs, replaceTracksInStream, _default as rtcManagerEvents, rtcStats, setClientProvider, setCodecPreferenceSDP, setPeerConnectionsForTests, setVideoBandwidthUsingSetParameters, standardDeviation, startPerformanceMonitor, stopStreamTracks, subscribeIssues, subscribeStats, variance };
1408
+ export { type AddSpotlightRequest, type AudioEnableRequest, type AudioEnableRequestedEvent, type AudioEnabledEvent, BandwidthTester, type ChatMessage, type ClientKickedEvent, type ClientLeftEvent, type ClientMetadataPayload, type ClientMetadataReceivedEvent, type ClientRole, type CloudRecordingStartedEvent, type Credentials, type CustomMediaStreamTrack, EVENTS, type GetConstraintsOptions, type GetDeviceDataResult, type GetMediaConstraintsOptions, type GetStreamOptions, type GetStreamResult, type GetUpdatedDevicesResult, type IdentifyDeviceRequest, type JoinRoomRequest, KNOCK_MESSAGES, KalmanFilter, type KnockAcceptedEvent, type KnockRejectedEvent, type KnockRoomRequest, type KnockerLeftEvent, type LiveTranscriptionStartedEvent, type LiveTranscriptionStoppedEvent, Logger, MAXIMUM_TURN_BANDWIDTH, MAXIMUM_TURN_BANDWIDTH_UNLIMITED, MEDIA_JITTER_BUFFER_TARGET, type NewClientEvent, NoDevicesError, P2pRtcManager, PROTOCOL_ERRORS, PROTOCOL_EVENTS, PROTOCOL_REQUESTS, PROTOCOL_RESPONSES, RELAY_MESSAGES, ReconnectManager, type RemoveSpotlightRequest, type RoleName, type RoomJoinedEvent, type RoomKnockedEvent, type RoomLockedEvent, type RoomSessionEndedEvent, type RtcClientConnectionStatusChangedPayload, RtcEventNames, type RtcEvents, type RtcLocalStreamTrackAddedPayload, type RtcLocalStreamTrackRemovedPayload, type RtcManager, type RtcManagerCreatedPayload, RtcManagerDispatcher, RtcStream, type RtcStreamAddedPayload, STREAM_TYPES, type ScreenshareStartedEvent, type ScreenshareStoppedEvent, type SendClientMetadataRequest, ServerSocket, Session, SfuV2Parser, type SignalClient, type SignalEvents, type SignalKnocker, type SignalRequests, type SocketConf, type SocketManager, type Spotlight, type SpotlightAddedEvent, type SpotlightRemovedEvent, type StatsMonitorOptions, type StatsMonitorState, TYPES, VegaConnection, VegaMediaQualityMonitor, VegaRtcManager, type VideoEnabledEvent, addAbsCaptureTimeExtMap, addExtMap, assert, buildDeviceList, calculateStd, captureAudioSsrcMetrics, captureCandidatePairInfoMetrics, captureCommonSsrcMetrics, captureSsrcInfo, captureVideoSsrcMetrics, changeMediaDirection, compareLocalDevices, createACFCalculator, createMicAnalyser, createWorker, deprioritizeH264, detectMicrophoneNotWorking, enumerate, filterMidExtension, filterMsidSemantic, fromLocation, generateByteString, getConstraints, getCurrentPeerConnections, getDeviceData, getDisplayMedia, getHandler, getIssuesAndMetrics, getMediaConstraints, getMediaSettings, getOptimalBitrate, getPeerConnectionIndex, getStats, getStream, getStream2, getUpdatedDevices, getUpdatedStats, getUserMedia, hasGetDisplayMedia, ipRegex, isMobile, isRelayed, maybeRejectNoH264, maybeTurnOnly, modifyMediaCapabilities, removePeerConnection, replaceSSRCs, replaceTracksInStream, _default as rtcManagerEvents, rtcStats, setClientProvider, setCodecPreferenceSDP, setPeerConnectionsForTests, setVideoBandwidthUsingSetParameters, standardDeviation, startPerformanceMonitor, stopStreamTracks, subscribeIssues, subscribeStats, variance };
package/dist/index.d.ts CHANGED
@@ -264,7 +264,7 @@ type GetDeviceDataResult = {
264
264
  };
265
265
  };
266
266
  interface CustomMediaStreamTrack extends MediaStreamTrack {
267
- replacement?: boolean;
267
+ effectTrack?: boolean;
268
268
  }
269
269
 
270
270
  declare function getMediaConstraints({ disableAEC, disableAGC, hd, lax, lowDataMode, preferredDeviceIds, resolution, simulcast, widescreen, }: GetMediaConstraintsOptions): any;
@@ -343,6 +343,8 @@ declare class P2pRtcManager implements RtcManager {
343
343
  _lastReverseDirectionAttemptByClientId: any;
344
344
  _stoppedVideoTrack: any;
345
345
  icePublicIPGatheringTimeoutID: any;
346
+ _videoTrackBeingMonitored?: CustomMediaStreamTrack;
347
+ _audioTrackBeingMonitored?: CustomMediaStreamTrack;
346
348
  constructor({ selfId, room, emitter, serverSocket, webrtcProvider, features, }: {
347
349
  selfId: any;
348
350
  room: any;
@@ -359,8 +361,8 @@ declare class P2pRtcManager implements RtcManager {
359
361
  }): boolean;
360
362
  supportsScreenShareAudio(): boolean;
361
363
  maybeRestrictRelayBandwidth(session: any): void;
362
- addNewStream(streamId: string, stream: MediaStream): void;
363
- replaceTrack(oldTrack: CustomMediaStreamTrack, newTrack: CustomMediaStreamTrack): Promise<any[]>;
364
+ addNewStream(streamId: string, stream: MediaStream, audioPaused: boolean, videoPaused: boolean, beforeEffectTracks?: CustomMediaStreamTrack[]): void;
365
+ replaceTrack(oldTrack: CustomMediaStreamTrack | null, newTrack: CustomMediaStreamTrack): Promise<any[]>;
364
366
  accept({ clientId, shouldAddLocalVideo }: {
365
367
  clientId: string;
366
368
  shouldAddLocalVideo?: boolean;
@@ -414,10 +416,8 @@ declare class P2pRtcManager implements RtcManager {
414
416
  _removeLocalStream(streamId: string): void;
415
417
  _updateAndScheduleMediaServersRefresh({ iceServers, sfuServer, mediaserverConfigTtlSeconds }: any): void;
416
418
  _clearMediaServersRefresh(): void;
417
- _startMonitoringAudioTrack(track: any): void;
418
- _stopMonitoringAudioTrack(track: any): void;
419
- _startMonitoringVideoTrack(track: CustomMediaStreamTrack): void;
420
- _stopMonitoringVideoTrack(track: CustomMediaStreamTrack): void;
419
+ _monitorAudioTrack(track: any): void;
420
+ _monitorVideoTrack(track: CustomMediaStreamTrack): void;
421
421
  _connect(clientId: string): Promise<any>;
422
422
  _maybeRestartIce(clientId: string, session: any): void;
423
423
  _setCodecPreferences(pc: any, vp9On: any, av1On: any, redOn: any): void;
@@ -705,6 +705,13 @@ interface SpotlightRemovedEvent {
705
705
  streamId: string;
706
706
  requestedByClientId: string;
707
707
  }
708
+ interface LiveTranscriptionStartedEvent {
709
+ startedAt: string;
710
+ transcriptionId: string;
711
+ }
712
+ interface LiveTranscriptionStoppedEvent {
713
+ transcriptionId: string;
714
+ }
708
715
  interface SignalEvents {
709
716
  audio_enabled: AudioEnabledEvent;
710
717
  audio_enable_requested: AudioEnableRequestedEvent;
@@ -732,6 +739,8 @@ interface SignalEvents {
732
739
  spotlight_removed: SpotlightRemovedEvent;
733
740
  streaming_stopped: void;
734
741
  video_enabled: VideoEnabledEvent;
742
+ live_transcription_started: LiveTranscriptionStartedEvent;
743
+ live_transcription_stopped: LiveTranscriptionStoppedEvent;
735
744
  }
736
745
  interface IdentifyDeviceRequest {
737
746
  deviceCredentials: Credentials;
@@ -1110,6 +1119,8 @@ declare class VegaRtcManager implements RtcManager {
1110
1119
  _iceServers: any;
1111
1120
  _sfuServer: any;
1112
1121
  _mediaserverConfigTtlSeconds: any;
1122
+ _videoTrackBeingMonitored?: CustomMediaStreamTrack;
1123
+ _audioTrackBeingMonitored?: CustomMediaStreamTrack;
1113
1124
  constructor({ selfId, room, emitter, serverSocket, webrtcProvider, features, eventClaim, deviceHandlerFactory, }: {
1114
1125
  selfId: any;
1115
1126
  room: any;
@@ -1165,7 +1176,7 @@ declare class VegaRtcManager implements RtcManager {
1165
1176
  replaceTrack(oldTrack: CustomMediaStreamTrack | null, track: CustomMediaStreamTrack): void;
1166
1177
  removeStream(streamId: string, _stream: MediaStream, requestedByClientId: string): void;
1167
1178
  _onMicAnalyserScoreUpdated(data: any): void;
1168
- addNewStream(streamId: string, stream: MediaStream, audioPaused: boolean, videoPaused: boolean): void;
1179
+ addNewStream(streamId: string, stream: MediaStream, audioPaused: boolean, videoPaused: boolean, beforeEffectTracks?: CustomMediaStreamTrack[]): void;
1169
1180
  _syncMicAnalyser(): void;
1170
1181
  stopOrResumeAudio(stream: MediaStream, enabled: boolean): void;
1171
1182
  _handleStopOrResumeVideo({ enable, track }: {
@@ -1188,10 +1199,8 @@ declare class VegaRtcManager implements RtcManager {
1188
1199
  sendStatsCustomEvent(eventName: string, data?: any): void;
1189
1200
  rtcStatsDisconnect(): void;
1190
1201
  rtcStatsReconnect(): void;
1191
- _startMonitoringAudioTrack(track: MediaStreamTrack): void;
1192
- _stopMonitoringAudioTrack(track: MediaStreamTrack): void;
1193
- _startMonitoringVideoTrack(track: CustomMediaStreamTrack): void;
1194
- _stopMonitoringVideoTrack(track: CustomMediaStreamTrack): void;
1202
+ _monitorAudioTrack(track: any): void;
1203
+ _monitorVideoTrack(track: CustomMediaStreamTrack): void;
1195
1204
  _onMessage(message: any): Promise<void>;
1196
1205
  _onConsumerReady(options: any): Promise<void>;
1197
1206
  _onConsumerClosed({ consumerId, reason }: {
@@ -1318,6 +1327,8 @@ declare const PROTOCOL_RESPONSES: {
1318
1327
  USER_NOTIFIED: string;
1319
1328
  VIDEO_ENABLED: string;
1320
1329
  CLIENT_UNABLE_TO_JOIN: string;
1330
+ LIVE_TRANSCRIPTION_STARTED: string;
1331
+ LIVE_TRANSCRIPTION_STOPPED: string;
1321
1332
  };
1322
1333
  declare const PROTOCOL_ERRORS: {
1323
1334
  CANNOT_INVITE_YOURSELF: string;
@@ -1394,4 +1405,4 @@ declare class RtcStream {
1394
1405
  static getTypeFromId(id: string): string;
1395
1406
  }
1396
1407
 
1397
- export { type AddSpotlightRequest, type AudioEnableRequest, type AudioEnableRequestedEvent, type AudioEnabledEvent, BandwidthTester, type ChatMessage, type ClientKickedEvent, type ClientLeftEvent, type ClientMetadataPayload, type ClientMetadataReceivedEvent, type ClientRole, type CloudRecordingStartedEvent, type Credentials, type CustomMediaStreamTrack, EVENTS, type GetConstraintsOptions, type GetDeviceDataResult, type GetMediaConstraintsOptions, type GetStreamOptions, type GetStreamResult, type GetUpdatedDevicesResult, type IdentifyDeviceRequest, type JoinRoomRequest, KNOCK_MESSAGES, KalmanFilter, type KnockAcceptedEvent, type KnockRejectedEvent, type KnockRoomRequest, type KnockerLeftEvent, Logger, MAXIMUM_TURN_BANDWIDTH, MAXIMUM_TURN_BANDWIDTH_UNLIMITED, MEDIA_JITTER_BUFFER_TARGET, type NewClientEvent, NoDevicesError, P2pRtcManager, PROTOCOL_ERRORS, PROTOCOL_EVENTS, PROTOCOL_REQUESTS, PROTOCOL_RESPONSES, RELAY_MESSAGES, ReconnectManager, type RemoveSpotlightRequest, type RoleName, type RoomJoinedEvent, type RoomKnockedEvent, type RoomLockedEvent, type RoomSessionEndedEvent, type RtcClientConnectionStatusChangedPayload, RtcEventNames, type RtcEvents, type RtcLocalStreamTrackAddedPayload, type RtcLocalStreamTrackRemovedPayload, type RtcManager, type RtcManagerCreatedPayload, RtcManagerDispatcher, RtcStream, type RtcStreamAddedPayload, STREAM_TYPES, type ScreenshareStartedEvent, type ScreenshareStoppedEvent, type SendClientMetadataRequest, ServerSocket, Session, SfuV2Parser, type SignalClient, type SignalEvents, type SignalKnocker, type SignalRequests, type SocketConf, type SocketManager, type Spotlight, type SpotlightAddedEvent, type SpotlightRemovedEvent, type StatsMonitorOptions, type StatsMonitorState, TYPES, VegaConnection, VegaMediaQualityMonitor, VegaRtcManager, type VideoEnabledEvent, addAbsCaptureTimeExtMap, addExtMap, assert, buildDeviceList, calculateStd, captureAudioSsrcMetrics, captureCandidatePairInfoMetrics, captureCommonSsrcMetrics, captureSsrcInfo, captureVideoSsrcMetrics, changeMediaDirection, compareLocalDevices, createACFCalculator, createMicAnalyser, createWorker, deprioritizeH264, detectMicrophoneNotWorking, enumerate, filterMidExtension, filterMsidSemantic, fromLocation, generateByteString, getConstraints, getCurrentPeerConnections, getDeviceData, getDisplayMedia, getHandler, getIssuesAndMetrics, getMediaConstraints, getMediaSettings, getOptimalBitrate, getPeerConnectionIndex, getStats, getStream, getStream2, getUpdatedDevices, getUpdatedStats, getUserMedia, hasGetDisplayMedia, ipRegex, isMobile, isRelayed, maybeRejectNoH264, maybeTurnOnly, modifyMediaCapabilities, removePeerConnection, replaceSSRCs, replaceTracksInStream, _default as rtcManagerEvents, rtcStats, setClientProvider, setCodecPreferenceSDP, setPeerConnectionsForTests, setVideoBandwidthUsingSetParameters, standardDeviation, startPerformanceMonitor, stopStreamTracks, subscribeIssues, subscribeStats, variance };
1408
+ export { type AddSpotlightRequest, type AudioEnableRequest, type AudioEnableRequestedEvent, type AudioEnabledEvent, BandwidthTester, type ChatMessage, type ClientKickedEvent, type ClientLeftEvent, type ClientMetadataPayload, type ClientMetadataReceivedEvent, type ClientRole, type CloudRecordingStartedEvent, type Credentials, type CustomMediaStreamTrack, EVENTS, type GetConstraintsOptions, type GetDeviceDataResult, type GetMediaConstraintsOptions, type GetStreamOptions, type GetStreamResult, type GetUpdatedDevicesResult, type IdentifyDeviceRequest, type JoinRoomRequest, KNOCK_MESSAGES, KalmanFilter, type KnockAcceptedEvent, type KnockRejectedEvent, type KnockRoomRequest, type KnockerLeftEvent, type LiveTranscriptionStartedEvent, type LiveTranscriptionStoppedEvent, Logger, MAXIMUM_TURN_BANDWIDTH, MAXIMUM_TURN_BANDWIDTH_UNLIMITED, MEDIA_JITTER_BUFFER_TARGET, type NewClientEvent, NoDevicesError, P2pRtcManager, PROTOCOL_ERRORS, PROTOCOL_EVENTS, PROTOCOL_REQUESTS, PROTOCOL_RESPONSES, RELAY_MESSAGES, ReconnectManager, type RemoveSpotlightRequest, type RoleName, type RoomJoinedEvent, type RoomKnockedEvent, type RoomLockedEvent, type RoomSessionEndedEvent, type RtcClientConnectionStatusChangedPayload, RtcEventNames, type RtcEvents, type RtcLocalStreamTrackAddedPayload, type RtcLocalStreamTrackRemovedPayload, type RtcManager, type RtcManagerCreatedPayload, RtcManagerDispatcher, RtcStream, type RtcStreamAddedPayload, STREAM_TYPES, type ScreenshareStartedEvent, type ScreenshareStoppedEvent, type SendClientMetadataRequest, ServerSocket, Session, SfuV2Parser, type SignalClient, type SignalEvents, type SignalKnocker, type SignalRequests, type SocketConf, type SocketManager, type Spotlight, type SpotlightAddedEvent, type SpotlightRemovedEvent, type StatsMonitorOptions, type StatsMonitorState, TYPES, VegaConnection, VegaMediaQualityMonitor, VegaRtcManager, type VideoEnabledEvent, addAbsCaptureTimeExtMap, addExtMap, assert, buildDeviceList, calculateStd, captureAudioSsrcMetrics, captureCandidatePairInfoMetrics, captureCommonSsrcMetrics, captureSsrcInfo, captureVideoSsrcMetrics, changeMediaDirection, compareLocalDevices, createACFCalculator, createMicAnalyser, createWorker, deprioritizeH264, detectMicrophoneNotWorking, enumerate, filterMidExtension, filterMsidSemantic, fromLocation, generateByteString, getConstraints, getCurrentPeerConnections, getDeviceData, getDisplayMedia, getHandler, getIssuesAndMetrics, getMediaConstraints, getMediaSettings, getOptimalBitrate, getPeerConnectionIndex, getStats, getStream, getStream2, getUpdatedDevices, getUpdatedStats, getUserMedia, hasGetDisplayMedia, ipRegex, isMobile, isRelayed, maybeRejectNoH264, maybeTurnOnly, modifyMediaCapabilities, removePeerConnection, replaceSSRCs, replaceTracksInStream, _default as rtcManagerEvents, rtcStats, setClientProvider, setCodecPreferenceSDP, setPeerConnectionsForTests, setVideoBandwidthUsingSetParameters, standardDeviation, startPerformanceMonitor, stopStreamTracks, subscribeIssues, subscribeStats, variance };
package/dist/index.mjs CHANGED
@@ -3269,6 +3269,8 @@ const PROTOCOL_RESPONSES = {
3269
3269
  USER_NOTIFIED: "user_notified",
3270
3270
  VIDEO_ENABLED: "video_enabled",
3271
3271
  CLIENT_UNABLE_TO_JOIN: "client_unable_to_join",
3272
+ LIVE_TRANSCRIPTION_STARTED: "live_transcription_started",
3273
+ LIVE_TRANSCRIPTION_STOPPED: "live_transcription_stopped",
3272
3274
  };
3273
3275
  const PROTOCOL_ERRORS = {
3274
3276
  CANNOT_INVITE_YOURSELF: "cannot_invite_yourself",
@@ -3527,20 +3529,32 @@ class P2pRtcManager {
3527
3529
  maybeRestrictRelayBandwidth(session) {
3528
3530
  session.maybeRestrictRelayBandwidth();
3529
3531
  }
3530
- addNewStream(streamId, stream) {
3532
+ addNewStream(streamId, stream, audioPaused, videoPaused, beforeEffectTracks = []) {
3531
3533
  if (stream === this.localStreams[streamId]) {
3532
3534
  return;
3533
3535
  }
3534
3536
  this._addLocalStream(streamId, stream);
3535
3537
  if (streamId === CAMERA_STREAM_ID) {
3536
3538
  this._addStreamToPeerConnections(stream);
3537
- const [audioTrack] = stream.getAudioTracks();
3539
+ const audioTrack = stream.getAudioTracks()[0];
3538
3540
  const videoTrack = stream.getVideoTracks()[0];
3539
3541
  if (audioTrack) {
3540
- this._startMonitoringAudioTrack(audioTrack);
3542
+ if (!audioTrack.effectTrack) {
3543
+ this._monitorAudioTrack(audioTrack);
3544
+ }
3545
+ const beforeEffectTrack = beforeEffectTracks.find((t) => t.kind === "audio");
3546
+ if (beforeEffectTrack) {
3547
+ this._monitorAudioTrack(beforeEffectTrack);
3548
+ }
3541
3549
  }
3542
- if (videoTrack && !videoTrack.replacement) {
3543
- this._startMonitoringVideoTrack(videoTrack);
3550
+ if (videoTrack) {
3551
+ if (!videoTrack.effectTrack) {
3552
+ this._monitorVideoTrack(videoTrack);
3553
+ }
3554
+ const beforeEffectTrack = beforeEffectTracks.find((t) => t.kind === "video");
3555
+ if (beforeEffectTrack) {
3556
+ this._monitorVideoTrack(beforeEffectTrack);
3557
+ }
3544
3558
  }
3545
3559
  if (this._localStreamDeregisterFunction) {
3546
3560
  this._localStreamDeregisterFunction();
@@ -3561,17 +3575,11 @@ class P2pRtcManager {
3561
3575
  return;
3562
3576
  }
3563
3577
  replaceTrack(oldTrack, newTrack) {
3564
- if (oldTrack && oldTrack.kind === "audio") {
3565
- this._stopMonitoringAudioTrack(oldTrack);
3566
- }
3567
- if (oldTrack && oldTrack.kind === "video" && !newTrack.replacement) {
3568
- this._stopMonitoringVideoTrack(oldTrack);
3578
+ if (newTrack.kind === "audio" && !newTrack.effectTrack) {
3579
+ this._monitorAudioTrack(newTrack);
3569
3580
  }
3570
- if (newTrack && newTrack.kind === "audio") {
3571
- this._startMonitoringAudioTrack(newTrack);
3572
- }
3573
- if (newTrack.kind === "video" && !newTrack.replacement) {
3574
- this._startMonitoringVideoTrack(newTrack);
3581
+ if (newTrack.kind === "video" && !newTrack.effectTrack) {
3582
+ this._monitorVideoTrack(newTrack);
3575
3583
  }
3576
3584
  return this._replaceTrackToPeerConnections(oldTrack, newTrack);
3577
3585
  }
@@ -4085,17 +4093,21 @@ class P2pRtcManager {
4085
4093
  clearTimeout(this._fetchMediaServersTimer);
4086
4094
  this._fetchMediaServersTimer = null;
4087
4095
  }
4088
- _startMonitoringAudioTrack(track) {
4096
+ _monitorAudioTrack(track) {
4097
+ var _a, _b;
4098
+ if (((_a = this._audioTrackBeingMonitored) === null || _a === void 0 ? void 0 : _a.id) === track.id)
4099
+ return;
4100
+ (_b = this._audioTrackBeingMonitored) === null || _b === void 0 ? void 0 : _b.removeEventListener("ended", this._audioTrackOnEnded);
4089
4101
  track.addEventListener("ended", this._audioTrackOnEnded);
4102
+ this._audioTrackBeingMonitored = track;
4090
4103
  }
4091
- _stopMonitoringAudioTrack(track) {
4092
- track.removeEventListener("ended", this._audioTrackOnEnded);
4093
- }
4094
- _startMonitoringVideoTrack(track) {
4104
+ _monitorVideoTrack(track) {
4105
+ var _a, _b;
4106
+ if (((_a = this._videoTrackBeingMonitored) === null || _a === void 0 ? void 0 : _a.id) === track.id)
4107
+ return;
4108
+ (_b = this._videoTrackBeingMonitored) === null || _b === void 0 ? void 0 : _b.removeEventListener("ended", this._videoTrackOnEnded);
4095
4109
  track.addEventListener("ended", this._videoTrackOnEnded);
4096
- }
4097
- _stopMonitoringVideoTrack(track) {
4098
- track.removeEventListener("ended", this._videoTrackOnEnded);
4110
+ this._videoTrackBeingMonitored = track;
4099
4111
  }
4100
4112
  _connect(clientId) {
4101
4113
  this.rtcStatsReconnect();
@@ -4455,7 +4467,9 @@ class P2pRtcManager {
4455
4467
  return;
4456
4468
  }
4457
4469
  if (enable === false) {
4458
- const stopCameraDelay = ((_a = localStream.getVideoTracks().find((t) => !t.enabled)) === null || _a === void 0 ? void 0 : _a.readyState) === "ended" ? 0 : 5000;
4470
+ const stopCameraDelay = ((_a = localStream.getVideoTracks().find((t) => !t.enabled)) === null || _a === void 0 ? void 0 : _a.readyState) === "ended"
4471
+ ? 0
4472
+ : 5000;
4459
4473
  setTimeout(() => {
4460
4474
  localStream.getVideoTracks().forEach((track) => {
4461
4475
  if (track.enabled === false) {
@@ -4479,7 +4493,7 @@ class P2pRtcManager {
4479
4493
  navigator.mediaDevices.getUserMedia({ video: constraints }).then((stream) => {
4480
4494
  const track = stream.getVideoTracks()[0];
4481
4495
  localStream.addTrack(track);
4482
- this._startMonitoringVideoTrack(track);
4496
+ this._monitorVideoTrack(track);
4483
4497
  this._emit(EVENTS.LOCAL_STREAM_TRACK_ADDED, {
4484
4498
  streamId: localStream.id,
4485
4499
  tracks: [track],
@@ -5706,20 +5720,16 @@ class VegaRtcManager {
5706
5720
  }
5707
5721
  }
5708
5722
  replaceTrack(oldTrack, track) {
5709
- if (oldTrack && oldTrack.kind === "audio") {
5710
- this._stopMonitoringAudioTrack(oldTrack);
5711
- }
5712
- if (oldTrack && oldTrack.kind === "video" && !track.replacement) {
5713
- this._stopMonitoringVideoTrack(oldTrack);
5714
- }
5715
5723
  if (track.kind === "audio") {
5716
- this._startMonitoringAudioTrack(track);
5724
+ if (!track.effectTrack) {
5725
+ this._monitorAudioTrack(track);
5726
+ }
5717
5727
  this._micTrack = track;
5718
5728
  this._replaceMicTrack();
5719
5729
  }
5720
5730
  if (track.kind === "video") {
5721
- if (!track.replacement) {
5722
- this._startMonitoringVideoTrack(track);
5731
+ if (!track.effectTrack) {
5732
+ this._monitorVideoTrack(track);
5723
5733
  }
5724
5734
  this._webcamTrack = track;
5725
5735
  this._replaceWebcamTrack();
@@ -5743,7 +5753,7 @@ class VegaRtcManager {
5743
5753
  (_b = (_a = this._micAnalyserDebugger) === null || _a === void 0 ? void 0 : _a.onScoreUpdated) === null || _b === void 0 ? void 0 : _b.call(_a, data);
5744
5754
  this._sendMicScore(this._micPaused ? 0 : data.out);
5745
5755
  }
5746
- addNewStream(streamId, stream, audioPaused, videoPaused) {
5756
+ addNewStream(streamId, stream, audioPaused, videoPaused, beforeEffectTracks = []) {
5747
5757
  if (streamId === "0") {
5748
5758
  this._micPaused = audioPaused;
5749
5759
  this._webcamPaused = videoPaused;
@@ -5751,14 +5761,24 @@ class VegaRtcManager {
5751
5761
  const audioTrack = stream.getAudioTracks()[0];
5752
5762
  if (videoTrack) {
5753
5763
  this._sendWebcam(videoTrack);
5754
- if (!videoTrack.replacement) {
5755
- this._startMonitoringVideoTrack(videoTrack);
5764
+ if (!videoTrack.effectTrack) {
5765
+ this._monitorVideoTrack(videoTrack);
5766
+ }
5767
+ const beforeEffectTrack = beforeEffectTracks.find(t => t.kind === "video");
5768
+ if (beforeEffectTrack) {
5769
+ this._monitorVideoTrack(beforeEffectTrack);
5756
5770
  }
5757
5771
  }
5758
5772
  if (audioTrack) {
5759
5773
  this._sendMic(audioTrack);
5760
5774
  this._syncMicAnalyser();
5761
- this._startMonitoringAudioTrack(audioTrack);
5775
+ if (!audioTrack.effectTrack) {
5776
+ this._monitorAudioTrack(audioTrack);
5777
+ }
5778
+ const beforeEffectTrack = beforeEffectTracks.find(t => t.kind === "audio");
5779
+ if (beforeEffectTrack) {
5780
+ this._monitorAudioTrack(beforeEffectTrack);
5781
+ }
5762
5782
  }
5763
5783
  if (this._localStreamDeregisterFunction) {
5764
5784
  this._localStreamDeregisterFunction();
@@ -5846,7 +5866,7 @@ class VegaRtcManager {
5846
5866
  navigator.mediaDevices.getUserMedia({ video: constraints }).then((stream) => {
5847
5867
  const track = stream.getVideoTracks()[0];
5848
5868
  localStream.addTrack(track);
5849
- this._startMonitoringVideoTrack(track);
5869
+ this._monitorVideoTrack(track);
5850
5870
  this._emitToPWA(EVENTS.LOCAL_STREAM_TRACK_ADDED, {
5851
5871
  streamId: localStream.id,
5852
5872
  tracks: [track],
@@ -5943,17 +5963,21 @@ class VegaRtcManager {
5943
5963
  rtcStats.server.connect();
5944
5964
  }
5945
5965
  }
5946
- _startMonitoringAudioTrack(track) {
5966
+ _monitorAudioTrack(track) {
5967
+ var _a, _b;
5968
+ if (((_a = this._audioTrackBeingMonitored) === null || _a === void 0 ? void 0 : _a.id) === track.id)
5969
+ return;
5970
+ (_b = this._audioTrackBeingMonitored) === null || _b === void 0 ? void 0 : _b.removeEventListener("ended", this._audioTrackOnEnded);
5947
5971
  track.addEventListener("ended", this._audioTrackOnEnded);
5972
+ this._audioTrackBeingMonitored = track;
5948
5973
  }
5949
- _stopMonitoringAudioTrack(track) {
5950
- track.removeEventListener("ended", this._audioTrackOnEnded);
5951
- }
5952
- _startMonitoringVideoTrack(track) {
5974
+ _monitorVideoTrack(track) {
5975
+ var _a, _b;
5976
+ if (((_a = this._videoTrackBeingMonitored) === null || _a === void 0 ? void 0 : _a.id) === track.id)
5977
+ return;
5978
+ (_b = this._videoTrackBeingMonitored) === null || _b === void 0 ? void 0 : _b.removeEventListener("ended", this._videoTrackOnEnded);
5953
5979
  track.addEventListener("ended", this._videoTrackOnEnded);
5954
- }
5955
- _stopMonitoringVideoTrack(track) {
5956
- track.removeEventListener("ended", this._videoTrackOnEnded);
5980
+ this._videoTrackBeingMonitored = track;
5957
5981
  }
5958
5982
  _onMessage(message) {
5959
5983
  return __awaiter(this, void 0, void 0, function* () {
@@ -3269,6 +3269,8 @@ const PROTOCOL_RESPONSES = {
3269
3269
  USER_NOTIFIED: "user_notified",
3270
3270
  VIDEO_ENABLED: "video_enabled",
3271
3271
  CLIENT_UNABLE_TO_JOIN: "client_unable_to_join",
3272
+ LIVE_TRANSCRIPTION_STARTED: "live_transcription_started",
3273
+ LIVE_TRANSCRIPTION_STOPPED: "live_transcription_stopped",
3272
3274
  };
3273
3275
  const PROTOCOL_ERRORS = {
3274
3276
  CANNOT_INVITE_YOURSELF: "cannot_invite_yourself",
@@ -3527,20 +3529,32 @@ class P2pRtcManager {
3527
3529
  maybeRestrictRelayBandwidth(session) {
3528
3530
  session.maybeRestrictRelayBandwidth();
3529
3531
  }
3530
- addNewStream(streamId, stream) {
3532
+ addNewStream(streamId, stream, audioPaused, videoPaused, beforeEffectTracks = []) {
3531
3533
  if (stream === this.localStreams[streamId]) {
3532
3534
  return;
3533
3535
  }
3534
3536
  this._addLocalStream(streamId, stream);
3535
3537
  if (streamId === CAMERA_STREAM_ID) {
3536
3538
  this._addStreamToPeerConnections(stream);
3537
- const [audioTrack] = stream.getAudioTracks();
3539
+ const audioTrack = stream.getAudioTracks()[0];
3538
3540
  const videoTrack = stream.getVideoTracks()[0];
3539
3541
  if (audioTrack) {
3540
- this._startMonitoringAudioTrack(audioTrack);
3542
+ if (!audioTrack.effectTrack) {
3543
+ this._monitorAudioTrack(audioTrack);
3544
+ }
3545
+ const beforeEffectTrack = beforeEffectTracks.find((t) => t.kind === "audio");
3546
+ if (beforeEffectTrack) {
3547
+ this._monitorAudioTrack(beforeEffectTrack);
3548
+ }
3541
3549
  }
3542
- if (videoTrack && !videoTrack.replacement) {
3543
- this._startMonitoringVideoTrack(videoTrack);
3550
+ if (videoTrack) {
3551
+ if (!videoTrack.effectTrack) {
3552
+ this._monitorVideoTrack(videoTrack);
3553
+ }
3554
+ const beforeEffectTrack = beforeEffectTracks.find((t) => t.kind === "video");
3555
+ if (beforeEffectTrack) {
3556
+ this._monitorVideoTrack(beforeEffectTrack);
3557
+ }
3544
3558
  }
3545
3559
  if (this._localStreamDeregisterFunction) {
3546
3560
  this._localStreamDeregisterFunction();
@@ -3561,17 +3575,11 @@ class P2pRtcManager {
3561
3575
  return;
3562
3576
  }
3563
3577
  replaceTrack(oldTrack, newTrack) {
3564
- if (oldTrack && oldTrack.kind === "audio") {
3565
- this._stopMonitoringAudioTrack(oldTrack);
3566
- }
3567
- if (oldTrack && oldTrack.kind === "video" && !newTrack.replacement) {
3568
- this._stopMonitoringVideoTrack(oldTrack);
3578
+ if (newTrack.kind === "audio" && !newTrack.effectTrack) {
3579
+ this._monitorAudioTrack(newTrack);
3569
3580
  }
3570
- if (newTrack && newTrack.kind === "audio") {
3571
- this._startMonitoringAudioTrack(newTrack);
3572
- }
3573
- if (newTrack.kind === "video" && !newTrack.replacement) {
3574
- this._startMonitoringVideoTrack(newTrack);
3581
+ if (newTrack.kind === "video" && !newTrack.effectTrack) {
3582
+ this._monitorVideoTrack(newTrack);
3575
3583
  }
3576
3584
  return this._replaceTrackToPeerConnections(oldTrack, newTrack);
3577
3585
  }
@@ -4085,17 +4093,21 @@ class P2pRtcManager {
4085
4093
  clearTimeout(this._fetchMediaServersTimer);
4086
4094
  this._fetchMediaServersTimer = null;
4087
4095
  }
4088
- _startMonitoringAudioTrack(track) {
4096
+ _monitorAudioTrack(track) {
4097
+ var _a, _b;
4098
+ if (((_a = this._audioTrackBeingMonitored) === null || _a === void 0 ? void 0 : _a.id) === track.id)
4099
+ return;
4100
+ (_b = this._audioTrackBeingMonitored) === null || _b === void 0 ? void 0 : _b.removeEventListener("ended", this._audioTrackOnEnded);
4089
4101
  track.addEventListener("ended", this._audioTrackOnEnded);
4102
+ this._audioTrackBeingMonitored = track;
4090
4103
  }
4091
- _stopMonitoringAudioTrack(track) {
4092
- track.removeEventListener("ended", this._audioTrackOnEnded);
4093
- }
4094
- _startMonitoringVideoTrack(track) {
4104
+ _monitorVideoTrack(track) {
4105
+ var _a, _b;
4106
+ if (((_a = this._videoTrackBeingMonitored) === null || _a === void 0 ? void 0 : _a.id) === track.id)
4107
+ return;
4108
+ (_b = this._videoTrackBeingMonitored) === null || _b === void 0 ? void 0 : _b.removeEventListener("ended", this._videoTrackOnEnded);
4095
4109
  track.addEventListener("ended", this._videoTrackOnEnded);
4096
- }
4097
- _stopMonitoringVideoTrack(track) {
4098
- track.removeEventListener("ended", this._videoTrackOnEnded);
4110
+ this._videoTrackBeingMonitored = track;
4099
4111
  }
4100
4112
  _connect(clientId) {
4101
4113
  this.rtcStatsReconnect();
@@ -4455,7 +4467,9 @@ class P2pRtcManager {
4455
4467
  return;
4456
4468
  }
4457
4469
  if (enable === false) {
4458
- const stopCameraDelay = ((_a = localStream.getVideoTracks().find((t) => !t.enabled)) === null || _a === void 0 ? void 0 : _a.readyState) === "ended" ? 0 : 5000;
4470
+ const stopCameraDelay = ((_a = localStream.getVideoTracks().find((t) => !t.enabled)) === null || _a === void 0 ? void 0 : _a.readyState) === "ended"
4471
+ ? 0
4472
+ : 5000;
4459
4473
  setTimeout(() => {
4460
4474
  localStream.getVideoTracks().forEach((track) => {
4461
4475
  if (track.enabled === false) {
@@ -4479,7 +4493,7 @@ class P2pRtcManager {
4479
4493
  navigator.mediaDevices.getUserMedia({ video: constraints }).then((stream) => {
4480
4494
  const track = stream.getVideoTracks()[0];
4481
4495
  localStream.addTrack(track);
4482
- this._startMonitoringVideoTrack(track);
4496
+ this._monitorVideoTrack(track);
4483
4497
  this._emit(EVENTS.LOCAL_STREAM_TRACK_ADDED, {
4484
4498
  streamId: localStream.id,
4485
4499
  tracks: [track],
@@ -5706,20 +5720,16 @@ class VegaRtcManager {
5706
5720
  }
5707
5721
  }
5708
5722
  replaceTrack(oldTrack, track) {
5709
- if (oldTrack && oldTrack.kind === "audio") {
5710
- this._stopMonitoringAudioTrack(oldTrack);
5711
- }
5712
- if (oldTrack && oldTrack.kind === "video" && !track.replacement) {
5713
- this._stopMonitoringVideoTrack(oldTrack);
5714
- }
5715
5723
  if (track.kind === "audio") {
5716
- this._startMonitoringAudioTrack(track);
5724
+ if (!track.effectTrack) {
5725
+ this._monitorAudioTrack(track);
5726
+ }
5717
5727
  this._micTrack = track;
5718
5728
  this._replaceMicTrack();
5719
5729
  }
5720
5730
  if (track.kind === "video") {
5721
- if (!track.replacement) {
5722
- this._startMonitoringVideoTrack(track);
5731
+ if (!track.effectTrack) {
5732
+ this._monitorVideoTrack(track);
5723
5733
  }
5724
5734
  this._webcamTrack = track;
5725
5735
  this._replaceWebcamTrack();
@@ -5743,7 +5753,7 @@ class VegaRtcManager {
5743
5753
  (_b = (_a = this._micAnalyserDebugger) === null || _a === void 0 ? void 0 : _a.onScoreUpdated) === null || _b === void 0 ? void 0 : _b.call(_a, data);
5744
5754
  this._sendMicScore(this._micPaused ? 0 : data.out);
5745
5755
  }
5746
- addNewStream(streamId, stream, audioPaused, videoPaused) {
5756
+ addNewStream(streamId, stream, audioPaused, videoPaused, beforeEffectTracks = []) {
5747
5757
  if (streamId === "0") {
5748
5758
  this._micPaused = audioPaused;
5749
5759
  this._webcamPaused = videoPaused;
@@ -5751,14 +5761,24 @@ class VegaRtcManager {
5751
5761
  const audioTrack = stream.getAudioTracks()[0];
5752
5762
  if (videoTrack) {
5753
5763
  this._sendWebcam(videoTrack);
5754
- if (!videoTrack.replacement) {
5755
- this._startMonitoringVideoTrack(videoTrack);
5764
+ if (!videoTrack.effectTrack) {
5765
+ this._monitorVideoTrack(videoTrack);
5766
+ }
5767
+ const beforeEffectTrack = beforeEffectTracks.find(t => t.kind === "video");
5768
+ if (beforeEffectTrack) {
5769
+ this._monitorVideoTrack(beforeEffectTrack);
5756
5770
  }
5757
5771
  }
5758
5772
  if (audioTrack) {
5759
5773
  this._sendMic(audioTrack);
5760
5774
  this._syncMicAnalyser();
5761
- this._startMonitoringAudioTrack(audioTrack);
5775
+ if (!audioTrack.effectTrack) {
5776
+ this._monitorAudioTrack(audioTrack);
5777
+ }
5778
+ const beforeEffectTrack = beforeEffectTracks.find(t => t.kind === "audio");
5779
+ if (beforeEffectTrack) {
5780
+ this._monitorAudioTrack(beforeEffectTrack);
5781
+ }
5762
5782
  }
5763
5783
  if (this._localStreamDeregisterFunction) {
5764
5784
  this._localStreamDeregisterFunction();
@@ -5846,7 +5866,7 @@ class VegaRtcManager {
5846
5866
  navigator.mediaDevices.getUserMedia({ video: constraints }).then((stream) => {
5847
5867
  const track = stream.getVideoTracks()[0];
5848
5868
  localStream.addTrack(track);
5849
- this._startMonitoringVideoTrack(track);
5869
+ this._monitorVideoTrack(track);
5850
5870
  this._emitToPWA(EVENTS.LOCAL_STREAM_TRACK_ADDED, {
5851
5871
  streamId: localStream.id,
5852
5872
  tracks: [track],
@@ -5943,17 +5963,21 @@ class VegaRtcManager {
5943
5963
  rtcStats.server.connect();
5944
5964
  }
5945
5965
  }
5946
- _startMonitoringAudioTrack(track) {
5966
+ _monitorAudioTrack(track) {
5967
+ var _a, _b;
5968
+ if (((_a = this._audioTrackBeingMonitored) === null || _a === void 0 ? void 0 : _a.id) === track.id)
5969
+ return;
5970
+ (_b = this._audioTrackBeingMonitored) === null || _b === void 0 ? void 0 : _b.removeEventListener("ended", this._audioTrackOnEnded);
5947
5971
  track.addEventListener("ended", this._audioTrackOnEnded);
5972
+ this._audioTrackBeingMonitored = track;
5948
5973
  }
5949
- _stopMonitoringAudioTrack(track) {
5950
- track.removeEventListener("ended", this._audioTrackOnEnded);
5951
- }
5952
- _startMonitoringVideoTrack(track) {
5974
+ _monitorVideoTrack(track) {
5975
+ var _a, _b;
5976
+ if (((_a = this._videoTrackBeingMonitored) === null || _a === void 0 ? void 0 : _a.id) === track.id)
5977
+ return;
5978
+ (_b = this._videoTrackBeingMonitored) === null || _b === void 0 ? void 0 : _b.removeEventListener("ended", this._videoTrackOnEnded);
5953
5979
  track.addEventListener("ended", this._videoTrackOnEnded);
5954
- }
5955
- _stopMonitoringVideoTrack(track) {
5956
- track.removeEventListener("ended", this._videoTrackOnEnded);
5980
+ this._videoTrackBeingMonitored = track;
5957
5981
  }
5958
5982
  _onMessage(message) {
5959
5983
  return __awaiter(this, void 0, void 0, function* () {
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": "1.6.4",
4
+ "version": "1.7.0",
5
5
  "license": "MIT",
6
6
  "homepage": "https://github.com/whereby/sdk",
7
7
  "repository": {