@whereby.com/media 1.6.0 → 1.6.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 CHANGED
@@ -3072,22 +3072,15 @@ class Session {
3072
3072
  return this.pc && this.pc.connectionState === "connected";
3073
3073
  }
3074
3074
  replaceTrack(oldTrack, newTrack) {
3075
+ if (!newTrack) {
3076
+ rtcStats.sendEvent("replaceTrackP2P", { nullTrack: "newTrack", oldTrackKind: oldTrack === null || oldTrack === void 0 ? void 0 : oldTrack.kind });
3077
+ }
3075
3078
  const pc = this.pc;
3076
3079
  if (!pc)
3077
3080
  return false;
3078
3081
  const senders = pc.getSenders();
3079
- function dbg(msg) {
3080
- const tr = (t) => t && `id:${t.id},kind:${t.kind},state:${t.readyState}`;
3081
- logger$5.warn(`${msg}. newTrack:${tr(newTrack)}, oldTrack:${tr(oldTrack)}, sender tracks: ${JSON.stringify(senders.map((s) => `s ${tr(s.track)}`))}, sender first codecs: ${JSON.stringify(senders.map((s) => (s.getParameters().codecs || [])[0]))}`);
3082
- }
3083
- if (!senders.length) {
3084
- dbg("No senders!");
3085
- }
3086
3082
  if (!oldTrack) {
3087
3083
  oldTrack = (senders.find((s) => s.track && s.track.kind === newTrack.kind) || {}).track;
3088
- if (!oldTrack) {
3089
- dbg("No sender with same kind! Add new track then.");
3090
- }
3091
3084
  }
3092
3085
  if (window.RTCRtpSender && window.RTCRtpSender.prototype.replaceTrack) {
3093
3086
  if (oldTrack) {
@@ -3095,8 +3088,8 @@ class Session {
3095
3088
  for (let i = 0; i < senders.length; i++) {
3096
3089
  const sender = senders[i];
3097
3090
  const track = sender.track;
3098
- if (!sender && !track) {
3099
- dbg("One of the tracks is null!");
3091
+ if (!track) {
3092
+ rtcStats.sendEvent("replaceTrackP2P", { nullTrack: "trackFromSender", oldTrackKind: oldTrack === null || oldTrack === void 0 ? void 0 : oldTrack.kind, newTrackKind: newTrack === null || newTrack === void 0 ? void 0 : newTrack.kind });
3100
3093
  }
3101
3094
  if (track.id === newTrack.id) {
3102
3095
  return Promise.resolve(newTrack);
@@ -3124,7 +3117,6 @@ class Session {
3124
3117
  if (3 < ++retried) {
3125
3118
  clearInterval(timer);
3126
3119
  timer = null;
3127
- dbg("No sender track to replace");
3128
3120
  reject("No sender track to replace");
3129
3121
  }
3130
3122
  return;
@@ -3138,7 +3130,6 @@ class Session {
3138
3130
  }
3139
3131
  const stream = this.streams.find((s) => s.getTracks().find((t) => t.id === newTrack.id)) || this.streams[0];
3140
3132
  if (!stream) {
3141
- dbg("No stream?");
3142
3133
  return Promise.reject(new Error("replaceTrack: No stream?"));
3143
3134
  }
3144
3135
  return pc.addTrack(newTrack, stream);
@@ -3487,6 +3478,7 @@ var rtcManagerEvents = {
3487
3478
  ICE_RESTART: "ice_restart",
3488
3479
  MICROPHONE_NOT_WORKING: "microphone_not_working",
3489
3480
  MICROPHONE_STOPPED_WORKING: "microphone_stopped_working",
3481
+ CAMERA_STOPPED_WORKING: "camera_stopped_working",
3490
3482
  NEW_PC: "new_pc",
3491
3483
  SFU_CONNECTION_OPEN: "sfu_connection_open",
3492
3484
  SFU_CONNECTION_CLOSED: "sfu_connection_closed",
@@ -3533,6 +3525,10 @@ class P2pRtcManager {
3533
3525
  rtcStats.sendEvent("audio_ended", { unloading: unloading$1 });
3534
3526
  this._emit(rtcManagerEvents.MICROPHONE_STOPPED_WORKING, {});
3535
3527
  };
3528
+ this._videoTrackOnEnded = () => {
3529
+ rtcStats.sendEvent("video_ended", { unloading: unloading$1 });
3530
+ this._emit(rtcManagerEvents.CAMERA_STOPPED_WORKING, {});
3531
+ };
3536
3532
  this._updateAndScheduleMediaServersRefresh({
3537
3533
  sfuServer,
3538
3534
  iceServers: iceServers.iceServers || [],
@@ -3560,9 +3556,13 @@ class P2pRtcManager {
3560
3556
  if (streamId === CAMERA_STREAM_ID) {
3561
3557
  this._addStreamToPeerConnections(stream);
3562
3558
  const [audioTrack] = stream.getAudioTracks();
3559
+ const videoTrack = stream.getVideoTracks()[0];
3563
3560
  if (audioTrack) {
3564
3561
  this._startMonitoringAudioTrack(audioTrack);
3565
3562
  }
3563
+ if (videoTrack && !videoTrack.replacement) {
3564
+ this._startMonitoringVideoTrack(videoTrack);
3565
+ }
3566
3566
  if (this._localStreamDeregisterFunction) {
3567
3567
  this._localStreamDeregisterFunction();
3568
3568
  this._localStreamDeregisterFunction = null;
@@ -3585,9 +3585,15 @@ class P2pRtcManager {
3585
3585
  if (oldTrack && oldTrack.kind === "audio") {
3586
3586
  this._stopMonitoringAudioTrack(oldTrack);
3587
3587
  }
3588
+ if (oldTrack && oldTrack.kind === "video" && !newTrack.replacement) {
3589
+ this._stopMonitoringVideoTrack(oldTrack);
3590
+ }
3588
3591
  if (newTrack && newTrack.kind === "audio") {
3589
3592
  this._startMonitoringAudioTrack(newTrack);
3590
3593
  }
3594
+ if (newTrack.kind === "video" && !newTrack.replacement) {
3595
+ this._startMonitoringVideoTrack(newTrack);
3596
+ }
3591
3597
  return this._replaceTrackToPeerConnections(oldTrack, newTrack);
3592
3598
  }
3593
3599
  accept({ clientId, shouldAddLocalVideo }) {
@@ -4106,6 +4112,12 @@ class P2pRtcManager {
4106
4112
  _stopMonitoringAudioTrack(track) {
4107
4113
  track.removeEventListener("ended", this._audioTrackOnEnded);
4108
4114
  }
4115
+ _startMonitoringVideoTrack(track) {
4116
+ track.addEventListener("ended", this._videoTrackOnEnded);
4117
+ }
4118
+ _stopMonitoringVideoTrack(track) {
4119
+ track.removeEventListener("ended", this._videoTrackOnEnded);
4120
+ }
4109
4121
  _connect(clientId) {
4110
4122
  this.rtcStatsReconnect();
4111
4123
  const shouldAddLocalVideo = true;
@@ -4459,10 +4471,12 @@ class P2pRtcManager {
4459
4471
  }
4460
4472
  }
4461
4473
  stopOrResumeVideo(localStream, enable) {
4474
+ var _a;
4462
4475
  if (!["chrome", "safari"].includes(browserName$1)) {
4463
4476
  return;
4464
4477
  }
4465
4478
  if (enable === false) {
4479
+ const stopCameraDelay = ((_a = localStream.getVideoTracks().find((t) => !t.enabled)) === null || _a === void 0 ? void 0 : _a.readyState) === "ended" ? 0 : 5000;
4466
4480
  setTimeout(() => {
4467
4481
  localStream.getVideoTracks().forEach((track) => {
4468
4482
  if (track.enabled === false) {
@@ -4475,7 +4489,7 @@ class P2pRtcManager {
4475
4489
  this._handleStopOrResumeVideo({ enable, track });
4476
4490
  }
4477
4491
  });
4478
- }, 5000);
4492
+ }, stopCameraDelay);
4479
4493
  }
4480
4494
  else {
4481
4495
  if (localStream.getVideoTracks().length === 0) {
@@ -4486,6 +4500,7 @@ class P2pRtcManager {
4486
4500
  navigator.mediaDevices.getUserMedia({ video: constraints }).then((stream) => {
4487
4501
  const track = stream.getVideoTracks()[0];
4488
4502
  localStream.addTrack(track);
4503
+ this._startMonitoringVideoTrack(track);
4489
4504
  this._emit(EVENTS.LOCAL_STREAM_TRACK_ADDED, {
4490
4505
  streamId: localStream.id,
4491
4506
  tracks: [track],
@@ -4732,21 +4747,6 @@ function createMicAnalyser({ micTrack, params, onScoreUpdated, }) {
4732
4747
  };
4733
4748
  }
4734
4749
 
4735
- const maybeTurnOnly = (transportConfig, features) => {
4736
- if (!features.useOnlyTURN) {
4737
- return;
4738
- }
4739
- transportConfig.iceTransportPolicy = "relay";
4740
- const filter = {
4741
- onlyudp: /^turn:.*transport=udp$/,
4742
- onlytcp: /^turn:.*transport=tcp$/,
4743
- onlytls: /^turns:.*transport=tcp$/,
4744
- }[features.useOnlyTURN];
4745
- if (filter) {
4746
- transportConfig.iceServers = transportConfig.iceServers.filter((entry) => entry.url && entry.url.match(filter));
4747
- }
4748
- };
4749
-
4750
4750
  const logger$2 = new Logger();
4751
4751
  const MEDIA_QUALITY = Object.freeze({
4752
4752
  ok: "ok",
@@ -4901,6 +4901,56 @@ class VegaMediaQualityMonitor extends EventEmitter {
4901
4901
  }
4902
4902
  }
4903
4903
 
4904
+ const maybeTurnOnly = (transportConfig, features) => {
4905
+ if (!features.useOnlyTURN) {
4906
+ return;
4907
+ }
4908
+ transportConfig.iceTransportPolicy = "relay";
4909
+ const filter = {
4910
+ onlyudp: /^turn:.*transport=udp$/,
4911
+ onlytcp: /^turn:.*transport=tcp$/,
4912
+ onlytls: /^turns:.*transport=tcp$/,
4913
+ }[features.useOnlyTURN];
4914
+ if (filter) {
4915
+ transportConfig.iceServers = transportConfig.iceServers.filter((entry) => entry.url && entry.url.match(filter));
4916
+ }
4917
+ };
4918
+
4919
+ function getLayers({ width, height, }, { numberOfActiveVideos, numberOfTemporalLayers, uncappedSingleRemoteVideoOn, }) {
4920
+ const maxSide = Math.max(width, height);
4921
+ let spatialLayer = maxSide >= 480 ? (maxSide >= 960 ? 2 : 1) : 0;
4922
+ let temporalLayer = numberOfTemporalLayers - 1;
4923
+ if (maxSide < 100) {
4924
+ temporalLayer = Math.max(numberOfTemporalLayers - 2, 0);
4925
+ }
4926
+ if (numberOfActiveVideos > 8 && spatialLayer === 0) {
4927
+ temporalLayer = Math.max(numberOfTemporalLayers - 2, 0);
4928
+ }
4929
+ if (numberOfActiveVideos < 4 && maxSide > 300 && spatialLayer === 0) {
4930
+ spatialLayer = 1;
4931
+ }
4932
+ if (uncappedSingleRemoteVideoOn && numberOfActiveVideos === 1) {
4933
+ spatialLayer = 2;
4934
+ temporalLayer = numberOfTemporalLayers - 1;
4935
+ }
4936
+ return { spatialLayer, temporalLayer };
4937
+ }
4938
+ function getNumberOfActiveVideos(consumers) {
4939
+ let numberOfActiveVideos = 0;
4940
+ consumers.forEach((c) => {
4941
+ var _a, _b;
4942
+ if (c._closed || c._paused)
4943
+ return;
4944
+ if (((_a = c._appData) === null || _a === void 0 ? void 0 : _a.source) === "webcam" || ((_b = c._appData) === null || _b === void 0 ? void 0 : _b.source) === "screenvideo")
4945
+ numberOfActiveVideos++;
4946
+ });
4947
+ return numberOfActiveVideos;
4948
+ }
4949
+ function getNumberOfTemporalLayers(consumer) {
4950
+ var _a, _b, _c;
4951
+ return /T3/.test(((_c = (_b = (_a = consumer._rtpParameters) === null || _a === void 0 ? void 0 : _a.encodings) === null || _b === void 0 ? void 0 : _b[0]) === null || _c === void 0 ? void 0 : _c.scalabilityMode) || "") ? 3 : 2;
4952
+ }
4953
+
4904
4954
  var _a$1;
4905
4955
  const adapter$1 = (_a$1 = adapterRaw.default) !== null && _a$1 !== void 0 ? _a$1 : adapterRaw;
4906
4956
  const logger$1 = new Logger();
@@ -4964,6 +5014,10 @@ class VegaRtcManager {
4964
5014
  rtcStats.sendEvent("audio_ended", { unloading });
4965
5015
  this._emitToPWA(rtcManagerEvents.MICROPHONE_STOPPED_WORKING, {});
4966
5016
  };
5017
+ this._videoTrackOnEnded = () => {
5018
+ rtcStats.sendEvent("video_ended", { unloading });
5019
+ this._emitToPWA(rtcManagerEvents.CAMERA_STOPPED_WORKING, {});
5020
+ };
4967
5021
  this._updateAndScheduleMediaServersRefresh({
4968
5022
  sfuServer,
4969
5023
  iceServers: iceServers.iceServers || [],
@@ -5674,12 +5728,18 @@ class VegaRtcManager {
5674
5728
  if (oldTrack && oldTrack.kind === "audio") {
5675
5729
  this._stopMonitoringAudioTrack(oldTrack);
5676
5730
  }
5731
+ if (oldTrack && oldTrack.kind === "video" && !track.replacement) {
5732
+ this._stopMonitoringVideoTrack(oldTrack);
5733
+ }
5677
5734
  if (track.kind === "audio") {
5678
5735
  this._startMonitoringAudioTrack(track);
5679
5736
  this._micTrack = track;
5680
5737
  this._replaceMicTrack();
5681
5738
  }
5682
5739
  if (track.kind === "video") {
5740
+ if (!track.replacement) {
5741
+ this._startMonitoringVideoTrack(track);
5742
+ }
5683
5743
  this._webcamTrack = track;
5684
5744
  this._replaceWebcamTrack();
5685
5745
  }
@@ -5708,8 +5768,12 @@ class VegaRtcManager {
5708
5768
  this._webcamPaused = videoPaused;
5709
5769
  const videoTrack = stream.getVideoTracks()[0];
5710
5770
  const audioTrack = stream.getAudioTracks()[0];
5711
- if (videoTrack)
5771
+ if (videoTrack) {
5712
5772
  this._sendWebcam(videoTrack);
5773
+ if (!videoTrack.replacement) {
5774
+ this._startMonitoringVideoTrack(videoTrack);
5775
+ }
5776
+ }
5713
5777
  if (audioTrack) {
5714
5778
  this._sendMic(audioTrack);
5715
5779
  this._syncMicAnalyser();
@@ -5772,6 +5836,7 @@ class VegaRtcManager {
5772
5836
  }
5773
5837
  }
5774
5838
  stopOrResumeVideo(localStream, enable) {
5839
+ var _a;
5775
5840
  logger$1.info("stopOrResumeVideo() [enable:%s]", enable);
5776
5841
  this._webcamPaused = !enable;
5777
5842
  this._pauseResumeWebcam();
@@ -5780,6 +5845,7 @@ class VegaRtcManager {
5780
5845
  }
5781
5846
  if (!enable) {
5782
5847
  clearTimeout(this._stopCameraTimeout);
5848
+ const stopCameraDelay = ((_a = localStream.getVideoTracks().find((t) => !t.enabled)) === null || _a === void 0 ? void 0 : _a.readyState) === "ended" ? 0 : 5000;
5783
5849
  this._stopCameraTimeout = setTimeout(() => {
5784
5850
  localStream.getVideoTracks().forEach((track) => {
5785
5851
  if (track.enabled === false) {
@@ -5792,13 +5858,14 @@ class VegaRtcManager {
5792
5858
  this._handleStopOrResumeVideo({ enable, track });
5793
5859
  }
5794
5860
  });
5795
- }, 5000);
5861
+ }, stopCameraDelay);
5796
5862
  }
5797
5863
  else if (localStream.getVideoTracks().length === 0) {
5798
5864
  const constraints = this._webrtcProvider.getMediaConstraints().video;
5799
5865
  navigator.mediaDevices.getUserMedia({ video: constraints }).then((stream) => {
5800
5866
  const track = stream.getVideoTracks()[0];
5801
5867
  localStream.addTrack(track);
5868
+ this._startMonitoringVideoTrack(track);
5802
5869
  this._emitToPWA(EVENTS.LOCAL_STREAM_TRACK_ADDED, {
5803
5870
  streamId: localStream.id,
5804
5871
  tracks: [track],
@@ -5827,43 +5894,23 @@ class VegaRtcManager {
5827
5894
  this._syncIncomingStreamsWithPWA(clientId);
5828
5895
  }
5829
5896
  updateStreamResolution(streamId, _ignored, { width, height, }) {
5830
- var _a, _b, _c, _d, _e;
5897
+ var _a, _b;
5831
5898
  logger$1.info("updateStreamResolution()", { streamId, width, height });
5832
5899
  const consumerId = this._streamIdToVideoConsumerId.get(streamId);
5833
5900
  const consumer = this._consumers.get(consumerId);
5834
5901
  if (!consumer)
5835
5902
  return;
5836
- let numberOfActiveVideos = 0;
5837
- this._consumers.forEach((c) => {
5838
- var _a, _b;
5839
- if (c._closed || c._paused)
5840
- return;
5841
- if (((_a = c._appData) === null || _a === void 0 ? void 0 : _a.source) === "webcam" || ((_b = c._appData) === null || _b === void 0 ? void 0 : _b.source) === "screenvideo")
5842
- numberOfActiveVideos++;
5903
+ const numberOfActiveVideos = getNumberOfActiveVideos(this._consumers);
5904
+ const numberOfTemporalLayers = getNumberOfTemporalLayers(consumer);
5905
+ const { spatialLayer, temporalLayer } = getLayers({ width, height }, {
5906
+ numberOfActiveVideos,
5907
+ numberOfTemporalLayers,
5908
+ uncappedSingleRemoteVideoOn: (_a = this._features) === null || _a === void 0 ? void 0 : _a.uncappedSingleRemoteVideoOn,
5843
5909
  });
5844
- let numberOfTemporalLayers = 2;
5845
- if (/T3/.test(((_c = (_b = (_a = consumer._rtpParameters) === null || _a === void 0 ? void 0 : _a.encodings) === null || _b === void 0 ? void 0 : _b[0]) === null || _c === void 0 ? void 0 : _c.scalabilityMode) || ""))
5846
- numberOfTemporalLayers = 3;
5847
- const maxSide = Math.max(width, height);
5848
- let spatialLayer = maxSide >= 480 ? (maxSide >= 960 ? 2 : 1) : 0;
5849
- let temporalLayer = numberOfTemporalLayers - 1;
5850
- if (maxSide < 100) {
5851
- temporalLayer = Math.max(numberOfTemporalLayers - 2, 0);
5852
- }
5853
- if (numberOfActiveVideos > 8 && spatialLayer === 0) {
5854
- temporalLayer = Math.max(numberOfTemporalLayers - 2, 0);
5855
- }
5856
- if (numberOfActiveVideos < 4 && maxSide > 300 && spatialLayer === 0) {
5857
- spatialLayer = 1;
5858
- }
5859
- if (((_d = this._features) === null || _d === void 0 ? void 0 : _d.uncappedSingleRemoteVideoOn) && numberOfActiveVideos === 1) {
5860
- spatialLayer = 2;
5861
- temporalLayer = numberOfTemporalLayers - 1;
5862
- }
5863
5910
  if (consumer.appData.spatialLayer !== spatialLayer || consumer.appData.temporalLayer !== temporalLayer) {
5864
5911
  consumer.appData.spatialLayer = spatialLayer;
5865
5912
  consumer.appData.temporalLayer = temporalLayer;
5866
- (_e = this._vegaConnection) === null || _e === void 0 ? void 0 : _e.message("setConsumersPreferredLayers", {
5913
+ (_b = this._vegaConnection) === null || _b === void 0 ? void 0 : _b.message("setConsumersPreferredLayers", {
5867
5914
  consumerIds: [consumerId],
5868
5915
  spatialLayer,
5869
5916
  temporalLayer,
@@ -5919,6 +5966,12 @@ class VegaRtcManager {
5919
5966
  _stopMonitoringAudioTrack(track) {
5920
5967
  track.removeEventListener("ended", this._audioTrackOnEnded);
5921
5968
  }
5969
+ _startMonitoringVideoTrack(track) {
5970
+ track.addEventListener("ended", this._videoTrackOnEnded);
5971
+ }
5972
+ _stopMonitoringVideoTrack(track) {
5973
+ track.removeEventListener("ended", this._videoTrackOnEnded);
5974
+ }
5922
5975
  _onMessage(message) {
5923
5976
  return __awaiter(this, void 0, void 0, function* () {
5924
5977
  const { method, data } = message;
package/dist/index.d.cts CHANGED
@@ -128,7 +128,7 @@ interface RtcManager {
128
128
  addNewStream(streamId: string, stream: MediaStream, isAudioEnabled: boolean, isVideoEnabled: boolean): void;
129
129
  disconnect(streamId: string, activeBreakout: boolean | null, eventClaim?: string): void;
130
130
  disconnectAll(): void;
131
- replaceTrack(oldTrack: MediaStreamTrack, newTrack: MediaStreamTrack): void;
131
+ replaceTrack(oldTrack: CustomMediaStreamTrack, newTrack: CustomMediaStreamTrack): void;
132
132
  removeStream(streamId: string, _stream: MediaStream, requestedByClientId: string | null): void;
133
133
  shouldAcceptStreamsFromBothSides?: () => boolean;
134
134
  updateStreamResolution(streamId: string, ignored: null, resolution: {
@@ -263,6 +263,9 @@ type GetDeviceDataResult = {
263
263
  kind: string;
264
264
  };
265
265
  };
266
+ interface CustomMediaStreamTrack extends MediaStreamTrack {
267
+ replacement?: boolean;
268
+ }
266
269
 
267
270
  declare function getMediaConstraints({ disableAEC, disableAGC, hd, lax, lowDataMode, preferredDeviceIds, resolution, simulcast, widescreen, }: GetMediaConstraintsOptions): any;
268
271
  declare function getConstraints({ devices, videoId, audioId, options, type }: GetConstraintsOptions): any;
@@ -327,6 +330,7 @@ declare class P2pRtcManager implements RtcManager {
327
330
  };
328
331
  _pendingActionsForConnectedPeerConnections: any[];
329
332
  _audioTrackOnEnded: () => void;
333
+ _videoTrackOnEnded: () => void;
330
334
  totalSessionsCreated: number;
331
335
  _iceServers: any;
332
336
  _sfuServer: any;
@@ -356,7 +360,7 @@ declare class P2pRtcManager implements RtcManager {
356
360
  supportsScreenShareAudio(): boolean;
357
361
  maybeRestrictRelayBandwidth(session: any): void;
358
362
  addNewStream(streamId: string, stream: MediaStream): void;
359
- replaceTrack(oldTrack: MediaStreamTrack, newTrack: MediaStreamTrack): Promise<any[]>;
363
+ replaceTrack(oldTrack: CustomMediaStreamTrack, newTrack: CustomMediaStreamTrack): Promise<any[]>;
360
364
  accept({ clientId, shouldAddLocalVideo }: {
361
365
  clientId: string;
362
366
  shouldAddLocalVideo?: boolean;
@@ -412,6 +416,8 @@ declare class P2pRtcManager implements RtcManager {
412
416
  _clearMediaServersRefresh(): void;
413
417
  _startMonitoringAudioTrack(track: any): void;
414
418
  _stopMonitoringAudioTrack(track: any): void;
419
+ _startMonitoringVideoTrack(track: CustomMediaStreamTrack): void;
420
+ _stopMonitoringVideoTrack(track: CustomMediaStreamTrack): void;
415
421
  _connect(clientId: string): Promise<any>;
416
422
  _maybeRestartIce(clientId: string, session: any): void;
417
423
  _setCodecPreferences(pc: any, vp9On: any, av1On: any, redOn: any): void;
@@ -841,6 +847,7 @@ declare const _default: {
841
847
  ICE_RESTART: string;
842
848
  MICROPHONE_NOT_WORKING: string;
843
849
  MICROPHONE_STOPPED_WORKING: string;
850
+ CAMERA_STOPPED_WORKING: string;
844
851
  NEW_PC: string;
845
852
  SFU_CONNECTION_OPEN: string;
846
853
  SFU_CONNECTION_CLOSED: string;
@@ -1090,6 +1097,7 @@ declare class VegaRtcManager implements RtcManager {
1090
1097
  _colocation: any;
1091
1098
  _stopCameraTimeout: any;
1092
1099
  _audioTrackOnEnded: any;
1100
+ _videoTrackOnEnded: any;
1093
1101
  _socketListenerDeregisterFunctions: any;
1094
1102
  _reconnect: any;
1095
1103
  _reconnectTimeOut: any;
@@ -1150,7 +1158,7 @@ declare class VegaRtcManager implements RtcManager {
1150
1158
  setRemoteScreenshareVideoTrackIds(): void;
1151
1159
  setRoomSessionId(roomSessionId: string): void;
1152
1160
  disconnect(clientIdOrStreamId: string, _activeBreakout: any, eventClaim?: string): void;
1153
- replaceTrack(oldTrack: MediaStreamTrack | null, track: MediaStreamTrack): void;
1161
+ replaceTrack(oldTrack: CustomMediaStreamTrack | null, track: CustomMediaStreamTrack): void;
1154
1162
  removeStream(streamId: string, _stream: MediaStream, requestedByClientId: string): void;
1155
1163
  _onMicAnalyserScoreUpdated(data: any): void;
1156
1164
  addNewStream(streamId: string, stream: MediaStream, audioPaused: boolean, videoPaused: boolean): void;
@@ -1178,6 +1186,8 @@ declare class VegaRtcManager implements RtcManager {
1178
1186
  rtcStatsReconnect(): void;
1179
1187
  _startMonitoringAudioTrack(track: MediaStreamTrack): void;
1180
1188
  _stopMonitoringAudioTrack(track: MediaStreamTrack): void;
1189
+ _startMonitoringVideoTrack(track: CustomMediaStreamTrack): void;
1190
+ _stopMonitoringVideoTrack(track: CustomMediaStreamTrack): void;
1181
1191
  _onMessage(message: any): Promise<void>;
1182
1192
  _onConsumerReady(options: any): Promise<void>;
1183
1193
  _onConsumerClosed({ consumerId, reason }: {
@@ -1380,4 +1390,4 @@ declare class RtcStream {
1380
1390
  static getTypeFromId(id: string): string;
1381
1391
  }
1382
1392
 
1383
- 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, 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 };
1393
+ 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 };
package/dist/index.d.mts CHANGED
@@ -128,7 +128,7 @@ interface RtcManager {
128
128
  addNewStream(streamId: string, stream: MediaStream, isAudioEnabled: boolean, isVideoEnabled: boolean): void;
129
129
  disconnect(streamId: string, activeBreakout: boolean | null, eventClaim?: string): void;
130
130
  disconnectAll(): void;
131
- replaceTrack(oldTrack: MediaStreamTrack, newTrack: MediaStreamTrack): void;
131
+ replaceTrack(oldTrack: CustomMediaStreamTrack, newTrack: CustomMediaStreamTrack): void;
132
132
  removeStream(streamId: string, _stream: MediaStream, requestedByClientId: string | null): void;
133
133
  shouldAcceptStreamsFromBothSides?: () => boolean;
134
134
  updateStreamResolution(streamId: string, ignored: null, resolution: {
@@ -263,6 +263,9 @@ type GetDeviceDataResult = {
263
263
  kind: string;
264
264
  };
265
265
  };
266
+ interface CustomMediaStreamTrack extends MediaStreamTrack {
267
+ replacement?: boolean;
268
+ }
266
269
 
267
270
  declare function getMediaConstraints({ disableAEC, disableAGC, hd, lax, lowDataMode, preferredDeviceIds, resolution, simulcast, widescreen, }: GetMediaConstraintsOptions): any;
268
271
  declare function getConstraints({ devices, videoId, audioId, options, type }: GetConstraintsOptions): any;
@@ -327,6 +330,7 @@ declare class P2pRtcManager implements RtcManager {
327
330
  };
328
331
  _pendingActionsForConnectedPeerConnections: any[];
329
332
  _audioTrackOnEnded: () => void;
333
+ _videoTrackOnEnded: () => void;
330
334
  totalSessionsCreated: number;
331
335
  _iceServers: any;
332
336
  _sfuServer: any;
@@ -356,7 +360,7 @@ declare class P2pRtcManager implements RtcManager {
356
360
  supportsScreenShareAudio(): boolean;
357
361
  maybeRestrictRelayBandwidth(session: any): void;
358
362
  addNewStream(streamId: string, stream: MediaStream): void;
359
- replaceTrack(oldTrack: MediaStreamTrack, newTrack: MediaStreamTrack): Promise<any[]>;
363
+ replaceTrack(oldTrack: CustomMediaStreamTrack, newTrack: CustomMediaStreamTrack): Promise<any[]>;
360
364
  accept({ clientId, shouldAddLocalVideo }: {
361
365
  clientId: string;
362
366
  shouldAddLocalVideo?: boolean;
@@ -412,6 +416,8 @@ declare class P2pRtcManager implements RtcManager {
412
416
  _clearMediaServersRefresh(): void;
413
417
  _startMonitoringAudioTrack(track: any): void;
414
418
  _stopMonitoringAudioTrack(track: any): void;
419
+ _startMonitoringVideoTrack(track: CustomMediaStreamTrack): void;
420
+ _stopMonitoringVideoTrack(track: CustomMediaStreamTrack): void;
415
421
  _connect(clientId: string): Promise<any>;
416
422
  _maybeRestartIce(clientId: string, session: any): void;
417
423
  _setCodecPreferences(pc: any, vp9On: any, av1On: any, redOn: any): void;
@@ -841,6 +847,7 @@ declare const _default: {
841
847
  ICE_RESTART: string;
842
848
  MICROPHONE_NOT_WORKING: string;
843
849
  MICROPHONE_STOPPED_WORKING: string;
850
+ CAMERA_STOPPED_WORKING: string;
844
851
  NEW_PC: string;
845
852
  SFU_CONNECTION_OPEN: string;
846
853
  SFU_CONNECTION_CLOSED: string;
@@ -1090,6 +1097,7 @@ declare class VegaRtcManager implements RtcManager {
1090
1097
  _colocation: any;
1091
1098
  _stopCameraTimeout: any;
1092
1099
  _audioTrackOnEnded: any;
1100
+ _videoTrackOnEnded: any;
1093
1101
  _socketListenerDeregisterFunctions: any;
1094
1102
  _reconnect: any;
1095
1103
  _reconnectTimeOut: any;
@@ -1150,7 +1158,7 @@ declare class VegaRtcManager implements RtcManager {
1150
1158
  setRemoteScreenshareVideoTrackIds(): void;
1151
1159
  setRoomSessionId(roomSessionId: string): void;
1152
1160
  disconnect(clientIdOrStreamId: string, _activeBreakout: any, eventClaim?: string): void;
1153
- replaceTrack(oldTrack: MediaStreamTrack | null, track: MediaStreamTrack): void;
1161
+ replaceTrack(oldTrack: CustomMediaStreamTrack | null, track: CustomMediaStreamTrack): void;
1154
1162
  removeStream(streamId: string, _stream: MediaStream, requestedByClientId: string): void;
1155
1163
  _onMicAnalyserScoreUpdated(data: any): void;
1156
1164
  addNewStream(streamId: string, stream: MediaStream, audioPaused: boolean, videoPaused: boolean): void;
@@ -1178,6 +1186,8 @@ declare class VegaRtcManager implements RtcManager {
1178
1186
  rtcStatsReconnect(): void;
1179
1187
  _startMonitoringAudioTrack(track: MediaStreamTrack): void;
1180
1188
  _stopMonitoringAudioTrack(track: MediaStreamTrack): void;
1189
+ _startMonitoringVideoTrack(track: CustomMediaStreamTrack): void;
1190
+ _stopMonitoringVideoTrack(track: CustomMediaStreamTrack): void;
1181
1191
  _onMessage(message: any): Promise<void>;
1182
1192
  _onConsumerReady(options: any): Promise<void>;
1183
1193
  _onConsumerClosed({ consumerId, reason }: {
@@ -1380,4 +1390,4 @@ declare class RtcStream {
1380
1390
  static getTypeFromId(id: string): string;
1381
1391
  }
1382
1392
 
1383
- 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, 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 };
1393
+ 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 };
package/dist/index.d.ts CHANGED
@@ -128,7 +128,7 @@ interface RtcManager {
128
128
  addNewStream(streamId: string, stream: MediaStream, isAudioEnabled: boolean, isVideoEnabled: boolean): void;
129
129
  disconnect(streamId: string, activeBreakout: boolean | null, eventClaim?: string): void;
130
130
  disconnectAll(): void;
131
- replaceTrack(oldTrack: MediaStreamTrack, newTrack: MediaStreamTrack): void;
131
+ replaceTrack(oldTrack: CustomMediaStreamTrack, newTrack: CustomMediaStreamTrack): void;
132
132
  removeStream(streamId: string, _stream: MediaStream, requestedByClientId: string | null): void;
133
133
  shouldAcceptStreamsFromBothSides?: () => boolean;
134
134
  updateStreamResolution(streamId: string, ignored: null, resolution: {
@@ -263,6 +263,9 @@ type GetDeviceDataResult = {
263
263
  kind: string;
264
264
  };
265
265
  };
266
+ interface CustomMediaStreamTrack extends MediaStreamTrack {
267
+ replacement?: boolean;
268
+ }
266
269
 
267
270
  declare function getMediaConstraints({ disableAEC, disableAGC, hd, lax, lowDataMode, preferredDeviceIds, resolution, simulcast, widescreen, }: GetMediaConstraintsOptions): any;
268
271
  declare function getConstraints({ devices, videoId, audioId, options, type }: GetConstraintsOptions): any;
@@ -327,6 +330,7 @@ declare class P2pRtcManager implements RtcManager {
327
330
  };
328
331
  _pendingActionsForConnectedPeerConnections: any[];
329
332
  _audioTrackOnEnded: () => void;
333
+ _videoTrackOnEnded: () => void;
330
334
  totalSessionsCreated: number;
331
335
  _iceServers: any;
332
336
  _sfuServer: any;
@@ -356,7 +360,7 @@ declare class P2pRtcManager implements RtcManager {
356
360
  supportsScreenShareAudio(): boolean;
357
361
  maybeRestrictRelayBandwidth(session: any): void;
358
362
  addNewStream(streamId: string, stream: MediaStream): void;
359
- replaceTrack(oldTrack: MediaStreamTrack, newTrack: MediaStreamTrack): Promise<any[]>;
363
+ replaceTrack(oldTrack: CustomMediaStreamTrack, newTrack: CustomMediaStreamTrack): Promise<any[]>;
360
364
  accept({ clientId, shouldAddLocalVideo }: {
361
365
  clientId: string;
362
366
  shouldAddLocalVideo?: boolean;
@@ -412,6 +416,8 @@ declare class P2pRtcManager implements RtcManager {
412
416
  _clearMediaServersRefresh(): void;
413
417
  _startMonitoringAudioTrack(track: any): void;
414
418
  _stopMonitoringAudioTrack(track: any): void;
419
+ _startMonitoringVideoTrack(track: CustomMediaStreamTrack): void;
420
+ _stopMonitoringVideoTrack(track: CustomMediaStreamTrack): void;
415
421
  _connect(clientId: string): Promise<any>;
416
422
  _maybeRestartIce(clientId: string, session: any): void;
417
423
  _setCodecPreferences(pc: any, vp9On: any, av1On: any, redOn: any): void;
@@ -841,6 +847,7 @@ declare const _default: {
841
847
  ICE_RESTART: string;
842
848
  MICROPHONE_NOT_WORKING: string;
843
849
  MICROPHONE_STOPPED_WORKING: string;
850
+ CAMERA_STOPPED_WORKING: string;
844
851
  NEW_PC: string;
845
852
  SFU_CONNECTION_OPEN: string;
846
853
  SFU_CONNECTION_CLOSED: string;
@@ -1090,6 +1097,7 @@ declare class VegaRtcManager implements RtcManager {
1090
1097
  _colocation: any;
1091
1098
  _stopCameraTimeout: any;
1092
1099
  _audioTrackOnEnded: any;
1100
+ _videoTrackOnEnded: any;
1093
1101
  _socketListenerDeregisterFunctions: any;
1094
1102
  _reconnect: any;
1095
1103
  _reconnectTimeOut: any;
@@ -1150,7 +1158,7 @@ declare class VegaRtcManager implements RtcManager {
1150
1158
  setRemoteScreenshareVideoTrackIds(): void;
1151
1159
  setRoomSessionId(roomSessionId: string): void;
1152
1160
  disconnect(clientIdOrStreamId: string, _activeBreakout: any, eventClaim?: string): void;
1153
- replaceTrack(oldTrack: MediaStreamTrack | null, track: MediaStreamTrack): void;
1161
+ replaceTrack(oldTrack: CustomMediaStreamTrack | null, track: CustomMediaStreamTrack): void;
1154
1162
  removeStream(streamId: string, _stream: MediaStream, requestedByClientId: string): void;
1155
1163
  _onMicAnalyserScoreUpdated(data: any): void;
1156
1164
  addNewStream(streamId: string, stream: MediaStream, audioPaused: boolean, videoPaused: boolean): void;
@@ -1178,6 +1186,8 @@ declare class VegaRtcManager implements RtcManager {
1178
1186
  rtcStatsReconnect(): void;
1179
1187
  _startMonitoringAudioTrack(track: MediaStreamTrack): void;
1180
1188
  _stopMonitoringAudioTrack(track: MediaStreamTrack): void;
1189
+ _startMonitoringVideoTrack(track: CustomMediaStreamTrack): void;
1190
+ _stopMonitoringVideoTrack(track: CustomMediaStreamTrack): void;
1181
1191
  _onMessage(message: any): Promise<void>;
1182
1192
  _onConsumerReady(options: any): Promise<void>;
1183
1193
  _onConsumerClosed({ consumerId, reason }: {
@@ -1380,4 +1390,4 @@ declare class RtcStream {
1380
1390
  static getTypeFromId(id: string): string;
1381
1391
  }
1382
1392
 
1383
- 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, 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 };
1393
+ 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 };