@livedigital/client 2.32.2 → 2.33.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.
@@ -176,7 +176,7 @@ export declare type PayloadOfPublishedMedia = {
176
176
  };
177
177
  export declare type SubscribeOptions = {
178
178
  producerId: string;
179
- paused?: boolean;
179
+ muted?: boolean;
180
180
  };
181
181
  export declare type PayloadOfUnpublishedMedia = PayloadOfPublishedMedia;
182
182
  export declare type ChangePreferredLayersPayload = PreferredLayersParams & {
package/package.json CHANGED
@@ -2,7 +2,7 @@
2
2
  "name": "@livedigital/client",
3
3
  "author": "vlprojects",
4
4
  "license": "MIT",
5
- "version": "2.32.2",
5
+ "version": "2.33.0",
6
6
  "private": false,
7
7
  "bugs": {
8
8
  "url": "https://github.com/vlprojects/livedigital-sdk/issues"
@@ -119,7 +119,7 @@ class Peer {
119
119
  }));
120
120
  }
121
121
 
122
- public async subscribe({ producerId, paused = false }: SubscribeOptions): Promise<void> {
122
+ public async subscribe({ producerId, muted = false }: SubscribeOptions): Promise<void> {
123
123
  try {
124
124
  const producer = this.producers.get(producerId);
125
125
  if (!producer) {
@@ -146,13 +146,13 @@ class Peer {
146
146
  label: producer.label,
147
147
  consumer: new PeerConsumer({ consumer, logLevel: this.engine.logLevel }),
148
148
  engine: this.engine,
149
- isPaused: true,
149
+ muted,
150
+ paused: isProducerPaused,
150
151
  peerEventEmitter: this.observer,
151
- isProducerPaused,
152
152
  });
153
153
 
154
- if (!paused) {
155
- await track.resume();
154
+ if (!muted) {
155
+ await track.unmute();
156
156
  }
157
157
 
158
158
  this.tracks.set(track.label, track);
@@ -227,7 +227,6 @@ class Peer {
227
227
  return;
228
228
  }
229
229
 
230
- track.setIsTrackProducerPaused(true);
231
230
  await track.pause(false);
232
231
  });
233
232
 
@@ -237,7 +236,6 @@ class Peer {
237
236
  return;
238
237
  }
239
238
 
240
- track.setIsTrackProducerPaused(false);
241
239
  await track.resume(false);
242
240
  });
243
241
 
@@ -525,7 +525,8 @@ class Engine {
525
525
  mediaStreamTrack: track.mediaStreamTrack,
526
526
  label: track.getLabel(),
527
527
  engine: this,
528
- isPaused: track.isPaused,
528
+ muted: false,
529
+ paused: track.isPaused,
529
530
  peerEventEmitter: myPeer.observer,
530
531
  });
531
532
 
@@ -22,8 +22,8 @@ interface PeerTrackConstructor {
22
22
  label: TrackLabel,
23
23
  consumer?: PeerConsumer,
24
24
  engine: Engine,
25
- isPaused: boolean,
26
- isProducerPaused?: boolean,
25
+ muted: boolean,
26
+ paused: boolean,
27
27
  peerEventEmitter: EnhancedEventEmitter,
28
28
  onLogMessage?: LogMessageHandler,
29
29
  }
@@ -49,10 +49,12 @@ class PeerTrack {
49
49
 
50
50
  #closed = false;
51
51
 
52
- #isTrackProducerPaused?: boolean;
53
-
54
52
  #queue = new AwaitQueue();
55
53
 
54
+ #muted = false;
55
+
56
+ readonly observer = new EnhancedEventEmitter();
57
+
56
58
  constructor(payload: PeerTrackConstructor) {
57
59
  this.#mediaStreamTrack = payload.mediaStreamTrack;
58
60
  this.label = payload.label;
@@ -64,8 +66,8 @@ class PeerTrack {
64
66
  onLogMessage: payload.onLogMessage,
65
67
  });
66
68
  this.#peerEventEmitter = payload.peerEventEmitter;
67
- this.#paused = payload.isPaused;
68
- this.#isTrackProducerPaused = payload.isProducerPaused;
69
+ this.#muted = payload.muted;
70
+ this.#paused = payload.paused;
69
71
  this.#peerEventEmitter.safeEmit(PEER_EVENTS.trackStart, this);
70
72
  }
71
73
 
@@ -85,6 +87,10 @@ class PeerTrack {
85
87
  return this.#paused;
86
88
  }
87
89
 
90
+ get isMuted(): boolean {
91
+ return this.#muted;
92
+ }
93
+
88
94
  get consumerId(): string | undefined {
89
95
  return this.consumer?.id;
90
96
  }
@@ -104,11 +110,28 @@ class PeerTrack {
104
110
  this.clearCheckStateTimeout();
105
111
  }
106
112
 
