@livedigital/client 2.11.0 → 2.12.0-add-onissue-callback.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/constants/common.d.ts +11 -0
- package/dist/engine/DefaultEngineDependenciesFactory.d.ts +3 -4
- package/dist/engine/Logger.d.ts +10 -3
- package/dist/engine/PeerConsumer.d.ts +6 -2
- package/dist/engine/index.d.ts +10 -4
- package/dist/engine/media/index.d.ts +2 -0
- package/dist/engine/media/tracks/BaseTrack.d.ts +6 -2
- package/dist/engine/network/Socket.d.ts +5 -2
- package/dist/engine/network/index.d.ts +2 -0
- package/dist/engine/system/index.d.ts +2 -4
- package/dist/engine/wid/types.d.ts +1 -1
- package/dist/helpers/retry.d.ts +2 -0
- package/dist/index.d.ts +4 -1
- package/dist/index.es.js +1 -1
- package/dist/index.js +2 -2
- package/dist/types/common.d.ts +1 -0
- package/dist/types/engine.d.ts +15 -5
- package/package.json +1 -1
- package/src/constants/common.ts +13 -0
- package/src/engine/DefaultEngineDependenciesFactory.ts +18 -13
- package/src/engine/Logger.ts +43 -17
- package/src/engine/Peer.ts +8 -2
- package/src/engine/PeerConsumer.ts +12 -3
- package/src/engine/handlers/ChannelEventHandler.ts +4 -1
- package/src/engine/handlers/MediaSoupEventHandler.ts +4 -1
- package/src/engine/index.ts +42 -8
- package/src/engine/media/index.ts +15 -3
- package/src/engine/media/tracks/BaseTrack.ts +13 -3
- package/src/engine/media/tracks/PeerTrack.ts +5 -1
- package/src/engine/network/Socket.ts +10 -3
- package/src/engine/network/index.ts +6 -2
- package/src/engine/system/index.ts +7 -7
- package/src/engine/wid/WebRTCIssueDetector.ts +2 -2
- package/src/engine/wid/types.ts +1 -1
- package/src/helpers/retry.ts +4 -2
- package/src/index.ts +14 -1
- package/src/types/common.ts +2 -0
- package/src/types/engine.ts +18 -5
package/dist/types/common.d.ts
CHANGED
package/dist/types/engine.d.ts
CHANGED
|
@@ -7,17 +7,27 @@ 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
|
|
10
|
+
import { IssueDetectorResult } from '../engine/wid/types';
|
|
11
|
+
import { LogLevel } from './common';
|
|
12
|
+
export declare type IssuesHandler = (issues: IssueDetectorResult) => void;
|
|
11
13
|
export interface CreateIssueDetectorParams {
|
|
12
|
-
|
|
14
|
+
onIssues?: IssuesHandler;
|
|
15
|
+
}
|
|
16
|
+
export interface CreateMediaParams {
|
|
17
|
+
engine: Engine;
|
|
13
18
|
}
|
|
14
19
|
export interface CreateNetworkParams {
|
|
20
|
+
logLevel: LogLevel;
|
|
15
21
|
loadbalancer: LoadBalancerApiClientParams;
|
|
16
22
|
}
|
|
23
|
+
export interface CreateSystemParams {
|
|
24
|
+
logLevel: LogLevel;
|
|
25
|
+
clientEventEmitter: EnhancedEventEmitter;
|
|
26
|
+
}
|
|
17
27
|
export interface EngineDependenciesFactory {
|
|
18
|
-
createSystem: (
|
|
19
|
-
createMedia: () => Media;
|
|
20
|
-
createNetwork: (
|
|
28
|
+
createSystem: (params: CreateSystemParams) => System;
|
|
29
|
+
createMedia: (params: CreateMediaParams) => Media;
|
|
30
|
+
createNetwork: (params: CreateNetworkParams) => Network;
|
|
21
31
|
createChannelEventHandler: (engine: Engine) => ChannelEventHandler;
|
|
22
32
|
createMediaSoupEventHandler: (engine: Engine) => MediaSoupEventHandler;
|
|
23
33
|
createIssueDetector: (params: CreateIssueDetectorParams) => WebRTCIssueDetector;
|
package/package.json
CHANGED
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { LogLevel } from '../types/common';
|
|
2
|
+
|
|
3
|
+
export const LOG_LEVEL_ERROR: LogLevel = 3;
|
|
4
|
+
export const LOG_LEVEL_WARN: LogLevel = 4;
|
|
5
|
+
export const LOG_LEVEL_INFO: LogLevel = 6;
|
|
6
|
+
export const LOG_LEVEL_DEBUG: LogLevel = 7;
|
|
7
|
+
|
|
8
|
+
export const LogLevels = {
|
|
9
|
+
Error: LOG_LEVEL_ERROR,
|
|
10
|
+
Warn: LOG_LEVEL_WARN,
|
|
11
|
+
Info: LOG_LEVEL_INFO,
|
|
12
|
+
Debug: LOG_LEVEL_DEBUG,
|
|
13
|
+
};
|
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
import EnhancedEventEmitter from '../EnhancedEventEmitter';
|
|
2
1
|
import Network from './network';
|
|
3
2
|
import System from './system';
|
|
4
3
|
import Media from './media';
|
|
@@ -6,25 +5,35 @@ import ChannelEventHandler from './handlers/ChannelEventHandler';
|
|
|
6
5
|
import Engine from './index';
|
|
7
6
|
import MediaSoupEventHandler from './handlers/MediaSoupEventHandler';
|
|
8
7
|
import WebRTCIssueDetector from './wid/WebRTCIssueDetector';
|
|
9
|
-
import {
|
|
8
|
+
import {
|
|
9
|
+
CreateIssueDetectorParams,
|
|
10
|
+
CreateMediaParams,
|
|
11
|
+
CreateNetworkParams,
|
|
12
|
+
CreateSystemParams,
|
|
13
|
+
EngineDependenciesFactory,
|
|
14
|
+
} from '../types/engine';
|
|
10
15
|
import SocketIO from './network/Socket';
|
|
11
16
|
import LoadBalancerApiClient from './network/LoadBalancerClient';
|
|
12
17
|
|
|
13
18
|
/* eslint-disable class-methods-use-this */
|
|
14
19
|
class DefaultEngineDependenciesFactory implements EngineDependenciesFactory {
|
|
15
|
-
createSystem(
|
|
16
|
-
return new System(
|
|
20
|
+
createSystem(params: CreateSystemParams): System {
|
|
21
|
+
return new System(params);
|
|
17
22
|
}
|
|
18
23
|
|
|
19
|
-
createMedia(): Media {
|
|
20
|
-
return new Media();
|
|
24
|
+
createMedia(params: CreateMediaParams): Media {
|
|
25
|
+
return new Media(params);
|
|
21
26
|
}
|
|
22
27
|
|
|
23
28
|
createNetwork(params: CreateNetworkParams): Network {
|
|
24
|
-
const { loadbalancer } = params;
|
|
25
|
-
const socketClient = new SocketIO(
|
|
29
|
+
const { loadbalancer, logLevel } = params;
|
|
30
|
+
const socketClient = new SocketIO({
|
|
31
|
+
logLevel,
|
|
32
|
+
});
|
|
33
|
+
|
|
26
34
|
const loadBalancerApiClient = new LoadBalancerApiClient(loadbalancer);
|
|
27
35
|
return new Network({
|
|
36
|
+
logLevel,
|
|
28
37
|
socketClient,
|
|
29
38
|
loadBalancerApiClient,
|
|
30
39
|
});
|
|
@@ -40,11 +49,7 @@ class DefaultEngineDependenciesFactory implements EngineDependenciesFactory {
|
|
|
40
49
|
|
|
41
50
|
createIssueDetector(params: CreateIssueDetectorParams): WebRTCIssueDetector {
|
|
42
51
|
return new WebRTCIssueDetector({
|
|
43
|
-
|
|
44
|
-
issues.forEach((issue) => {
|
|
45
|
-
params.logger.warn('webRtcIssueDetector', issue);
|
|
46
|
-
});
|
|
47
|
-
},
|
|
52
|
+
onIssues: params.onIssues,
|
|
48
53
|
});
|
|
49
54
|
}
|
|
50
55
|
}
|
package/src/engine/Logger.ts
CHANGED
|
@@ -1,35 +1,48 @@
|
|
|
1
1
|
import debug from 'debug';
|
|
2
|
-
import {
|
|
2
|
+
import { LogLevels } from '../constants/common';
|
|
3
|
+
import { LogLevel, LogMessageHandler } from '../types/common';
|
|
3
4
|
|
|
4
5
|
const APP_NAME = 'LiveDigital';
|
|
5
6
|
|
|
7
|
+
export type LoggerConstructorParams = {
|
|
8
|
+
namespace: string,
|
|
9
|
+
logLevel: LogLevel,
|
|
10
|
+
onLogMessage?: LogMessageHandler,
|
|
11
|
+
};
|
|
12
|
+
|
|
6
13
|
class Logger {
|
|
7
14
|
private readonly _debug: debug.Debugger;
|
|
8
15
|
|
|
16
|
+
private readonly _info: debug.Debugger;
|
|
17
|
+
|
|
9
18
|
private readonly _warn: debug.Debugger;
|
|
10
19
|
|
|
11
20
|
private readonly _error: debug.Debugger;
|
|
12
21
|
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
}
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
22
|
+
#namespace: string;
|
|
23
|
+
|
|
24
|
+
#logLevel: LogLevel;
|
|
25
|
+
|
|
26
|
+
#onLogMessage: LogMessageHandler;
|
|
27
|
+
|
|
28
|
+
constructor(params: LoggerConstructorParams) {
|
|
29
|
+
const { logLevel, namespace, onLogMessage } = params;
|
|
30
|
+
this.#namespace = namespace;
|
|
31
|
+
this.#logLevel = logLevel;
|
|
32
|
+
|
|
33
|
+
this._debug = debug(APP_NAME).extend('debug').extend(this.#namespace);
|
|
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);
|
|
25
37
|
|
|
26
38
|
/* eslint-disable no-console */
|
|
27
39
|
this._debug.log = console.info.bind(console);
|
|
40
|
+
this._info.log = console.info.bind(console);
|
|
28
41
|
this._warn.log = console.warn.bind(console);
|
|
29
42
|
this._error.log = console.error.bind(console);
|
|
30
43
|
/* eslint-enable no-console */
|
|
31
44
|
|
|
32
|
-
this
|
|
45
|
+
this.#onLogMessage = (msg: any, ...meta: any[]) => {
|
|
33
46
|
if (typeof onLogMessage === 'function') {
|
|
34
47
|
onLogMessage(msg, ...meta);
|
|
35
48
|
}
|
|
@@ -38,17 +51,30 @@ class Logger {
|
|
|
38
51
|
|
|
39
52
|
debug(msg: any, ...meta: any[]): void {
|
|
40
53
|
this._debug(msg, ...meta);
|
|
41
|
-
this.
|
|
54
|
+
if (this.#logLevel >= LogLevels.Debug) {
|
|
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
|
+
}
|
|
42
64
|
}
|
|
43
65
|
|
|
44
66
|
warn(msg: any, ...meta: any[]): void {
|
|
45
67
|
this._warn(msg, ...meta);
|
|
46
|
-
this.
|
|
68
|
+
if (this.#logLevel >= LogLevels.Warn) {
|
|
69
|
+
this.#onLogMessage(msg, ...meta);
|
|
70
|
+
}
|
|
47
71
|
}
|
|
48
72
|
|
|
49
73
|
error(msg: any, ...meta: any[]): void {
|
|
50
74
|
this._error(msg, ...meta);
|
|
51
|
-
this.
|
|
75
|
+
if (this.#logLevel >= LogLevels.Error) {
|
|
76
|
+
this.#onLogMessage(msg, ...meta);
|
|
77
|
+
}
|
|
52
78
|
}
|
|
53
79
|
}
|
|
54
80
|
|
package/src/engine/Peer.ts
CHANGED
|
@@ -89,7 +89,10 @@ class Peer {
|
|
|
89
89
|
this.uid = uid;
|
|
90
90
|
this.role = role;
|
|
91
91
|
this.engine = engine;
|
|
92
|
-
this.logger = new Logger(
|
|
92
|
+
this.logger = new Logger({
|
|
93
|
+
logLevel: engine.logLevel,
|
|
94
|
+
namespace: 'Peer',
|
|
95
|
+
});
|
|
93
96
|
producers.forEach(this.handleNewProducer.bind(this));
|
|
94
97
|
this.handlePeerEvents();
|
|
95
98
|
}
|
|
@@ -153,7 +156,10 @@ class Peer {
|
|
|
153
156
|
const track = new PeerTrack({
|
|
154
157
|
mediaStreamTrack: consumer.track,
|
|
155
158
|
label: producer.label,
|
|
156
|
-
consumer: new PeerConsumer(
|
|
159
|
+
consumer: new PeerConsumer({
|
|
160
|
+
consumer,
|
|
161
|
+
logLevel: this.engine.logLevel,
|
|
162
|
+
}),
|
|
157
163
|
engine: this.engine,
|
|
158
164
|
});
|
|
159
165
|
this.tracks.set(track.label, track);
|
|
@@ -1,9 +1,14 @@
|
|
|
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, SpatialLayerParams } from '../types/common';
|
|
4
|
+
import { ConsumerData, LogLevel, SpatialLayerParams } from '../types/common';
|
|
5
5
|
import Logger from './Logger';
|
|
6
6
|
|
|
7
|
+
export type PeerConsumerConstructorParams = {
|
|
8
|
+
consumer: MediasoupConsumer,
|
|
9
|
+
logLevel: LogLevel,
|
|
10
|
+
};
|
|
11
|
+
|
|
7
12
|
class PeerConsumer {
|
|
8
13
|
public score = 10;
|
|
9
14
|
|
|
@@ -37,13 +42,17 @@ class PeerConsumer {
|
|
|
37
42
|
|
|
38
43
|
private readonly logger: Logger;
|
|
39
44
|
|
|
40
|
-
constructor(
|
|
45
|
+
constructor(params: PeerConsumerConstructorParams) {
|
|
46
|
+
const { logLevel, consumer } = params;
|
|
41
47
|
this.id = consumer.id;
|
|
42
48
|
this.kind = consumer.kind as MediaKind;
|
|
43
49
|
this.producerId = consumer.producerId;
|
|
44
50
|
this.appData = consumer.appData as ConsumerData;
|
|
45
51
|
this.consumer = consumer;
|
|
46
|
-
this.logger = new Logger(
|
|
52
|
+
this.logger = new Logger({
|
|
53
|
+
logLevel,
|
|
54
|
+
namespace: 'PeerConsumer',
|
|
55
|
+
});
|
|
47
56
|
this.currentMaxSpatialLayer = this.appData.producerData.maxSpatialLayer;
|
|
48
57
|
this.parseScalabilityMode();
|
|
49
58
|
this.setSpatialLayersParams();
|
|
@@ -10,7 +10,10 @@ class ChannelEventHandler {
|
|
|
10
10
|
|
|
11
11
|
constructor(engine: Engine) {
|
|
12
12
|
this.engine = engine;
|
|
13
|
-
this.logger = new Logger(
|
|
13
|
+
this.logger = new Logger({
|
|
14
|
+
logLevel: engine.logLevel,
|
|
15
|
+
namespace: 'ChannelEvents',
|
|
16
|
+
});
|
|
14
17
|
}
|
|
15
18
|
|
|
16
19
|
public subscribeToEvents(): void {
|
|
@@ -17,7 +17,10 @@ class MediaSoupEventHandler {
|
|
|
17
17
|
|
|
18
18
|
constructor(engine: Engine) {
|
|
19
19
|
this.engine = engine;
|
|
20
|
-
this.logger = new Logger(
|
|
20
|
+
this.logger = new Logger({
|
|
21
|
+
logLevel: engine.logLevel,
|
|
22
|
+
namespace: 'MediasoupEvents',
|
|
23
|
+
});
|
|
21
24
|
}
|
|
22
25
|
|
|
23
26
|
public subscribeToEvents(): void {
|
package/src/engine/index.ts
CHANGED
|
@@ -11,6 +11,7 @@ import {
|
|
|
11
11
|
Track,
|
|
12
12
|
TrackLabel,
|
|
13
13
|
LogMessageHandler,
|
|
14
|
+
LogLevel,
|
|
14
15
|
} from '../types/common';
|
|
15
16
|
import EnhancedEventEmitter from '../EnhancedEventEmitter';
|
|
16
17
|
import System from './system';
|
|
@@ -29,13 +30,19 @@ import AudioTrack from './media/tracks/AudioTrack';
|
|
|
29
30
|
import PeerTrack from './media/tracks/PeerTrack';
|
|
30
31
|
import WebRTCIssueDetector from './wid/WebRTCIssueDetector';
|
|
31
32
|
import { retryAsync } from '../helpers/retry';
|
|
32
|
-
import {
|
|
33
|
+
import { EngineDependenciesFactory, IssuesHandler } from '../types/engine';
|
|
34
|
+
import { LogLevels } from '../constants/common';
|
|
35
|
+
import { LoadBalancerApiClientParams } from './network/LoadBalancerClient';
|
|
33
36
|
|
|
34
37
|
type EngineParams = {
|
|
35
38
|
clientEventEmitter: EnhancedEventEmitter,
|
|
36
|
-
network:
|
|
37
|
-
|
|
39
|
+
network: {
|
|
40
|
+
loadbalancer: LoadBalancerApiClientParams;
|
|
41
|
+
},
|
|
38
42
|
dependenciesFactory: EngineDependenciesFactory;
|
|
43
|
+
logLevel?: LogLevel;
|
|
44
|
+
onLogMessage?: LogMessageHandler;
|
|
45
|
+
onIssues?: IssuesHandler;
|
|
39
46
|
};
|
|
40
47
|
|
|
41
48
|
class Engine {
|
|
@@ -47,6 +54,8 @@ class Engine {
|
|
|
47
54
|
|
|
48
55
|
public clientEventEmitter: EnhancedEventEmitter;
|
|
49
56
|
|
|
57
|
+
public logLevel: LogLevel;
|
|
58
|
+
|
|
50
59
|
private readonly peersRepository: Map<string, Peer>;
|
|
51
60
|
|
|
52
61
|
private channelEventsHandler: ChannelEventHandler;
|
|
@@ -72,16 +81,33 @@ class Engine {
|
|
|
72
81
|
clientEventEmitter,
|
|
73
82
|
network,
|
|
74
83
|
dependenciesFactory,
|
|
84
|
+
logLevel,
|
|
75
85
|
} = params;
|
|
76
|
-
this.
|
|
77
|
-
this.
|
|
78
|
-
|
|
86
|
+
this.logLevel = logLevel || LogLevels.Error;
|
|
87
|
+
this.system = dependenciesFactory.createSystem({
|
|
88
|
+
logLevel: this.logLevel,
|
|
89
|
+
clientEventEmitter,
|
|
90
|
+
});
|
|
91
|
+
this.media = dependenciesFactory.createMedia({
|
|
92
|
+
engine: this,
|
|
93
|
+
});
|
|
94
|
+
this.network = dependenciesFactory.createNetwork({
|
|
95
|
+
logLevel: this.logLevel,
|
|
96
|
+
loadbalancer: network.loadbalancer,
|
|
97
|
+
});
|
|
79
98
|
this.peersRepository = new Map<string, Peer>();
|
|
80
99
|
this.clientEventEmitter = clientEventEmitter;
|
|
81
100
|
this.channelEventsHandler = dependenciesFactory.createChannelEventHandler(this);
|
|
82
101
|
this.mediaSoupEventsHandler = dependenciesFactory.createMediaSoupEventHandler(this);
|
|
83
|
-
this.logger = new Logger(
|
|
84
|
-
|
|
102
|
+
this.logger = new Logger({
|
|
103
|
+
logLevel: this.logLevel,
|
|
104
|
+
namespace: 'Engine',
|
|
105
|
+
onLogMessage: params.onLogMessage,
|
|
106
|
+
});
|
|
107
|
+
|
|
108
|
+
this.webRtcIssueDetector = dependenciesFactory.createIssueDetector({
|
|
109
|
+
onIssues: params.onIssues,
|
|
110
|
+
});
|
|
85
111
|
|
|
86
112
|
this.watchSocketState();
|
|
87
113
|
}
|
|
@@ -444,6 +470,10 @@ class Engine {
|
|
|
444
470
|
minBackoffDelayMs: 150,
|
|
445
471
|
maxBackoffDelayMs: 5_000,
|
|
446
472
|
actionName: 'connectToSocketServer',
|
|
473
|
+
logger: new Logger({
|
|
474
|
+
namespace: 'RetrySocketConnect',
|
|
475
|
+
logLevel: this.logLevel,
|
|
476
|
+
}),
|
|
447
477
|
});
|
|
448
478
|
}
|
|
449
479
|
|
|
@@ -523,6 +553,10 @@ class Engine {
|
|
|
523
553
|
maxRetries: 3,
|
|
524
554
|
minBackoffDelayMs: 300,
|
|
525
555
|
actionName: 'sendJoinChannelRequest',
|
|
556
|
+
logger: new Logger({
|
|
557
|
+
namespace: 'RetryJoin',
|
|
558
|
+
logLevel: this.logLevel,
|
|
559
|
+
}),
|
|
526
560
|
});
|
|
527
561
|
}
|
|
528
562
|
|
|
@@ -6,6 +6,8 @@ import { CreateScreenVideoTrackOptions, CreateVideoTrackParams, Track } from '..
|
|
|
6
6
|
import Logger from '../Logger';
|
|
7
7
|
import { VIDEO_CONSTRAINS } from '../../constants/videoConstrains';
|
|
8
8
|
import { SCREEN_SHARING_SIMULCAST_ENCODINGS, WEBCAM_SIMULCAST_ENCODINGS } from '../../constants/simulcastEncodings';
|
|
9
|
+
import { CreateMediaParams } from '../../types/engine';
|
|
10
|
+
import Engine from '../index';
|
|
9
11
|
|
|
10
12
|
class Media {
|
|
11
13
|
public isDeviceLoaded = false;
|
|
@@ -14,7 +16,17 @@ class Media {
|
|
|
14
16
|
|
|
15
17
|
private tracks: Map<string, Track> = new Map();
|
|
16
18
|
|
|
17
|
-
#logger
|
|
19
|
+
#logger: Logger;
|
|
20
|
+
|
|
21
|
+
#engine: Engine;
|
|
22
|
+
|
|
23
|
+
constructor(params: CreateMediaParams) {
|
|
24
|
+
this.#engine = params.engine;
|
|
25
|
+
this.#logger = new Logger({
|
|
26
|
+
namespace: 'Media',
|
|
27
|
+
logLevel: params.engine.logLevel,
|
|
28
|
+
});
|
|
29
|
+
}
|
|
18
30
|
|
|
19
31
|
get mediasoupDevice(): Device {
|
|
20
32
|
if (!this.device) {
|
|
@@ -50,8 +62,8 @@ class Media {
|
|
|
50
62
|
const mediaStreamTracks = stream.getTracks();
|
|
51
63
|
return mediaStreamTracks.map((mediaStreamTrack) => {
|
|
52
64
|
const track = mediaStreamTrack.kind === 'audio'
|
|
53
|
-
? new AudioTrack(mediaStreamTrack)
|
|
54
|
-
: new VideoTrack(mediaStreamTrack);
|
|
65
|
+
? new AudioTrack({ mediaStreamTrack, logLevel: this.#engine.logLevel })
|
|
66
|
+
: new VideoTrack({ mediaStreamTrack, logLevel: this.#engine.logLevel });
|
|
55
67
|
|
|
56
68
|
this.tracks.set(track.id, track);
|
|
57
69
|
this.#logger.debug('createTrack() track created', {
|
|
@@ -1,8 +1,13 @@
|
|
|
1
1
|
import { Producer } from 'mediasoup-client/lib/Producer';
|
|
2
2
|
import { MediaKind } from 'mediasoup-client/lib/RtpParameters';
|
|
3
|
-
import { EncoderConfig, TrackLabel } from '../../../types/common';
|
|
3
|
+
import { EncoderConfig, LogLevel, TrackLabel } from '../../../types/common';
|
|
4
4
|
import Logger from '../../Logger';
|
|
5
5
|
|
|
6
|
+
export type BaseTrackConstructorParams = {
|
|
7
|
+
mediaStreamTrack: MediaStreamTrack,
|
|
8
|
+
logLevel: LogLevel,
|
|
9
|
+
};
|
|
10
|
+
|
|
6
11
|
class BaseTrack {
|
|
7
12
|
readonly #mediaStreamTrack: MediaStreamTrack;
|
|
8
13
|
|
|
@@ -12,10 +17,15 @@ class BaseTrack {
|
|
|
12
17
|
|
|
13
18
|
private label: TrackLabel = TrackLabel.Unknown;
|
|
14
19
|
|
|
15
|
-
protected logger
|
|
20
|
+
protected logger: Logger;
|
|
16
21
|
|
|
17
|
-
constructor(
|
|
22
|
+
constructor(params: BaseTrackConstructorParams) {
|
|
23
|
+
const { mediaStreamTrack, logLevel } = params;
|
|
18
24
|
this.#mediaStreamTrack = mediaStreamTrack;
|
|
25
|
+
this.logger = new Logger({
|
|
26
|
+
namespace: 'Track',
|
|
27
|
+
logLevel,
|
|
28
|
+
});
|
|
19
29
|
}
|
|
20
30
|
|
|
21
31
|
get mediaStreamTrack(): MediaStreamTrack {
|
|
@@ -24,13 +24,17 @@ class PeerTrack {
|
|
|
24
24
|
|
|
25
25
|
readonly #engine: Engine;
|
|
26
26
|
|
|
27
|
-
readonly #logger
|
|
27
|
+
readonly #logger: Logger;
|
|
28
28
|
|
|
29
29
|
constructor(payload: PeerTrackConstructor) {
|
|
30
30
|
this.mediaStreamTrack = payload.mediaStreamTrack;
|
|
31
31
|
this.label = payload.label;
|
|
32
32
|
this.consumer = payload.consumer;
|
|
33
33
|
this.#engine = payload.engine;
|
|
34
|
+
this.#logger = new Logger({
|
|
35
|
+
logLevel: payload.engine.logLevel,
|
|
36
|
+
namespace: 'PeerTrack',
|
|
37
|
+
});
|
|
34
38
|
}
|
|
35
39
|
|
|
36
40
|
get consumerId(): string | undefined {
|
|
@@ -1,9 +1,13 @@
|
|
|
1
1
|
import { io, Socket } from 'socket.io-client';
|
|
2
2
|
import EnhancedEventEmitter from '../../EnhancedEventEmitter';
|
|
3
3
|
import { SocketIOEvents } from '../../constants/events';
|
|
4
|
-
import { SocketResponse } from '../../types/common';
|
|
4
|
+
import { LogLevel, SocketResponse } from '../../types/common';
|
|
5
5
|
import Logger from '../Logger';
|
|
6
6
|
|
|
7
|
+
export type SocketIOConstructorParams = {
|
|
8
|
+
logLevel: LogLevel,
|
|
9
|
+
};
|
|
10
|
+
|
|
7
11
|
class SocketIO {
|
|
8
12
|
public connection?: Socket;
|
|
9
13
|
|
|
@@ -29,8 +33,11 @@ class SocketIO {
|
|
|
29
33
|
'transport error': 'transport.error',
|
|
30
34
|
};
|
|
31
35
|
|
|
32
|
-
constructor() {
|
|
33
|
-
this.logger = new Logger(
|
|
36
|
+
constructor(params: SocketIOConstructorParams) {
|
|
37
|
+
this.logger = new Logger({
|
|
38
|
+
namespace: 'Socket',
|
|
39
|
+
logLevel: params.logLevel,
|
|
40
|
+
});
|
|
34
41
|
}
|
|
35
42
|
|
|
36
43
|
get observer(): EnhancedEventEmitter {
|
|
@@ -6,13 +6,14 @@ import {
|
|
|
6
6
|
} from 'mediasoup-client/lib/Transport';
|
|
7
7
|
import { Device } from 'mediasoup-client';
|
|
8
8
|
import SocketIO from './Socket';
|
|
9
|
-
import { ProduceParams } from '../../types/common';
|
|
9
|
+
import { LogLevel, ProduceParams } from '../../types/common';
|
|
10
10
|
import LoadBalancerApiClient from './LoadBalancerClient';
|
|
11
11
|
import { MEDIASOUP_EVENTS, MEDIASOUP_TRANSPORT_EVENTS } from '../../constants/events';
|
|
12
12
|
import Logger from '../Logger';
|
|
13
13
|
|
|
14
14
|
export type NetworkParams = {
|
|
15
15
|
socketClient: SocketIO;
|
|
16
|
+
logLevel: LogLevel,
|
|
16
17
|
loadBalancerApiClient: LoadBalancerApiClient;
|
|
17
18
|
};
|
|
18
19
|
|
|
@@ -31,7 +32,10 @@ class Network {
|
|
|
31
32
|
const { socketClient, loadBalancerApiClient } = params;
|
|
32
33
|
this.socket = socketClient;
|
|
33
34
|
this.loadBalancerClient = loadBalancerApiClient;
|
|
34
|
-
this.logger = new Logger(
|
|
35
|
+
this.logger = new Logger({
|
|
36
|
+
namespace: 'Network',
|
|
37
|
+
logLevel: params.logLevel,
|
|
38
|
+
});
|
|
35
39
|
}
|
|
36
40
|
|
|
37
41
|
async closeRemoteProducer(producerId: string): Promise<void> {
|
|
@@ -1,12 +1,9 @@
|
|
|
1
|
+
import { CreateSystemParams } from '../../types/engine';
|
|
1
2
|
import { CLIENT_EVENTS } from '../../constants/events';
|
|
2
3
|
import EnhancedEventEmitter from '../../EnhancedEventEmitter';
|
|
3
4
|
import { AvailableMediaDevices } from '../../types/common';
|
|
4
5
|
import Logger from '../Logger';
|
|
5
6
|
|
|
6
|
-
type SystemParams = {
|
|
7
|
-
clientEventEmitter: EnhancedEventEmitter,
|
|
8
|
-
};
|
|
9
|
-
|
|
10
7
|
class System {
|
|
11
8
|
public isEnableVideoDevicesLock = false;
|
|
12
9
|
|
|
@@ -24,10 +21,13 @@ class System {
|
|
|
24
21
|
|
|
25
22
|
private readonly logger: Logger;
|
|
26
23
|
|
|
27
|
-
constructor(params:
|
|
28
|
-
const { clientEventEmitter } = params;
|
|
24
|
+
constructor(params: CreateSystemParams) {
|
|
25
|
+
const { clientEventEmitter, logLevel } = params;
|
|
29
26
|
this.clientEventEmitter = clientEventEmitter;
|
|
30
|
-
this.logger = new Logger(
|
|
27
|
+
this.logger = new Logger({
|
|
28
|
+
namespace: 'System',
|
|
29
|
+
logLevel,
|
|
30
|
+
});
|
|
31
31
|
this.listenDevices();
|
|
32
32
|
}
|
|
33
33
|
|
|
@@ -28,8 +28,8 @@ class WebRTCIssueDetector {
|
|
|
28
28
|
#running = false;
|
|
29
29
|
|
|
30
30
|
constructor(params: WebRTCIssueDetectorConstructorParams) {
|
|
31
|
-
if (params.
|
|
32
|
-
this.eventEmitter.on(EventType.Issue, params.
|
|
31
|
+
if (params.onIssues) {
|
|
32
|
+
this.eventEmitter.on(EventType.Issue, params.onIssues);
|
|
33
33
|
}
|
|
34
34
|
|
|
35
35
|
// Move instantiation from the constructor
|
package/src/engine/wid/types.ts
CHANGED
|
@@ -19,7 +19,7 @@ export enum EventType {
|
|
|
19
19
|
export type EventPayload = IssueDetectorResult;
|
|
20
20
|
|
|
21
21
|
export type WebRTCIssueDetectorConstructorParams = {
|
|
22
|
-
|
|
22
|
+
onIssues?: (payload: IssueDetectorResult) => void,
|
|
23
23
|
};
|
|
24
24
|
|
|
25
25
|
export enum IssueType {
|
package/src/helpers/retry.ts
CHANGED
|
@@ -6,9 +6,9 @@ export type RetryOpts = {
|
|
|
6
6
|
minBackoffDelayMs?: number;
|
|
7
7
|
maxBackoffDelayMs?: number;
|
|
8
8
|
actionName?: string; // human-readable action name for debug purposes
|
|
9
|
+
logger?: Logger;
|
|
9
10
|
};
|
|
10
11
|
|
|
11
|
-
const logger = new Logger('Retry');
|
|
12
12
|
const timeProvider = new DefaultTimeProvider();
|
|
13
13
|
|
|
14
14
|
const retryAsync = async <ReturnType>(
|
|
@@ -28,7 +28,9 @@ const retryAsync = async <ReturnType>(
|
|
|
28
28
|
return await action();
|
|
29
29
|
} catch (err: unknown) {
|
|
30
30
|
lastError = err;
|
|
31
|
-
|
|
31
|
+
if (opts.logger) {
|
|
32
|
+
opts.logger.info('Action retry failed', currentAttempt, opts.actionName, err);
|
|
33
|
+
}
|
|
32
34
|
|
|
33
35
|
if (currentAttempt < maxRetries) {
|
|
34
36
|
const delay = 2 ** (currentAttempt - 1) * minBackoffDelayMs;
|