@livedigital/client 2.12.0-add-onissue-callback.3 → 2.12.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/constants/events.d.ts +2 -0
- package/dist/engine/DefaultEngineDependenciesFactory.d.ts +4 -3
- package/dist/engine/Logger.d.ts +3 -10
- package/dist/engine/Peer.d.ts +3 -4
- package/dist/engine/PeerConsumer.d.ts +2 -6
- package/dist/engine/index.d.ts +5 -10
- package/dist/engine/media/index.d.ts +0 -2
- package/dist/engine/media/tracks/BaseTrack.d.ts +2 -6
- package/dist/engine/media/tracks/PeerTrack.d.ts +4 -0
- package/dist/engine/network/Socket.d.ts +2 -5
- package/dist/engine/network/index.d.ts +0 -2
- package/dist/engine/system/index.d.ts +4 -2
- package/dist/engine/wid/types.d.ts +2 -2
- package/dist/helpers/retry.d.ts +0 -2
- package/dist/index.d.ts +1 -4
- package/dist/index.es.js +1 -1
- package/dist/index.js +2 -2
- package/dist/types/common.d.ts +4 -12
- package/dist/types/engine.d.ts +5 -15
- package/package.json +1 -1
- package/src/constants/events.ts +2 -0
- package/src/engine/DefaultEngineDependenciesFactory.ts +13 -18
- package/src/engine/Logger.ts +17 -43
- package/src/engine/Peer.ts +68 -38
- package/src/engine/PeerConsumer.ts +3 -12
- package/src/engine/handlers/ChannelEventHandler.ts +1 -4
- package/src/engine/handlers/MediaSoupEventHandler.ts +2 -37
- package/src/engine/index.ts +22 -55
- package/src/engine/media/index.ts +4 -17
- package/src/engine/media/tracks/BaseTrack.ts +3 -13
- package/src/engine/media/tracks/PeerTrack.ts +31 -12
- package/src/engine/network/Socket.ts +3 -10
- package/src/engine/network/index.ts +2 -6
- package/src/engine/system/index.ts +7 -7
- package/src/engine/wid/WebRTCIssueDetector.ts +2 -2
- package/src/engine/wid/detectors/NetworkIssueDetector.ts +16 -13
- package/src/engine/wid/types.ts +2 -2
- package/src/helpers/retry.ts +2 -4
- package/src/index.ts +1 -14
- package/src/types/common.ts +5 -15
- package/src/types/engine.ts +5 -18
- package/dist/constants/common.d.ts +0 -11
- package/src/constants/common.ts +0 -13
package/dist/types/common.d.ts
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { MediaKind, RtpEncodingParameters, RtpParameters } from 'mediasoup-client/lib/types';
|
|
2
|
+
import { ConsumerOptions } from 'mediasoup-client/lib/Consumer';
|
|
2
3
|
import AudioTrack from '../engine/media/tracks/AudioTrack';
|
|
3
4
|
import VideoTrack from '../engine/media/tracks/VideoTrack';
|
|
4
5
|
export declare type SocketResponse = {
|
|
@@ -153,17 +154,6 @@ export declare enum TrackLabel {
|
|
|
153
154
|
ScreenAudio = "screen-audio",
|
|
154
155
|
Unknown = "unknown"
|
|
155
156
|
}
|
|
156
|
-
export declare type StartTrackPayload = {
|
|
157
|
-
producerId: string;
|
|
158
|
-
consumerId?: string;
|
|
159
|
-
track: MediaStreamTrack;
|
|
160
|
-
label: TrackLabel;
|
|
161
|
-
};
|
|
162
|
-
export declare type EndTrackPayload = {
|
|
163
|
-
producerId: string;
|
|
164
|
-
kind: MediaKind;
|
|
165
|
-
label: TrackLabel;
|
|
166
|
-
};
|
|
167
157
|
export declare type PayloadOfPublishedMedia = {
|
|
168
158
|
producerId: string;
|
|
169
159
|
kind: MediaKind;
|
|
@@ -209,5 +199,7 @@ export declare type TransformParams = {
|
|
|
209
199
|
width?: number;
|
|
210
200
|
height?: number;
|
|
211
201
|
};
|
|
202
|
+
export declare type RemoteConsumerOptions = ConsumerOptions & {
|
|
203
|
+
producerPaused: boolean;
|
|
204
|
+
};
|
|
212
205
|
export declare type LogMessageHandler = (msg: any, ...meta: any) => void;
|
|
213
|
-
export declare type LogLevel = 3 | 4 | 6 | 7;
|
package/dist/types/engine.d.ts
CHANGED
|
@@ -7,27 +7,17 @@ import ChannelEventHandler from '../engine/handlers/ChannelEventHandler';
|
|
|
7
7
|
import MediaSoupEventHandler from '../engine/handlers/MediaSoupEventHandler';
|
|
8
8
|
import WebRTCIssueDetector from '../engine/wid/WebRTCIssueDetector';
|
|
9
9
|
import { LoadBalancerApiClientParams } from '../engine/network/LoadBalancerClient';
|
|
10
|
-
import
|
|
11
|
-
import { LogLevel } from './common';
|
|
12
|
-
export declare type IssuesHandler = (issues: IssueDetectorResult) => void;
|
|
10
|
+
import Logger from '../engine/Logger';
|
|
13
11
|
export interface CreateIssueDetectorParams {
|
|
14
|
-
|
|
15
|
-
}
|
|
16
|
-
export interface CreateMediaParams {
|
|
17
|
-
logLevel: LogLevel;
|
|
12
|
+
logger: Logger;
|
|
18
13
|
}
|
|
19
14
|
export interface CreateNetworkParams {
|
|
20
|
-
logLevel: LogLevel;
|
|
21
15
|
loadbalancer: LoadBalancerApiClientParams;
|
|
22
16
|
}
|
|
23
|
-
export interface CreateSystemParams {
|
|
24
|
-
logLevel: LogLevel;
|
|
25
|
-
clientEventEmitter: EnhancedEventEmitter;
|
|
26
|
-
}
|
|
27
17
|
export interface EngineDependenciesFactory {
|
|
28
|
-
createSystem: (
|
|
29
|
-
createMedia: (
|
|
30
|
-
createNetwork: (
|
|
18
|
+
createSystem: (clientEventEmitter: EnhancedEventEmitter) => System;
|
|
19
|
+
createMedia: () => Media;
|
|
20
|
+
createNetwork: (networkParams: CreateNetworkParams) => Network;
|
|
31
21
|
createChannelEventHandler: (engine: Engine) => ChannelEventHandler;
|
|
32
22
|
createMediaSoupEventHandler: (engine: Engine) => MediaSoupEventHandler;
|
|
33
23
|
createIssueDetector: (params: CreateIssueDetectorParams) => WebRTCIssueDetector;
|
package/package.json
CHANGED
package/src/constants/events.ts
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import EnhancedEventEmitter from '../EnhancedEventEmitter';
|
|
1
2
|
import Network from './network';
|
|
2
3
|
import System from './system';
|
|
3
4
|
import Media from './media';
|
|
@@ -5,35 +6,25 @@ import ChannelEventHandler from './handlers/ChannelEventHandler';
|
|
|
5
6
|
import Engine from './index';
|
|
6
7
|
import MediaSoupEventHandler from './handlers/MediaSoupEventHandler';
|
|
7
8
|
import WebRTCIssueDetector from './wid/WebRTCIssueDetector';
|
|
8
|
-
import {
|
|
9
|
-
CreateIssueDetectorParams,
|
|
10
|
-
CreateMediaParams,
|
|
11
|
-
CreateNetworkParams,
|
|
12
|
-
CreateSystemParams,
|
|
13
|
-
EngineDependenciesFactory,
|
|
14
|
-
} from '../types/engine';
|
|
9
|
+
import { CreateIssueDetectorParams, CreateNetworkParams, EngineDependenciesFactory } from '../types/engine';
|
|
15
10
|
import SocketIO from './network/Socket';
|
|
16
11
|
import LoadBalancerApiClient from './network/LoadBalancerClient';
|
|
17
12
|
|
|
18
13
|
/* eslint-disable class-methods-use-this */
|
|
19
14
|
class DefaultEngineDependenciesFactory implements EngineDependenciesFactory {
|
|
20
|
-
createSystem(
|
|
21
|
-
return new System(
|
|
15
|
+
createSystem(clientEventEmitter: EnhancedEventEmitter): System {
|
|
16
|
+
return new System({ clientEventEmitter });
|
|
22
17
|
}
|
|
23
18
|
|
|
24
|
-
createMedia(
|
|
25
|
-
return new Media(
|
|
19
|
+
createMedia(): Media {
|
|
20
|
+
return new Media();
|
|
26
21
|
}
|
|
27
22
|
|
|
28
23
|
createNetwork(params: CreateNetworkParams): Network {
|
|
29
|
-
const { loadbalancer
|
|
30
|
-
const socketClient = new SocketIO(
|
|
31
|
-
logLevel,
|
|
32
|
-
});
|
|
33
|
-
|
|
24
|
+
const { loadbalancer } = params;
|
|
25
|
+
const socketClient = new SocketIO();
|
|
34
26
|
const loadBalancerApiClient = new LoadBalancerApiClient(loadbalancer);
|
|
35
27
|
return new Network({
|
|
36
|
-
logLevel,
|
|
37
28
|
socketClient,
|
|
38
29
|
loadBalancerApiClient,
|
|
39
30
|
});
|
|
@@ -49,7 +40,11 @@ class DefaultEngineDependenciesFactory implements EngineDependenciesFactory {
|
|
|
49
40
|
|
|
50
41
|
createIssueDetector(params: CreateIssueDetectorParams): WebRTCIssueDetector {
|
|
51
42
|
return new WebRTCIssueDetector({
|
|
52
|
-
|
|
43
|
+
onIssue: (issues: any[]) => {
|
|
44
|
+
issues.forEach((issue) => {
|
|
45
|
+
params.logger.warn('webRtcIssueDetector', issue);
|
|
46
|
+
});
|
|
47
|
+
},
|
|
53
48
|
});
|
|
54
49
|
}
|
|
55
50
|
}
|
package/src/engine/Logger.ts
CHANGED
|
@@ -1,48 +1,35 @@
|
|
|
1
1
|
import debug from 'debug';
|
|
2
|
-
import {
|
|
3
|
-
import { LogLevel, LogMessageHandler } from '../types/common';
|
|
2
|
+
import { LogMessageHandler } from '../types/common';
|
|
4
3
|
|
|
5
4
|
const APP_NAME = 'LiveDigital';
|
|
6
5
|
|
|
7
|
-
export type LoggerConstructorParams = {
|
|
8
|
-
namespace: string,
|
|
9
|
-
logLevel: LogLevel,
|
|
10
|
-
onLogMessage?: LogMessageHandler,
|
|
11
|
-
};
|
|
12
|
-
|
|
13
6
|
class Logger {
|
|
14
7
|
private readonly _debug: debug.Debugger;
|
|
15
8
|
|
|
16
|
-
private readonly _info: debug.Debugger;
|
|
17
|
-
|
|
18
9
|
private readonly _warn: debug.Debugger;
|
|
19
10
|
|
|
20
11
|
private readonly _error: debug.Debugger;
|
|
21
12
|
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
this._info = debug(APP_NAME).extend('info').extend(this.#namespace);
|
|
35
|
-
this._warn = debug(APP_NAME).extend('warn').extend(this.#namespace);
|
|
36
|
-
this._error = debug(APP_NAME).extend('error').extend(this.#namespace);
|
|
13
|
+
private readonly onLogMessage: LogMessageHandler;
|
|
14
|
+
|
|
15
|
+
constructor(prefix?: string, onLogMessage?: LogMessageHandler) {
|
|
16
|
+
if (prefix) {
|
|
17
|
+
this._debug = debug(`${APP_NAME}:${prefix}`);
|
|
18
|
+
this._warn = debug(`${APP_NAME}:WARN:${prefix}`);
|
|
19
|
+
this._error = debug(`${APP_NAME}:ERROR:${prefix}`);
|
|
20
|
+
} else {
|
|
21
|
+
this._debug = debug(APP_NAME);
|
|
22
|
+
this._warn = debug(`${APP_NAME}:WARN`);
|
|
23
|
+
this._error = debug(`${APP_NAME}:ERROR`);
|
|
24
|
+
}
|
|
37
25
|
|
|
38
26
|
/* eslint-disable no-console */
|
|
39
27
|
this._debug.log = console.info.bind(console);
|
|
40
|
-
this._info.log = console.info.bind(console);
|
|
41
28
|
this._warn.log = console.warn.bind(console);
|
|
42
29
|
this._error.log = console.error.bind(console);
|
|
43
30
|
/* eslint-enable no-console */
|
|
44
31
|
|
|
45
|
-
this
|
|
32
|
+
this.onLogMessage = (msg: any, ...meta: any[]) => {
|
|
46
33
|
if (typeof onLogMessage === 'function') {
|
|
47
34
|
onLogMessage(msg, ...meta);
|
|
48
35
|
}
|
|
@@ -51,30 +38,17 @@ class Logger {
|
|
|
51
38
|
|
|
52
39
|
debug(msg: any, ...meta: any[]): void {
|
|
53
40
|
this._debug(msg, ...meta);
|
|
54
|
-
|
|
55
|
-
this.#onLogMessage(msg, ...meta);
|
|
56
|
-
}
|
|
57
|
-
}
|
|
58
|
-
|
|
59
|
-
info(msg: any, ...meta: any[]): void {
|
|
60
|
-
this._debug(msg, ...meta);
|
|
61
|
-
if (this.#logLevel >= LogLevels.Info) {
|
|
62
|
-
this.#onLogMessage(msg, ...meta);
|
|
63
|
-
}
|
|
41
|
+
this.onLogMessage(msg, ...meta);
|
|
64
42
|
}
|
|
65
43
|
|
|
66
44
|
warn(msg: any, ...meta: any[]): void {
|
|
67
45
|
this._warn(msg, ...meta);
|
|
68
|
-
|
|
69
|
-
this.#onLogMessage(msg, ...meta);
|
|
70
|
-
}
|
|
46
|
+
this.onLogMessage(msg, ...meta);
|
|
71
47
|
}
|
|
72
48
|
|
|
73
49
|
error(msg: any, ...meta: any[]): void {
|
|
74
50
|
this._error(msg, ...meta);
|
|
75
|
-
|
|
76
|
-
this.#onLogMessage(msg, ...meta);
|
|
77
|
-
}
|
|
51
|
+
this.onLogMessage(msg, ...meta);
|
|
78
52
|
}
|
|
79
53
|
}
|
|
80
54
|
|
package/src/engine/Peer.ts
CHANGED
|
@@ -1,14 +1,14 @@
|
|
|
1
|
-
import { ConsumerOptions } from 'mediasoup-client/lib/Consumer';
|
|
2
1
|
import {
|
|
3
2
|
ConsumerScoreChangedPayload,
|
|
4
3
|
ProducerData,
|
|
5
4
|
ProducerScoreChangedPayload,
|
|
6
5
|
ConnectionQuality,
|
|
7
|
-
EndTrackPayload,
|
|
8
6
|
PayloadOfPublishedMedia,
|
|
9
7
|
PayloadOfUnpublishedMedia,
|
|
10
8
|
ChangePreferredLayersPayload,
|
|
11
9
|
Role,
|
|
10
|
+
ProducerSetMaxSpatialLayer,
|
|
11
|
+
RemoteConsumerOptions,
|
|
12
12
|
} from '../types/common';
|
|
13
13
|
import EnhancedEventEmitter from '../EnhancedEventEmitter';
|
|
14
14
|
import Engine from './index';
|
|
@@ -89,10 +89,7 @@ class Peer {
|
|
|
89
89
|
this.uid = uid;
|
|
90
90
|
this.role = role;
|
|
91
91
|
this.engine = engine;
|
|
92
|
-
this.logger = new Logger(
|
|
93
|
-
logLevel: engine.logLevel,
|
|
94
|
-
namespace: 'Peer',
|
|
95
|
-
});
|
|
92
|
+
this.logger = new Logger('Peer');
|
|
96
93
|
producers.forEach(this.handleNewProducer.bind(this));
|
|
97
94
|
this.handlePeerEvents();
|
|
98
95
|
}
|
|
@@ -147,23 +144,23 @@ class Peer {
|
|
|
147
144
|
channelId: this.engine.channelId,
|
|
148
145
|
},
|
|
149
146
|
producerPeerId: this.id,
|
|
150
|
-
}) as
|
|
147
|
+
}) as RemoteConsumerOptions;
|
|
151
148
|
|
|
152
149
|
const consumer = await transport.consume(remoteConsumer);
|
|
153
|
-
|
|
150
|
+
if (!remoteConsumer.producerPaused) {
|
|
151
|
+
await this.engine.network.socket.request(MEDIASOUP_EVENTS.resumeConsumer, { consumerId: consumer.id });
|
|
152
|
+
}
|
|
154
153
|
|
|
155
154
|
this.logger.debug(`Subscribed for ${producer.kind}`, { peer: this });
|
|
156
155
|
const track = new PeerTrack({
|
|
157
156
|
mediaStreamTrack: consumer.track,
|
|
158
157
|
label: producer.label,
|
|
159
|
-
consumer: new PeerConsumer(
|
|
160
|
-
consumer,
|
|
161
|
-
logLevel: this.engine.logLevel,
|
|
162
|
-
}),
|
|
158
|
+
consumer: new PeerConsumer(consumer),
|
|
163
159
|
engine: this.engine,
|
|
160
|
+
isPaused: remoteConsumer.producerPaused,
|
|
161
|
+
peerEventEmitter: this.observer,
|
|
164
162
|
});
|
|
165
163
|
this.tracks.set(track.label, track);
|
|
166
|
-
this.observer.safeEmit(PEER_EVENTS.trackStart, track);
|
|
167
164
|
} catch (error) {
|
|
168
165
|
this.logger.error('createConsumer()', producer, error);
|
|
169
166
|
throw new Error('Error subscribe media');
|
|
@@ -199,39 +196,32 @@ class Peer {
|
|
|
199
196
|
});
|
|
200
197
|
|
|
201
198
|
this.observer.on(MEDIASOUP_EVENTS.closeConsumer, (consumerId) => {
|
|
202
|
-
const
|
|
203
|
-
if (!
|
|
199
|
+
const track = this.getTrackByConsumerId(consumerId);
|
|
200
|
+
if (!track) {
|
|
204
201
|
return;
|
|
205
202
|
}
|
|
206
203
|
|
|
207
|
-
|
|
208
|
-
this.tracks.delete(
|
|
209
|
-
this.observer.safeEmit(PEER_EVENTS.trackEnd, {
|
|
210
|
-
producerId: consumer.producerId,
|
|
211
|
-
kind: consumer.kind,
|
|
212
|
-
label: consumer.appData.producerData.label,
|
|
213
|
-
} as EndTrackPayload);
|
|
204
|
+
track.close();
|
|
205
|
+
this.tracks.delete(track.label);
|
|
214
206
|
this.logger.debug('Peer video track was ended:', { peer: this });
|
|
215
207
|
});
|
|
216
208
|
|
|
217
|
-
this.observer.on(MEDIASOUP_EVENTS.pauseConsumer, (consumerId) => {
|
|
218
|
-
const
|
|
219
|
-
if (!
|
|
209
|
+
this.observer.on(MEDIASOUP_EVENTS.pauseConsumer, async (consumerId) => {
|
|
210
|
+
const track = this.getTrackByConsumerId(consumerId);
|
|
211
|
+
if (!track) {
|
|
220
212
|
return;
|
|
221
213
|
}
|
|
222
214
|
|
|
223
|
-
|
|
224
|
-
this.logger.debug('Peer video track was paused:', { peer: this });
|
|
215
|
+
await track.pause();
|
|
225
216
|
});
|
|
226
217
|
|
|
227
|
-
this.observer.on(MEDIASOUP_EVENTS.resumeConsumer, (consumerId) => {
|
|
228
|
-
const
|
|
229
|
-
if (!
|
|
218
|
+
this.observer.on(MEDIASOUP_EVENTS.resumeConsumer, async (consumerId) => {
|
|
219
|
+
const track = this.getTrackByConsumerId(consumerId);
|
|
220
|
+
if (!track) {
|
|
230
221
|
return;
|
|
231
222
|
}
|
|
232
223
|
|
|
233
|
-
|
|
234
|
-
this.logger.debug('Peer video track was paused:', { peer: this });
|
|
224
|
+
await track.resume();
|
|
235
225
|
});
|
|
236
226
|
|
|
237
227
|
// set outgoing connection quality for remote peer
|
|
@@ -333,6 +323,46 @@ class Peer {
|
|
|
333
323
|
this.logger.debug('consumerChangePreferredLayers()', { consumer, ...payload });
|
|
334
324
|
}
|
|
335
325
|
});
|
|
326
|
+
|
|
327
|
+
this.observer.on(MEDIASOUP_EVENTS.producerSetMaxSpatialLayer, async (payload: ProducerSetMaxSpatialLayer) => {
|
|
328
|
+
const { producerId, spatialLayer } = payload;
|
|
329
|
+
const consumer = this.getConsumerByProducerId(producerId);
|
|
330
|
+
if (!consumer) {
|
|
331
|
+
this.logger.debug('producerSetMaxSpatialLayer()', {
|
|
332
|
+
message: 'Consumer for producer not created, ignore MaxSpatialLayer change',
|
|
333
|
+
});
|
|
334
|
+
|
|
335
|
+
return;
|
|
336
|
+
}
|
|
337
|
+
|
|
338
|
+
consumer.setCurrentMaxSpatialLayer(spatialLayer);
|
|
339
|
+
this.logger.debug('producerSetMaxSpatialLayer()', {
|
|
340
|
+
producerId,
|
|
341
|
+
consumerId: consumer.id,
|
|
342
|
+
spatialLayer,
|
|
343
|
+
});
|
|
344
|
+
|
|
345
|
+
if (consumer.requestedSpatialLayer !== spatialLayer) {
|
|
346
|
+
this.logger.debug('producerSetMaxSpatialLayer()', {
|
|
347
|
+
message: 'No need to request new preferred layer',
|
|
348
|
+
currentMaxSpatialLayer: spatialLayer,
|
|
349
|
+
requestedMaxSpatialLayer: consumer.requestedSpatialLayer,
|
|
350
|
+
});
|
|
351
|
+
|
|
352
|
+
return;
|
|
353
|
+
}
|
|
354
|
+
|
|
355
|
+
await this.engine.network.socket.request(MEDIASOUP_EVENTS.consumerChangePreferredLayers, {
|
|
356
|
+
consumerId: consumer.id,
|
|
357
|
+
spatialLayer,
|
|
358
|
+
});
|
|
359
|
+
|
|
360
|
+
this.logger.debug('requestVideoPreferredLayers()', {
|
|
361
|
+
producerId,
|
|
362
|
+
consumerId: consumer.id,
|
|
363
|
+
spatialLayer,
|
|
364
|
+
});
|
|
365
|
+
});
|
|
336
366
|
}
|
|
337
367
|
|
|
338
368
|
private emitConnectionQuality(): void {
|
|
@@ -371,17 +401,17 @@ class Peer {
|
|
|
371
401
|
.filter((item): item is PeerConsumer => !!item);
|
|
372
402
|
}
|
|
373
403
|
|
|
374
|
-
|
|
375
|
-
return Array.from(this.producers.values());
|
|
376
|
-
}
|
|
377
|
-
|
|
378
|
-
public getConsumerByProducerId(producerId: string): PeerConsumer | undefined {
|
|
404
|
+
private getConsumerByProducerId(producerId: string): PeerConsumer | undefined {
|
|
379
405
|
return this.getAllConsumers().find((consumer) => consumer.producerId === producerId);
|
|
380
406
|
}
|
|
381
407
|
|
|
382
|
-
|
|
408
|
+
private getConsumerById(id: string): PeerConsumer | undefined {
|
|
383
409
|
return this.getAllConsumers().find((consumer) => consumer.id === id);
|
|
384
410
|
}
|
|
411
|
+
|
|
412
|
+
private getTrackByConsumerId(id: string): PeerTrack | undefined {
|
|
413
|
+
return Array.from(this.tracks.values()).find((track) => track.consumerId === id);
|
|
414
|
+
}
|
|
385
415
|
}
|
|
386
416
|
|
|
387
417
|
export default Peer;
|
|
@@ -1,14 +1,9 @@
|
|
|
1
1
|
import { parseScalabilityMode } from 'mediasoup-client';
|
|
2
2
|
import { MediaKind, RtpEncodingParameters } from 'mediasoup-client/lib/RtpParameters';
|
|
3
3
|
import { Consumer as MediasoupConsumer } from 'mediasoup-client/lib/types';
|
|
4
|
-
import { ConsumerData,
|
|
4
|
+
import { ConsumerData, SpatialLayerParams } from '../types/common';
|
|
5
5
|
import Logger from './Logger';
|
|
6
6
|
|
|
7
|
-
export type PeerConsumerConstructorParams = {
|
|
8
|
-
consumer: MediasoupConsumer,
|
|
9
|
-
logLevel: LogLevel,
|
|
10
|
-
};
|
|
11
|
-
|
|
12
7
|
class PeerConsumer {
|
|
13
8
|
public score = 10;
|
|
14
9
|
|
|
@@ -42,17 +37,13 @@ class PeerConsumer {
|
|
|
42
37
|
|
|
43
38
|
private readonly logger: Logger;
|
|
44
39
|
|
|
45
|
-
constructor(
|
|
46
|
-
const { logLevel, consumer } = params;
|
|
40
|
+
constructor(consumer: MediasoupConsumer) {
|
|
47
41
|
this.id = consumer.id;
|
|
48
42
|
this.kind = consumer.kind as MediaKind;
|
|
49
43
|
this.producerId = consumer.producerId;
|
|
50
44
|
this.appData = consumer.appData as ConsumerData;
|
|
51
45
|
this.consumer = consumer;
|
|
52
|
-
this.logger = new Logger(
|
|
53
|
-
logLevel,
|
|
54
|
-
namespace: 'PeerConsumer',
|
|
55
|
-
});
|
|
46
|
+
this.logger = new Logger('PeerConsumer');
|
|
56
47
|
this.currentMaxSpatialLayer = this.appData.producerData.maxSpatialLayer;
|
|
57
48
|
this.parseScalabilityMode();
|
|
58
49
|
this.setSpatialLayersParams();
|
|
@@ -10,10 +10,7 @@ class ChannelEventHandler {
|
|
|
10
10
|
|
|
11
11
|
constructor(engine: Engine) {
|
|
12
12
|
this.engine = engine;
|
|
13
|
-
this.logger = new Logger(
|
|
14
|
-
logLevel: engine.logLevel,
|
|
15
|
-
namespace: 'ChannelEvents',
|
|
16
|
-
});
|
|
13
|
+
this.logger = new Logger('ChannelEvents');
|
|
17
14
|
}
|
|
18
15
|
|
|
19
16
|
public subscribeToEvents(): void {
|
|
@@ -17,10 +17,7 @@ class MediaSoupEventHandler {
|
|
|
17
17
|
|
|
18
18
|
constructor(engine: Engine) {
|
|
19
19
|
this.engine = engine;
|
|
20
|
-
this.logger = new Logger(
|
|
21
|
-
logLevel: engine.logLevel,
|
|
22
|
-
namespace: 'MediasoupEvents',
|
|
23
|
-
});
|
|
20
|
+
this.logger = new Logger('MediasoupEvents');
|
|
24
21
|
}
|
|
25
22
|
|
|
26
23
|
public subscribeToEvents(): void {
|
|
@@ -156,39 +153,7 @@ class MediaSoupEventHandler {
|
|
|
156
153
|
return;
|
|
157
154
|
}
|
|
158
155
|
|
|
159
|
-
|
|
160
|
-
if (!consumer) {
|
|
161
|
-
this.logger.warn('producerSetMaxSpatialLayer()', { message: 'Consumer not found' });
|
|
162
|
-
return;
|
|
163
|
-
}
|
|
164
|
-
|
|
165
|
-
consumer.setCurrentMaxSpatialLayer(spatialLayer);
|
|
166
|
-
this.logger.debug('producerSetMaxSpatialLayer()', {
|
|
167
|
-
producerId,
|
|
168
|
-
consumerId: consumer.id,
|
|
169
|
-
spatialLayer,
|
|
170
|
-
});
|
|
171
|
-
|
|
172
|
-
if (consumer.requestedSpatialLayer !== spatialLayer) {
|
|
173
|
-
this.logger.debug('producerSetMaxSpatialLayer()', {
|
|
174
|
-
message: 'No need to request new preferred layer',
|
|
175
|
-
currentMaxSpatialLayer: spatialLayer,
|
|
176
|
-
requestedMaxSpatialLayer: consumer.requestedSpatialLayer,
|
|
177
|
-
});
|
|
178
|
-
|
|
179
|
-
return;
|
|
180
|
-
}
|
|
181
|
-
|
|
182
|
-
await this.engine.network.socket.request(MEDIASOUP_EVENTS.consumerChangePreferredLayers, {
|
|
183
|
-
consumerId: consumer.id,
|
|
184
|
-
spatialLayer,
|
|
185
|
-
});
|
|
186
|
-
|
|
187
|
-
this.logger.debug('requestVideoPreferredLayers()', {
|
|
188
|
-
producerId,
|
|
189
|
-
consumerId: consumer.id,
|
|
190
|
-
spatialLayer,
|
|
191
|
-
});
|
|
156
|
+
peer.observer.safeEmit(MEDIASOUP_EVENTS.producerSetMaxSpatialLayer, { peerId, producerId, spatialLayer });
|
|
192
157
|
});
|
|
193
158
|
}
|
|
194
159
|
}
|