113
+ public async mute(): Promise<void> {
114
+ await this.#queue.push(async () => {
115
+ this.#logger.debug('mute()', { track: this, peer: this });
116
+ await this.pauseConsumer();
117
+ this.#muted = true;
118
+ });
119
+ }
120
+
121
+ public async unmute(): Promise<void> {
122
+ await this.#queue.push(async () => {
123
+ this.#logger.debug('unmute()', { track: this, peer: this });
124
+ await this.resumeConsumer();
125
+ this.#muted = false;
126
+ });
127
+ }
128
+
107
129
  public async pause(pauseRemote = true): Promise<void> {
108
130
  await this.#queue.push(async () => {
109
- if (!this.consumer) {
131
+ if (!this.consumer || this.isMuted) {
110
132
  this.#paused = true;
111
133
  this.#peerEventEmitter.safeEmit(PEER_EVENTS.trackPaused, this);
134
+ this.#logger.debug('pause()', { track: this, peer: this });
112
135
  return;
113
136
  }
114
137
 
@@ -117,26 +140,15 @@ class PeerTrack {
117
140
  return;
118
141
  }
119
142
 
120
- try {
121
- this.clearCheckStateTimeout();
122
- if (pauseRemote) {
123
- await this.#engine.network.pauseRemoteConsumer(this.consumer.id);
124
- }
125
-
126
- this.consumer.pause();
127
- this.#paused = true;
128
- this.#consumerRestarted = false;
129
- this.#peerEventEmitter.safeEmit(PEER_EVENTS.trackPaused, this);
130
- this.#logger.debug('pause()', { peer: this, consumer: this.consumer });
131
- } catch (error) {
132
- this.#logger.warn('pause()', { error });
133
- }
143
+ await this.pauseConsumer(pauseRemote);
144
+ this.#paused = true;
145
+ this.#peerEventEmitter.safeEmit(PEER_EVENTS.trackPaused, this);
134
146
  });
135
147
  }
136
148
 
137
149
  public async resume(resumeRemote = true): Promise<void> {
138
150
  await this.#queue.push(async () => {
139
- if (!this.consumer) {
151
+ if (!this.consumer || this.isMuted) {
140
152
  this.#paused = false;
141
153
  this.#peerEventEmitter.safeEmit(PEER_EVENTS.trackResumed, this);
142
154
  this.#logger.debug('resume()', { track: this, peer: this });
@@ -148,28 +160,9 @@ class PeerTrack {
148
160
  return;
149
161
  }
150
162
 
151
- if (this.#isTrackProducerPaused) {
152
- this.#logger.debug('resume()', {
153
- message: 'Can not resume track, producer is paused',
154
- track: this,
155
- peer: this,
156
- });
157
- return;
158
- }
159
-
160
- try {
161
- if (resumeRemote) {
162
- await this.#engine.network.resumeRemoteConsumer(this.consumer.id);
163
- }
164
-
165
- this.consumer.resume();
166
- this.#paused = false;
167
- this.#peerEventEmitter.safeEmit(PEER_EVENTS.trackResumed, this);
168
- this.checkConsumerState();
169
- this.#logger.debug('resume()', { track: this, peer: this });
170
- } catch (error) {
171
- this.#logger.warn('resume()', { error });
172
- }
163
+ await this.resumeConsumer(resumeRemote);
164
+ this.#paused = false;
165
+ this.#peerEventEmitter.safeEmit(PEER_EVENTS.trackResumed, this);
173
166
  });
174
167
  }
175
168
 
@@ -181,6 +174,43 @@ class PeerTrack {
181
174
  await this.setConsumerPriority({ consumerId: this.consumer.id, priority });
182
175
  }
183
176
 
177
+ private async resumeConsumer(resumeRemote = true): Promise<void> {
178
+ if (!this.consumer) {
179
+ return;
180
+ }
181
+
182
+ try {
183
+ if (resumeRemote) {
184
+ await this.#engine.network.resumeRemoteConsumer(this.consumer.id);
185
+ }
186
+
187
+ this.consumer.resume();
188
+ this.checkConsumerState();
189
+ this.#logger.debug('resumeConsumer()', { track: this, peer: this });
190
+ } catch (error) {
191
+ this.#logger.warn('resumeConsumer()', { error });
192
+ }
193
+ }
194
+
195
+ private async pauseConsumer(pauseRemote = true): Promise<void> {
196
+ if (!this.consumer) {
197
+ return;
198
+ }
199
+
200
+ try {
201
+ this.clearCheckStateTimeout();
202
+ if (pauseRemote) {
203
+ await this.#engine.network.pauseRemoteConsumer(this.consumer.id);
204
+ }
205
+
206
+ this.consumer.pause();
207
+ this.#consumerRestarted = false;
208
+ this.#logger.debug('pauseConsumer()', { peer: this, consumer: this.consumer });
209
+ } catch (error) {
210
+ this.#logger.warn('pauseConsumer()', { error });
211
+ }
212
+ }
213
+
184
214
  private async setConsumerPriority(params: SetConsumerPriorityParams): Promise<void> {
185
215
  try {
186
216
  await this.#engine.network.socket.request(MEDIASOUP_EVENTS.setConsumerPriority, params);
@@ -458,10 +488,6 @@ class PeerTrack {
458
488
 
459
489
  clearTimeout(this.#checkStateTimeout);
460
490
  }
461
-
462
- setIsTrackProducerPaused(value: boolean): void {
463
- this.#isTrackProducerPaused = value;
464
- }
465
491
  }
466
492
 
467
493
  export default PeerTrack;
@@ -212,7 +212,7 @@ export type PayloadOfPublishedMedia = {
212
212
 
213
213
  export type SubscribeOptions = {
214
214
  producerId: string,
215
- paused?: boolean,
215
+ muted?: boolean,
216
216
  };
217
217
 
218
218
  export type PayloadOfUnpublishedMedia = PayloadOfPublishedMedia;