@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.
- package/dist/engine/Peer.d.ts +1 -1
- package/dist/engine/media/tracks/PeerTrack.d.ts +8 -3
- package/dist/index.es.js +1 -1
- package/dist/index.js +1 -1
- package/dist/types/common.d.ts +1 -1
- package/package.json +1 -1
- package/src/engine/Peer.ts +5 -7
- package/src/engine/index.ts +2 -1
- package/src/engine/media/tracks/PeerTrack.ts +74 -48
- package/src/types/common.ts +1 -1
package/dist/types/common.d.ts
CHANGED
|
@@ -176,7 +176,7 @@ export declare type PayloadOfPublishedMedia = {
|
|
|
176
176
|
};
|
|
177
177
|
export declare type SubscribeOptions = {
|
|
178
178
|
producerId: string;
|
|
179
|
-
|
|
179
|
+
muted?: boolean;
|
|
180
180
|
};
|
|
181
181
|
export declare type PayloadOfUnpublishedMedia = PayloadOfPublishedMedia;
|
|
182
182
|
export declare type ChangePreferredLayersPayload = PreferredLayersParams & {
|
package/package.json
CHANGED
package/src/engine/Peer.ts
CHANGED
|
@@ -119,7 +119,7 @@ class Peer {
|
|
|
119
119
|
}));
|
|
120
120
|
}
|
|
121
121
|
|
|
122
|
-
public async subscribe({ producerId,
|
|
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
|
-
|
|
149
|
+
muted,
|
|
150
|
+
paused: isProducerPaused,
|
|
150
151
|
peerEventEmitter: this.observer,
|
|
151
|
-
isProducerPaused,
|
|
152
152
|
});
|
|
153
153
|
|
|
154
|
-
if (!
|
|
155
|
-
await track.
|
|
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
|
|
package/src/engine/index.ts
CHANGED
|
@@ -22,8 +22,8 @@ interface PeerTrackConstructor {
|
|
|
22
22
|
label: TrackLabel,
|
|
23
23
|
consumer?: PeerConsumer,
|
|
24
24
|
engine: Engine,
|
|
25
|
-
|
|
26
|
-
|
|
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.#
|
|
68
|
-
this.#
|
|
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
|
-
|
|
121
|
-
|
|
122
|
-
|
|
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
|
-
|
|
152
|
-
|
|
153
|
-
|
|
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;
|
package/src/types/common.ts
CHANGED