@livedigital/client 2.26.0-stop-streams.2 → 2.26.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/DefaultEngineDependenciesFactory.d.ts +1 -1
- package/dist/engine/index.d.ts +0 -1
- package/dist/engine/media/tracks/BaseTrack.d.ts +0 -3
- package/dist/index.es.js +1 -1
- package/dist/index.js +2 -2
- package/dist/types/common.d.ts +0 -4
- package/dist/types/engine.d.ts +1 -2
- package/package.json +3 -2
- package/src/engine/DefaultEngineDependenciesFactory.ts +15 -14
- package/src/engine/index.ts +19 -22
- package/src/engine/media/index.ts +9 -16
- package/src/engine/media/tracks/BaseTrack.ts +5 -22
- package/src/types/common.ts +0 -5
- package/src/types/engine.ts +1 -2
- package/dist/engine/media/tracks/MediaStreamTrackManager.d.ts +0 -14
- package/dist/engine/wid/WebRTCIssueDetector.d.ts +0 -20
- package/dist/engine/wid/WebRTCIssueEmitter.d.ts +0 -11
- package/dist/engine/wid/detectors/AvailableOutgoingBitrateIssueDetector.d.ts +0 -6
- package/dist/engine/wid/detectors/FramesDroppedIssueDetector.d.ts +0 -7
- package/dist/engine/wid/detectors/FramesEncodedSentIssueDetector.d.ts +0 -7
- package/dist/engine/wid/detectors/InboundNetworkIssueDetector.d.ts +0 -7
- package/dist/engine/wid/detectors/NetworkMediaSyncIssueDetector.d.ts +0 -7
- package/dist/engine/wid/detectors/OutboundNetworkIssueDetector.d.ts +0 -7
- package/dist/engine/wid/detectors/QualityLimitationsIssueDetector.d.ts +0 -7
- package/dist/engine/wid/detectors/VideoCodecMismatchDetector.d.ts +0 -10
- package/dist/engine/wid/lib/NetworkScoresCalculator.d.ts +0 -9
- package/dist/engine/wid/lib/PeriodicWebRTCStatsReporter.d.ts +0 -20
- package/dist/engine/wid/lib/parser/CompositeRTCStatsParser.d.ts +0 -22
- package/dist/engine/wid/lib/parser/RTCStatsParser.d.ts +0 -20
- package/dist/engine/wid/lib/parser/utils.d.ts +0 -7
- package/dist/engine/wid/types.d.ts +0 -381
- package/src/engine/media/tracks/MediaStreamTrackManager.ts +0 -46
- package/src/engine/wid/WebRTCIssueDetector.ts +0 -136
- package/src/engine/wid/WebRTCIssueEmitter.ts +0 -16
- package/src/engine/wid/detectors/AvailableOutgoingBitrateIssueDetector.ts +0 -57
- package/src/engine/wid/detectors/FramesDroppedIssueDetector.ts +0 -65
- package/src/engine/wid/detectors/FramesEncodedSentIssueDetector.ts +0 -69
- package/src/engine/wid/detectors/InboundNetworkIssueDetector.ts +0 -120
- package/src/engine/wid/detectors/NetworkMediaSyncIssueDetector.ts +0 -60
- package/src/engine/wid/detectors/OutboundNetworkIssueDetector.ts +0 -96
- package/src/engine/wid/detectors/QualityLimitationsIssueDetector.ts +0 -63
- package/src/engine/wid/detectors/VideoCodecMismatchDetector.ts +0 -78
- package/src/engine/wid/lib/NetworkScoresCalculator.ts +0 -126
- package/src/engine/wid/lib/PeriodicWebRTCStatsReporter.ts +0 -66
- package/src/engine/wid/lib/parser/CompositeRTCStatsParser.ts +0 -82
- package/src/engine/wid/lib/parser/RTCStatsParser.ts +0 -274
- package/src/engine/wid/lib/parser/utils.ts +0 -40
- package/src/engine/wid/types.ts +0 -408
package/dist/types/common.d.ts
CHANGED
|
@@ -304,10 +304,6 @@ export declare type UpdatePeerAppDataPayload = {
|
|
|
304
304
|
peerId: string;
|
|
305
305
|
appData: Record<string, unknown>;
|
|
306
306
|
};
|
|
307
|
-
export declare type CreateTracksPayload = {
|
|
308
|
-
mediaStreamTracks: MediaStreamTrack[];
|
|
309
|
-
constraints: MediaStreamConstraints;
|
|
310
|
-
};
|
|
311
307
|
export declare type TrackPublishParams = {
|
|
312
308
|
keyFrameRequestDelay?: number;
|
|
313
309
|
};
|
package/dist/types/engine.d.ts
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import WebRTCIssueDetector, { IssueDetectorResult, NetworkScores } from 'webrtc-issue-detector';
|
|
1
2
|
import EnhancedEventEmitter from '../EnhancedEventEmitter';
|
|
2
3
|
import System from '../engine/system';
|
|
3
4
|
import Media from '../engine/media';
|
|
@@ -5,9 +6,7 @@ import Network from '../engine/network';
|
|
|
5
6
|
import Engine from '../engine';
|
|
6
7
|
import ChannelEventHandler from '../engine/handlers/ChannelEventHandler';
|
|
7
8
|
import MediaSoupEventHandler from '../engine/handlers/MediaSoupEventHandler';
|
|
8
|
-
import WebRTCIssueDetector from '../engine/wid/WebRTCIssueDetector';
|
|
9
9
|
import { LoadBalancerApiClientParams } from '../engine/network/LoadBalancerClient';
|
|
10
|
-
import { IssueDetectorResult, NetworkScores } from '../engine/wid/types';
|
|
11
10
|
import { Logger, LogLevel } from './common';
|
|
12
11
|
export declare type IssuesHandler = (issues: IssueDetectorResult) => void;
|
|
13
12
|
export declare type NetworkScoresUpdatedHandler = (networks: NetworkScores) => void;
|
package/package.json
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
"name": "@livedigital/client",
|
|
3
3
|
"author": "vlprojects",
|
|
4
4
|
"license": "MIT",
|
|
5
|
-
"version": "2.26.0
|
|
5
|
+
"version": "2.26.0",
|
|
6
6
|
"private": false,
|
|
7
7
|
"bugs": {
|
|
8
8
|
"url": "https://github.com/vlprojects/livedigital-sdk/issues"
|
|
@@ -47,7 +47,8 @@
|
|
|
47
47
|
"mediasoup-client": "^3.6.50",
|
|
48
48
|
"qs": "^6.9.6",
|
|
49
49
|
"serialize-error": "^7.0.1",
|
|
50
|
-
"socket.io-client": "^4.3.0"
|
|
50
|
+
"socket.io-client": "^4.3.0",
|
|
51
|
+
"webrtc-issue-detector": "^1.3.0"
|
|
51
52
|
},
|
|
52
53
|
"devDependencies": {
|
|
53
54
|
"@rollup/plugin-commonjs": "^19.0.0",
|
|
@@ -1,10 +1,24 @@
|
|
|
1
|
+
import WebRTCIssueDetector, {
|
|
2
|
+
QualityLimitationsIssueDetector,
|
|
3
|
+
FramesDroppedIssueDetector,
|
|
4
|
+
FramesEncodedSentIssueDetector,
|
|
5
|
+
InboundNetworkIssueDetector,
|
|
6
|
+
OutboundNetworkIssueDetector,
|
|
7
|
+
NetworkMediaSyncIssueDetector,
|
|
8
|
+
AvailableOutgoingBitrateIssueDetector,
|
|
9
|
+
VideoCodecMismatchDetector,
|
|
10
|
+
CompositeRTCStatsParser,
|
|
11
|
+
WebRTCIssueEmitter,
|
|
12
|
+
NetworkScoresCalculator,
|
|
13
|
+
PeriodicWebRTCStatsReporter,
|
|
14
|
+
RTCStatsParser,
|
|
15
|
+
} from 'webrtc-issue-detector';
|
|
1
16
|
import Network from './network';
|
|
2
17
|
import System from './system';
|
|
3
18
|
import Media from './media';
|
|
4
19
|
import ChannelEventHandler from './handlers/ChannelEventHandler';
|
|
5
20
|
import Engine from './index';
|
|
6
21
|
import MediaSoupEventHandler from './handlers/MediaSoupEventHandler';
|
|
7
|
-
import WebRTCIssueDetector from './wid/WebRTCIssueDetector';
|
|
8
22
|
import {
|
|
9
23
|
CreateIssueDetectorParams,
|
|
10
24
|
CreateMediaParams,
|
|
@@ -14,19 +28,6 @@ import {
|
|
|
14
28
|
} from '../types/engine';
|
|
15
29
|
import SocketIO from './network/Socket';
|
|
16
30
|
import LoadBalancerApiClient from './network/LoadBalancerClient';
|
|
17
|
-
import NetworkScoresCalculator from './wid/lib/NetworkScoresCalculator';
|
|
18
|
-
import QualityLimitationsIssueDetector from './wid/detectors/QualityLimitationsIssueDetector';
|
|
19
|
-
import FramesDroppedIssueDetector from './wid/detectors/FramesDroppedIssueDetector';
|
|
20
|
-
import FramesEncodedSentIssueDetector from './wid/detectors/FramesEncodedSentIssueDetector';
|
|
21
|
-
import InboundNetworkIssueDetector from './wid/detectors/InboundNetworkIssueDetector';
|
|
22
|
-
import OutboundNetworkIssueDetector from './wid/detectors/OutboundNetworkIssueDetector';
|
|
23
|
-
import NetworkMediaSyncIssueDetector from './wid/detectors/NetworkMediaSyncIssueDetector';
|
|
24
|
-
import AvailableOutgoingBitrateIssueDetector from './wid/detectors/AvailableOutgoingBitrateIssueDetector';
|
|
25
|
-
import VideoCodecMismatchDetector from './wid/detectors/VideoCodecMismatchDetector';
|
|
26
|
-
import CompositeRTCStatsParser from './wid/lib/parser/CompositeRTCStatsParser';
|
|
27
|
-
import RTCStatsParser from './wid/lib/parser/RTCStatsParser';
|
|
28
|
-
import PeriodicWebRTCStatsReporter from './wid/lib/PeriodicWebRTCStatsReporter';
|
|
29
|
-
import { WebRTCIssueEmitter } from './wid/WebRTCIssueEmitter';
|
|
30
31
|
|
|
31
32
|
/* eslint-disable class-methods-use-this */
|
|
32
33
|
class DefaultEngineDependenciesFactory implements EngineDependenciesFactory {
|
package/src/engine/index.ts
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { RtpCapabilities } from 'mediasoup-client/lib/RtpParameters';
|
|
2
|
+
import WebRTCIssueDetector from 'webrtc-issue-detector';
|
|
2
3
|
import {
|
|
3
4
|
CreateCameraVideoTrackOptions,
|
|
4
5
|
CreateMicrophoneAudioTrackOptions,
|
|
@@ -26,7 +27,6 @@ import {
|
|
|
26
27
|
import { GetNodeRequest } from '../types/network';
|
|
27
28
|
import VideoTrack from './media/tracks/VideoTrack';
|
|
28
29
|
import PeerTrack from './media/tracks/PeerTrack';
|
|
29
|
-
import WebRTCIssueDetector from './wid/WebRTCIssueDetector';
|
|
30
30
|
import { retryAsync } from '../helpers/retry';
|
|
31
31
|
import { EngineDependenciesFactory, IssuesHandler, NetworkScoresUpdatedHandler } from '../types/engine';
|
|
32
32
|
import { LogLevels } from '../constants/common';
|
|
@@ -161,7 +161,7 @@ class Engine {
|
|
|
161
161
|
const { state, code } = evt;
|
|
162
162
|
this.clientEventEmitter.emit(state, { code });
|
|
163
163
|
|
|
164
|
-
if (state === SocketIOEvents.
|
|
164
|
+
if (state === SocketIOEvents.Reconnected) {
|
|
165
165
|
this.network.socket.disconnect();
|
|
166
166
|
this.clientEventEmitter.emit(CLIENT_EVENTS.channelRejoinRequired);
|
|
167
167
|
}
|
|
@@ -457,7 +457,20 @@ class Engine {
|
|
|
457
457
|
|
|
458
458
|
private watchClientEvents(): void {
|
|
459
459
|
this.clientEventEmitter.on(INTERNAL_CLIENT_EVENTS.trackProduced, (track: Track) => {
|
|
460
|
-
this.
|
|
460
|
+
const myPeer = this.peersRepository.get(<string> this.mySocketId);
|
|
461
|
+
if (!myPeer) {
|
|
462
|
+
return;
|
|
463
|
+
}
|
|
464
|
+
|
|
465
|
+
const peerTrack = new PeerTrack({
|
|
466
|
+
mediaStreamTrack: track.mediaStreamTrack,
|
|
467
|
+
label: track.getLabel(),
|
|
468
|
+
engine: this,
|
|
469
|
+
isPaused: track.isPaused,
|
|
470
|
+
peerEventEmitter: myPeer.observer,
|
|
471
|
+
});
|
|
472
|
+
|
|
473
|
+
myPeer.tracks.set(peerTrack.label, peerTrack);
|
|
461
474
|
});
|
|
462
475
|
|
|
463
476
|
this.clientEventEmitter.on(INTERNAL_CLIENT_EVENTS.trackUnproduced, (track: Track) => {
|
|
@@ -468,29 +481,13 @@ class Engine {
|
|
|
468
481
|
|
|
469
482
|
this.clientEventEmitter.on(INTERNAL_CLIENT_EVENTS.trackPaused, (track: Track) => {
|
|
470
483
|
const peerTrack = this.myPeer?.tracks.get(track.getLabel());
|
|
471
|
-
peerTrack?.
|
|
484
|
+
peerTrack?.pause();
|
|
472
485
|
});
|
|
473
486
|
|
|
474
487
|
this.clientEventEmitter.on(INTERNAL_CLIENT_EVENTS.trackResumed, (track: Track) => {
|
|
475
|
-
this.
|
|
476
|
-
|
|
477
|
-
}
|
|
478
|
-
|
|
479
|
-
private createSelfPeerTrack(track: Track): void {
|
|
480
|
-
const myPeer = this.peersRepository.get(<string> this.mySocketId);
|
|
481
|
-
if (!myPeer) {
|
|
482
|
-
return;
|
|
483
|
-
}
|
|
484
|
-
|
|
485
|
-
const peerTrack = new PeerTrack({
|
|
486
|
-
mediaStreamTrack: track.mediaStreamTrack,
|
|
487
|
-
label: track.getLabel(),
|
|
488
|
-
engine: this,
|
|
489
|
-
isPaused: track.isPaused,
|
|
490
|
-
peerEventEmitter: myPeer.observer,
|
|
488
|
+
const peerTrack = this.myPeer?.tracks.get(track.getLabel());
|
|
489
|
+
peerTrack?.resume();
|
|
491
490
|
});
|
|
492
|
-
|
|
493
|
-
myPeer.tracks.set(peerTrack.label, peerTrack);
|
|
494
491
|
}
|
|
495
492
|
}
|
|
496
493
|
|
|
@@ -3,11 +3,7 @@ import { RtpCapabilities, RtpCodecCapability } from 'mediasoup-client/lib/RtpPar
|
|
|
3
3
|
import VideoTrack from './tracks/VideoTrack';
|
|
4
4
|
import AudioTrack from './tracks/AudioTrack';
|
|
5
5
|
import {
|
|
6
|
-
CreateScreenVideoTrackOptions,
|
|
7
|
-
CreateTracksPayload,
|
|
8
|
-
CreateVideoTrackParams,
|
|
9
|
-
LogLevel,
|
|
10
|
-
Track,
|
|
6
|
+
CreateScreenVideoTrackOptions, CreateVideoTrackParams, LogLevel, Track,
|
|
11
7
|
} from '../../types/common';
|
|
12
8
|
import Logger from '../Logger';
|
|
13
9
|
import { VIDEO_CONSTRAINS } from '../../constants/videoConstrains';
|
|
@@ -15,7 +11,6 @@ import { SCREEN_SHARING_SIMULCAST_ENCODINGS, WEBCAM_SIMULCAST_ENCODINGS } from '
|
|
|
15
11
|
import { CreateMediaParams } from '../../types/engine';
|
|
16
12
|
import Engine from '../index';
|
|
17
13
|
import EnhancedEventEmitter from '../../EnhancedEventEmitter';
|
|
18
|
-
import MediaStreamTrackManager from './tracks/MediaStreamTrackManager';
|
|
19
14
|
|
|
20
15
|
class Media {
|
|
21
16
|
public isDeviceLoaded = false;
|
|
@@ -32,8 +27,6 @@ class Media {
|
|
|
32
27
|
|
|
33
28
|
readonly #clientEventEmitter: EnhancedEventEmitter;
|
|
34
29
|
|
|
35
|
-
readonly #mediaStreamTrackManager: MediaStreamTrackManager;
|
|
36
|
-
|
|
37
30
|
constructor(params: CreateMediaParams) {
|
|
38
31
|
this.#logLevel = params.logLevel;
|
|
39
32
|
this.#logger = new Logger({
|
|
@@ -42,7 +35,6 @@ class Media {
|
|
|
42
35
|
});
|
|
43
36
|
this.#engine = params.engine;
|
|
44
37
|
this.#clientEventEmitter = params.clientEventEmitter;
|
|
45
|
-
this.#mediaStreamTrackManager = new MediaStreamTrackManager(params.logLevel);
|
|
46
38
|
}
|
|
47
39
|
|
|
48
40
|
get mediasoupDevice(): Device {
|
|
@@ -70,20 +62,20 @@ class Media {
|
|
|
70
62
|
return codecs.find((c) => c.mimeType.toLowerCase() === `${track.kind}/${track.getPreferredCodec()}`);
|
|
71
63
|
}
|
|
72
64
|
|
|
73
|
-
private createTracks(
|
|
65
|
+
private createTracks(stream: MediaStream): Track[] {
|
|
66
|
+
const mediaStreamTracks = stream.getTracks();
|
|
74
67
|
return mediaStreamTracks.map((mediaStreamTrack) => {
|
|
75
68
|
const params = {
|
|
76
69
|
mediaStreamTrack,
|
|
77
70
|
logLevel: this.#logLevel,
|
|
78
71
|
engine: this.#engine,
|
|
79
72
|
clientEventEmitter: this.#clientEventEmitter,
|
|
80
|
-
constraints,
|
|
81
|
-
mediaStreamTrackManager: this.#mediaStreamTrackManager,
|
|
82
73
|
};
|
|
83
74
|
|
|
84
75
|
const track = mediaStreamTrack.kind === 'audio' ? new AudioTrack(params) : new VideoTrack(params);
|
|
85
76
|
this.tracks.set(track.id, track);
|
|
86
77
|
this.#logger.debug('createTrack() track created', {
|
|
78
|
+
streamId: stream.id,
|
|
87
79
|
trackId: track.id,
|
|
88
80
|
kind: track.kind,
|
|
89
81
|
});
|
|
@@ -93,13 +85,14 @@ class Media {
|
|
|
93
85
|
}
|
|
94
86
|
|
|
95
87
|
async createUserMediaTracks(constraints: MediaStreamConstraints): Promise<Track[]> {
|
|
96
|
-
const
|
|
97
|
-
|
|
88
|
+
const stream = await navigator.mediaDevices.getUserMedia(constraints);
|
|
89
|
+
this.#logger.debug('createUserMediaTrack() stream created', { streamId: stream.id });
|
|
90
|
+
return this.createTracks(stream);
|
|
98
91
|
}
|
|
99
92
|
|
|
100
93
|
async createDisplayMediaTracks(constraints: MediaStreamConstraints): Promise<Track[]> {
|
|
101
|
-
const
|
|
102
|
-
return this.createTracks(
|
|
94
|
+
const stream = await navigator.mediaDevices.getDisplayMedia(constraints);
|
|
95
|
+
return this.createTracks(stream);
|
|
103
96
|
}
|
|
104
97
|
|
|
105
98
|
deleteTrack(track: Track) {
|
|
@@ -5,31 +5,27 @@ import {
|
|
|
5
5
|
EncoderConfig,
|
|
6
6
|
LogLevel,
|
|
7
7
|
SocketResponse,
|
|
8
|
-
TrackLabel,
|
|
9
|
-
TrackOutboundStats,
|
|
8
|
+
TrackLabel, TrackOutboundStats,
|
|
10
9
|
TrackProduceParams,
|
|
11
10
|
} from '../../../types/common';
|
|
12
11
|
import Logger from '../../Logger';
|
|
13
12
|
import Engine from '../../index';
|
|
14
13
|
import PeerConsumer from '../../PeerConsumer';
|
|
15
14
|
import { PRODUCER_CHECK_STATE_TIMEOUT } from '../../../constants/common';
|
|
16
|
-
import
|
|
15
|
+
import Timeout = NodeJS.Timeout;
|
|
16
|
+
import { MEDIASOUP_EVENTS, INTERNAL_CLIENT_EVENTS, CLIENT_EVENTS } from '../../../constants/events';
|
|
17
17
|
import EnhancedEventEmitter from '../../../EnhancedEventEmitter';
|
|
18
18
|
import filterStatsCodecs from '../../../helpers/filterStatsCodecs';
|
|
19
|
-
import Timeout = NodeJS.Timeout;
|
|
20
|
-
import MediaStreamTrackManager from './MediaStreamTrackManager';
|
|
21
19
|
|
|
22
20
|
export type BaseTrackConstructorParams = {
|
|
23
21
|
mediaStreamTrack: MediaStreamTrack,
|
|
24
22
|
logLevel: LogLevel,
|
|
25
23
|
engine: Engine,
|
|
26
24
|
clientEventEmitter: EnhancedEventEmitter,
|
|
27
|
-
constraints: MediaStreamConstraints;
|
|
28
|
-
mediaStreamTrackManager: MediaStreamTrackManager;
|
|
29
25
|
};
|
|
30
26
|
|
|
31
27
|
class BaseTrack {
|
|
32
|
-
#mediaStreamTrack: MediaStreamTrack;
|
|
28
|
+
readonly #mediaStreamTrack: MediaStreamTrack;
|
|
33
29
|
|
|
34
30
|
protected encoderConfig: EncoderConfig = {};
|
|
35
31
|
|
|
@@ -51,19 +47,13 @@ class BaseTrack {
|
|
|
51
47
|
|
|
52
48
|
#closed = false;
|
|
53
49
|
|
|
54
|
-
readonly #constraints: MediaStreamConstraints;
|
|
55
|
-
|
|
56
|
-
readonly #mediaStreamTrackManager: MediaStreamTrackManager;
|
|
57
|
-
|
|
58
50
|
constructor(params: BaseTrackConstructorParams) {
|
|
59
51
|
const {
|
|
60
|
-
mediaStreamTrack, logLevel, engine, clientEventEmitter,
|
|
52
|
+
mediaStreamTrack, logLevel, engine, clientEventEmitter,
|
|
61
53
|
} = params;
|
|
62
54
|
this.#mediaStreamTrack = mediaStreamTrack;
|
|
63
55
|
this.#engine = engine;
|
|
64
56
|
this.#clientEventEmitter = clientEventEmitter;
|
|
65
|
-
this.#constraints = constraints;
|
|
66
|
-
this.#mediaStreamTrackManager = mediaStreamTrackManager;
|
|
67
57
|
this.logger = new Logger({
|
|
68
58
|
namespace: 'Track',
|
|
69
59
|
logLevel,
|
|
@@ -376,7 +366,6 @@ class BaseTrack {
|
|
|
376
366
|
await this.cancelProducerCheckState();
|
|
377
367
|
await this.pauseRemoteProducer(this.producer.id);
|
|
378
368
|
this.producer.pause();
|
|
379
|
-
this.#mediaStreamTrack.stop();
|
|
380
369
|
this.clientEventEmitter.emit(INTERNAL_CLIENT_EVENTS.trackPaused, this);
|
|
381
370
|
this.logger.debug('pause()', { track: this });
|
|
382
371
|
} catch (error) {
|
|
@@ -392,12 +381,6 @@ class BaseTrack {
|
|
|
392
381
|
}
|
|
393
382
|
|
|
394
383
|
try {
|
|
395
|
-
const track = await this.#mediaStreamTrackManager.createMediaStreamTrack({
|
|
396
|
-
label: this.label,
|
|
397
|
-
constraints: this.#constraints,
|
|
398
|
-
});
|
|
399
|
-
this.#mediaStreamTrack = track;
|
|
400
|
-
await this.producer.replaceTrack({ track });
|
|
401
384
|
await this.resumeRemoteProducer(this.producer.id);
|
|
402
385
|
this.producer.resume();
|
|
403
386
|
this.clientEventEmitter.emit(INTERNAL_CLIENT_EVENTS.trackResumed, this);
|
package/src/types/common.ts
CHANGED
|
@@ -350,11 +350,6 @@ export type UpdatePeerAppDataPayload = {
|
|
|
350
350
|
appData: Record<string, unknown>,
|
|
351
351
|
};
|
|
352
352
|
|
|
353
|
-
export type CreateTracksPayload = {
|
|
354
|
-
mediaStreamTracks: MediaStreamTrack[],
|
|
355
|
-
constraints: MediaStreamConstraints,
|
|
356
|
-
};
|
|
357
|
-
|
|
358
353
|
export type TrackPublishParams = {
|
|
359
354
|
keyFrameRequestDelay?: number;
|
|
360
355
|
};
|
package/src/types/engine.ts
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import WebRTCIssueDetector, { IssueDetectorResult, NetworkScores } from 'webrtc-issue-detector';
|
|
1
2
|
import EnhancedEventEmitter from '../EnhancedEventEmitter';
|
|
2
3
|
import System from '../engine/system';
|
|
3
4
|
import Media from '../engine/media';
|
|
@@ -5,9 +6,7 @@ import Network from '../engine/network';
|
|
|
5
6
|
import Engine from '../engine';
|
|
6
7
|
import ChannelEventHandler from '../engine/handlers/ChannelEventHandler';
|
|
7
8
|
import MediaSoupEventHandler from '../engine/handlers/MediaSoupEventHandler';
|
|
8
|
-
import WebRTCIssueDetector from '../engine/wid/WebRTCIssueDetector';
|
|
9
9
|
import { LoadBalancerApiClientParams } from '../engine/network/LoadBalancerClient';
|
|
10
|
-
import { IssueDetectorResult, NetworkScores } from '../engine/wid/types';
|
|
11
10
|
import { Logger, LogLevel } from './common';
|
|
12
11
|
|
|
13
12
|
export type IssuesHandler = (issues: IssueDetectorResult) => void;
|
|
@@ -1,14 +0,0 @@
|
|
|
1
|
-
import { LogLevel, TrackLabel } from '../../../types/common';
|
|
2
|
-
export declare type GetMediaStreamTrackParams = {
|
|
3
|
-
label: TrackLabel;
|
|
4
|
-
constraints: MediaStreamConstraints;
|
|
5
|
-
};
|
|
6
|
-
declare class MediaStreamTrackManager {
|
|
7
|
-
#private;
|
|
8
|
-
constructor(logLevel: LogLevel);
|
|
9
|
-
createMediaStreamTrack({ label, constraints }: GetMediaStreamTrackParams): Promise<MediaStreamTrack>;
|
|
10
|
-
private static isDisplayMedia;
|
|
11
|
-
createUserMediaTracks(constraints: MediaStreamConstraints): Promise<MediaStreamTrack[]>;
|
|
12
|
-
createDisplayMediaTracks(constraints: MediaStreamConstraints): Promise<MediaStreamTrack[]>;
|
|
13
|
-
}
|
|
14
|
-
export default MediaStreamTrackManager;
|
|
@@ -1,20 +0,0 @@
|
|
|
1
|
-
import { WebRTCIssueEmitter } from './WebRTCIssueEmitter';
|
|
2
|
-
import { WebRTCIssueDetectorConstructorParams } from './types';
|
|
3
|
-
declare class WebRTCIssueDetector {
|
|
4
|
-
#private;
|
|
5
|
-
readonly eventEmitter: WebRTCIssueEmitter;
|
|
6
|
-
private readonly detectors;
|
|
7
|
-
private readonly networkScoresCalculator;
|
|
8
|
-
private readonly statsReporter;
|
|
9
|
-
private readonly compositeStatsParser;
|
|
10
|
-
private readonly logger;
|
|
11
|
-
constructor(params: WebRTCIssueDetectorConstructorParams);
|
|
12
|
-
watchNewPeerConnections(): void;
|
|
13
|
-
stopWatchingNewPeerConnections(): void;
|
|
14
|
-
handleNewPeerConnection(pc: RTCPeerConnection): void;
|
|
15
|
-
private emitIssues;
|
|
16
|
-
private detectIssues;
|
|
17
|
-
private calculateNetworkScores;
|
|
18
|
-
private wrapRTCPeerConnection;
|
|
19
|
-
}
|
|
20
|
-
export default WebRTCIssueDetector;
|
|
@@ -1,11 +0,0 @@
|
|
|
1
|
-
/// <reference types="node" />
|
|
2
|
-
import { EventEmitter } from 'events';
|
|
3
|
-
import { EventType, EventPayload, IssueDetectorResult, NetworkScores } from './types';
|
|
4
|
-
export declare interface WebRTCIssueEmitter {
|
|
5
|
-
on(event: EventType.Issue, listener: (payload: IssueDetectorResult) => void): this;
|
|
6
|
-
on(event: EventType.NetworkScoresUpdated, listener: (payload: NetworkScores) => void): this;
|
|
7
|
-
emit(event: EventType.Issue, payload: EventPayload): boolean;
|
|
8
|
-
emit(event: EventType.NetworkScoresUpdated, payload: NetworkScores): boolean;
|
|
9
|
-
}
|
|
10
|
-
export declare class WebRTCIssueEmitter extends EventEmitter {
|
|
11
|
-
}
|
|
@@ -1,6 +0,0 @@
|
|
|
1
|
-
import { IssueDetector, IssueDetectorResult, WebRTCStatsParsed } from '../types';
|
|
2
|
-
declare class AvailableOutgoingBitrateIssueDetector implements IssueDetector {
|
|
3
|
-
#private;
|
|
4
|
-
detect(data: WebRTCStatsParsed): IssueDetectorResult;
|
|
5
|
-
}
|
|
6
|
-
export default AvailableOutgoingBitrateIssueDetector;
|
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
import { IssueDetector, IssueDetectorResult, WebRTCStatsParsed } from '../types';
|
|
2
|
-
declare class FramesDroppedIssueDetector implements IssueDetector {
|
|
3
|
-
#private;
|
|
4
|
-
detect(data: WebRTCStatsParsed): IssueDetectorResult;
|
|
5
|
-
private processData;
|
|
6
|
-
}
|
|
7
|
-
export default FramesDroppedIssueDetector;
|
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
import { IssueDetector, IssueDetectorResult, WebRTCStatsParsed } from '../types';
|
|
2
|
-
declare class FramesEncodedSentIssueDetector implements IssueDetector {
|
|
3
|
-
#private;
|
|
4
|
-
detect(data: WebRTCStatsParsed): IssueDetectorResult;
|
|
5
|
-
private processData;
|
|
6
|
-
}
|
|
7
|
-
export default FramesEncodedSentIssueDetector;
|
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
import { IssueDetector, IssueDetectorResult, WebRTCStatsParsed } from '../types';
|
|
2
|
-
declare class InboundNetworkIssueDetector implements IssueDetector {
|
|
3
|
-
#private;
|
|
4
|
-
detect(data: WebRTCStatsParsed): IssueDetectorResult;
|
|
5
|
-
private processData;
|
|
6
|
-
}
|
|
7
|
-
export default InboundNetworkIssueDetector;
|
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
import { IssueDetector, IssueDetectorResult, WebRTCStatsParsed } from '../types';
|
|
2
|
-
declare class NetworkMediaSyncIssueDetector implements IssueDetector {
|
|
3
|
-
#private;
|
|
4
|
-
detect(data: WebRTCStatsParsed): IssueDetectorResult;
|
|
5
|
-
private processData;
|
|
6
|
-
}
|
|
7
|
-
export default NetworkMediaSyncIssueDetector;
|
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
import { IssueDetector, IssueDetectorResult, WebRTCStatsParsed } from '../types';
|
|
2
|
-
declare class OutboundNetworkIssueDetector implements IssueDetector {
|
|
3
|
-
#private;
|
|
4
|
-
detect(data: WebRTCStatsParsed): IssueDetectorResult;
|
|
5
|
-
private processData;
|
|
6
|
-
}
|
|
7
|
-
export default OutboundNetworkIssueDetector;
|
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
import { IssueDetector, IssueDetectorResult, WebRTCStatsParsed } from '../types';
|
|
2
|
-
declare class QualityLimitationsIssueDetector implements IssueDetector {
|
|
3
|
-
#private;
|
|
4
|
-
detect(data: WebRTCStatsParsed): IssueDetectorResult;
|
|
5
|
-
private processData;
|
|
6
|
-
}
|
|
7
|
-
export default QualityLimitationsIssueDetector;
|
|
@@ -1,10 +0,0 @@
|
|
|
1
|
-
import { IssueDetector, IssueDetectorResult, WebRTCStatsParsed } from '../types';
|
|
2
|
-
declare class VideoCodecMismatchDetector implements IssueDetector {
|
|
3
|
-
#private;
|
|
4
|
-
readonly UNKNOWN_DECODER = "unknown";
|
|
5
|
-
detect(data: WebRTCStatsParsed): IssueDetectorResult;
|
|
6
|
-
private processData;
|
|
7
|
-
private setLastDecoderWithIssue;
|
|
8
|
-
private hadLastDecoderWithIssue;
|
|
9
|
-
}
|
|
10
|
-
export default VideoCodecMismatchDetector;
|
|
@@ -1,9 +0,0 @@
|
|
|
1
|
-
import { NetworkScores, NetworkScoresCalculator as INetworkScoresCalculator, WebRTCStatsParsed } from '../types';
|
|
2
|
-
declare class NetworkScoresCalculator implements INetworkScoresCalculator {
|
|
3
|
-
#private;
|
|
4
|
-
calculate(data: WebRTCStatsParsed): NetworkScores;
|
|
5
|
-
private calcucateOutboundScore;
|
|
6
|
-
private calculateInboundScore;
|
|
7
|
-
private calculateMOS;
|
|
8
|
-
}
|
|
9
|
-
export default NetworkScoresCalculator;
|
|
@@ -1,20 +0,0 @@
|
|
|
1
|
-
/// <reference types="node" />
|
|
2
|
-
import { EventEmitter } from 'events';
|
|
3
|
-
import { CompositeStatsParser } from '../types';
|
|
4
|
-
interface PeriodicWebRTCStatsReporterParams {
|
|
5
|
-
compositeStatsParser: CompositeStatsParser;
|
|
6
|
-
getStatsInterval?: number;
|
|
7
|
-
}
|
|
8
|
-
declare class PeriodicWebRTCStatsReporter extends EventEmitter {
|
|
9
|
-
static readonly STATS_REPORT_READY_EVENT = "stats-report-ready";
|
|
10
|
-
private isStopped;
|
|
11
|
-
private reportTimer;
|
|
12
|
-
private readonly getStatsInterval;
|
|
13
|
-
private readonly compositeStatsParser;
|
|
14
|
-
constructor(params: PeriodicWebRTCStatsReporterParams);
|
|
15
|
-
get isRunning(): boolean;
|
|
16
|
-
startReporting(): void;
|
|
17
|
-
stopReporting(): void;
|
|
18
|
-
private parseReports;
|
|
19
|
-
}
|
|
20
|
-
export default PeriodicWebRTCStatsReporter;
|
|
@@ -1,22 +0,0 @@
|
|
|
1
|
-
import { CompositeStatsParser, ConnectionInfo, StatsParser, StatsReportItem } from '../../types';
|
|
2
|
-
export interface AddConnectionPayload {
|
|
3
|
-
id?: string;
|
|
4
|
-
pc: RTCPeerConnection;
|
|
5
|
-
}
|
|
6
|
-
export interface RemoveConnectionPayload {
|
|
7
|
-
pc: RTCPeerConnection;
|
|
8
|
-
}
|
|
9
|
-
interface CompositeRTCStatsParserParams {
|
|
10
|
-
statsParser: StatsParser;
|
|
11
|
-
}
|
|
12
|
-
declare class CompositeRTCStatsParser implements CompositeStatsParser {
|
|
13
|
-
private readonly connections;
|
|
14
|
-
private readonly statsParser;
|
|
15
|
-
constructor(params: CompositeRTCStatsParserParams);
|
|
16
|
-
listConnections(): ConnectionInfo[];
|
|
17
|
-
addPeerConnection(payload: AddConnectionPayload): void;
|
|
18
|
-
removePeerConnection(payload: RemoveConnectionPayload): void;
|
|
19
|
-
parse(): Promise<StatsReportItem[]>;
|
|
20
|
-
private removeConnectionsByIndexes;
|
|
21
|
-
}
|
|
22
|
-
export default CompositeRTCStatsParser;
|
|
@@ -1,20 +0,0 @@
|
|
|
1
|
-
import { ConnectionInfo, StatsParser, StatsReportItem } from '../../types';
|
|
2
|
-
import { Logger } from '../../../../types/common';
|
|
3
|
-
interface WebRTCStatsParserParams {
|
|
4
|
-
logger: Logger;
|
|
5
|
-
}
|
|
6
|
-
declare class RTCStatsParser implements StatsParser {
|
|
7
|
-
private readonly prevStats;
|
|
8
|
-
private readonly allowedReportTypes;
|
|
9
|
-
private readonly logger;
|
|
10
|
-
constructor(params: WebRTCStatsParserParams);
|
|
11
|
-
parse(connection: ConnectionInfo): Promise<StatsReportItem | undefined>;
|
|
12
|
-
private getConnectionStats;
|
|
13
|
-
private mapReportsStats;
|
|
14
|
-
private updateMappedStatsWithReportItemData;
|
|
15
|
-
private getMediaType;
|
|
16
|
-
private propagateStatsWithRateValues;
|
|
17
|
-
private mapConnectionStatsIfNecessary;
|
|
18
|
-
private prepareConnectionStats;
|
|
19
|
-
}
|
|
20
|
-
export default RTCStatsParser;
|
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
interface WithTS {
|
|
2
|
-
timestamp: number;
|
|
3
|
-
}
|
|
4
|
-
export declare const checkIsConnectionClosed: (pc: RTCPeerConnection) => boolean;
|
|
5
|
-
export declare const calcValueRate: <T extends WithTS>(stats: T, prevStats: T | undefined, statPropName: keyof T) => number;
|
|
6
|
-
export declare const calcBitrate: <T extends WithTS>(stats: T, prevStats: T | undefined, statPropName: keyof T) => number;
|
|
7
|
-
export {};
|