@livedigital/client 2.26.0-stop-streams.1 → 2.27.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.
Files changed (49) hide show
  1. package/dist/engine/DefaultEngineDependenciesFactory.d.ts +1 -1
  2. package/dist/engine/media/tracks/BaseTrack.d.ts +3 -2
  3. package/dist/engine/media/tracks/MediaStreamTrackManager.d.ts +14 -0
  4. package/dist/index.es.js +1 -1
  5. package/dist/index.js +2 -2
  6. package/dist/types/common.d.ts +1 -1
  7. package/dist/types/engine.d.ts +1 -2
  8. package/package.json +3 -2
  9. package/src/engine/DefaultEngineDependenciesFactory.ts +15 -14
  10. package/src/engine/index.ts +2 -2
  11. package/src/engine/media/index.ts +11 -10
  12. package/src/engine/media/tracks/BaseTrack.ts +14 -9
  13. package/src/engine/media/tracks/MediaStreamTrackManager.ts +46 -0
  14. package/src/types/common.ts +1 -1
  15. package/src/types/engine.ts +1 -2
  16. package/dist/engine/media/tracks/TrackMediaStreamManager.d.ts +0 -11
  17. package/dist/engine/wid/WebRTCIssueDetector.d.ts +0 -20
  18. package/dist/engine/wid/WebRTCIssueEmitter.d.ts +0 -11
  19. package/dist/engine/wid/detectors/AvailableOutgoingBitrateIssueDetector.d.ts +0 -6
  20. package/dist/engine/wid/detectors/FramesDroppedIssueDetector.d.ts +0 -7
  21. package/dist/engine/wid/detectors/FramesEncodedSentIssueDetector.d.ts +0 -7
  22. package/dist/engine/wid/detectors/InboundNetworkIssueDetector.d.ts +0 -7
  23. package/dist/engine/wid/detectors/NetworkMediaSyncIssueDetector.d.ts +0 -7
  24. package/dist/engine/wid/detectors/OutboundNetworkIssueDetector.d.ts +0 -7
  25. package/dist/engine/wid/detectors/QualityLimitationsIssueDetector.d.ts +0 -7
  26. package/dist/engine/wid/detectors/VideoCodecMismatchDetector.d.ts +0 -10
  27. package/dist/engine/wid/lib/NetworkScoresCalculator.d.ts +0 -9
  28. package/dist/engine/wid/lib/PeriodicWebRTCStatsReporter.d.ts +0 -20
  29. package/dist/engine/wid/lib/parser/CompositeRTCStatsParser.d.ts +0 -22
  30. package/dist/engine/wid/lib/parser/RTCStatsParser.d.ts +0 -20
  31. package/dist/engine/wid/lib/parser/utils.d.ts +0 -7
  32. package/dist/engine/wid/types.d.ts +0 -381
  33. package/src/engine/media/tracks/TrackMediaStreamManager.ts +0 -41
  34. package/src/engine/wid/WebRTCIssueDetector.ts +0 -136
  35. package/src/engine/wid/WebRTCIssueEmitter.ts +0 -16
  36. package/src/engine/wid/detectors/AvailableOutgoingBitrateIssueDetector.ts +0 -57
  37. package/src/engine/wid/detectors/FramesDroppedIssueDetector.ts +0 -65
  38. package/src/engine/wid/detectors/FramesEncodedSentIssueDetector.ts +0 -69
  39. package/src/engine/wid/detectors/InboundNetworkIssueDetector.ts +0 -120
  40. package/src/engine/wid/detectors/NetworkMediaSyncIssueDetector.ts +0 -60
  41. package/src/engine/wid/detectors/OutboundNetworkIssueDetector.ts +0 -96
  42. package/src/engine/wid/detectors/QualityLimitationsIssueDetector.ts +0 -63
  43. package/src/engine/wid/detectors/VideoCodecMismatchDetector.ts +0 -78
  44. package/src/engine/wid/lib/NetworkScoresCalculator.ts +0 -126
  45. package/src/engine/wid/lib/PeriodicWebRTCStatsReporter.ts +0 -66
  46. package/src/engine/wid/lib/parser/CompositeRTCStatsParser.ts +0 -82
  47. package/src/engine/wid/lib/parser/RTCStatsParser.ts +0 -274
  48. package/src/engine/wid/lib/parser/utils.ts +0 -40
  49. package/src/engine/wid/types.ts +0 -408
@@ -305,7 +305,7 @@ export declare type UpdatePeerAppDataPayload = {
305
305
  appData: Record<string, unknown>;
306
306
  };
307
307
  export declare type CreateTracksPayload = {
308
- stream: MediaStream;
308
+ mediaStreamTracks: MediaStreamTrack[];
309
309
  constraints: MediaStreamConstraints;
310
310
  };
311
311
  export declare type TrackPublishParams = {
@@ -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-stop-streams.1",
5
+ "version": "2.27.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.1"
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 {
@@ -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.Reconnecting) {
164
+ if (state === SocketIOEvents.Reconnected) {
165
165
  this.network.socket.disconnect();
166
166
  this.clientEventEmitter.emit(CLIENT_EVENTS.channelRejoinRequired);
167
167
  }
@@ -15,7 +15,7 @@ import { SCREEN_SHARING_SIMULCAST_ENCODINGS, WEBCAM_SIMULCAST_ENCODINGS } from '
15
15
  import { CreateMediaParams } from '../../types/engine';
16
16
  import Engine from '../index';
17
17
  import EnhancedEventEmitter from '../../EnhancedEventEmitter';
18
- import TrackMediaStreamManager from './tracks/TrackMediaStreamManager';
18
+ import MediaStreamTrackManager from './tracks/MediaStreamTrackManager';
19
19
 
20
20
  class Media {
21
21
  public isDeviceLoaded = false;
@@ -32,6 +32,8 @@ class Media {
32
32
 
33
33
  readonly #clientEventEmitter: EnhancedEventEmitter;
34
34
 
35
+ readonly #mediaStreamTrackManager: MediaStreamTrackManager;
36
+
35
37
  constructor(params: CreateMediaParams) {
36
38
  this.#logLevel = params.logLevel;
37
39
  this.#logger = new Logger({
@@ -40,6 +42,7 @@ class Media {
40
42
  });
41
43
  this.#engine = params.engine;
42
44
  this.#clientEventEmitter = params.clientEventEmitter;
45
+ this.#mediaStreamTrackManager = new MediaStreamTrackManager(params.logLevel);
43
46
  }
44
47
 
45
48
  get mediasoupDevice(): Device {
@@ -67,21 +70,20 @@ class Media {
67
70
  return codecs.find((c) => c.mimeType.toLowerCase() === `${track.kind}/${track.getPreferredCodec()}`);
68
71
  }
69
72
 
70
- private createTracks({ constraints, stream }: CreateTracksPayload): Track[] {
71
- const mediaStreamTracks = stream.getTracks();
73
+ private createTracks({ constraints, mediaStreamTracks }: CreateTracksPayload): Track[] {
72
74
  return mediaStreamTracks.map((mediaStreamTrack) => {
73
75
  const params = {
74
76
  mediaStreamTrack,
75
77
  logLevel: this.#logLevel,
76
78
  engine: this.#engine,
77
79
  clientEventEmitter: this.#clientEventEmitter,
78
- mediaStreamManager: new TrackMediaStreamManager(constraints),
80
+ constraints,
81
+ mediaStreamTrackManager: this.#mediaStreamTrackManager,
79
82
  };
80
83
 
81
84
  const track = mediaStreamTrack.kind === 'audio' ? new AudioTrack(params) : new VideoTrack(params);
82
85
  this.tracks.set(track.id, track);
83
86
  this.#logger.debug('createTrack() track created', {
84
- streamId: stream.id,
85
87
  trackId: track.id,
86
88
  kind: track.kind,
87
89
  });
@@ -91,14 +93,13 @@ class Media {
91
93
  }
92
94
 
93
95
  async createUserMediaTracks(constraints: MediaStreamConstraints): Promise<Track[]> {
94
- const stream = await navigator.mediaDevices.getUserMedia(constraints);
95
- this.#logger.debug('createUserMediaTrack() stream created', { streamId: stream.id });
96
- return this.createTracks({ stream, constraints });
96
+ const mediaStreamTracks = await this.#mediaStreamTrackManager.createUserMediaTracks(constraints);
97
+ return this.createTracks({ constraints, mediaStreamTracks });
97
98
  }
98
99
 
99
100
  async createDisplayMediaTracks(constraints: MediaStreamConstraints): Promise<Track[]> {
100
- const stream = await navigator.mediaDevices.getDisplayMedia(constraints);
101
- return this.createTracks({ stream, constraints });
101
+ const mediaStreamTracks = await this.#mediaStreamTrackManager.createDisplayMediaTracks(constraints);
102
+ return this.createTracks({ constraints, mediaStreamTracks });
102
103
  }
103
104
 
104
105
  deleteTrack(track: Track) {
@@ -16,15 +16,15 @@ import { PRODUCER_CHECK_STATE_TIMEOUT } from '../../../constants/common';
16
16
  import { CLIENT_EVENTS, INTERNAL_CLIENT_EVENTS, MEDIASOUP_EVENTS } from '../../../constants/events';
17
17
  import EnhancedEventEmitter from '../../../EnhancedEventEmitter';
18
18
  import filterStatsCodecs from '../../../helpers/filterStatsCodecs';
19
- import Timeout = NodeJS.Timeout;
20
- import TrackMediaStreamManager from './TrackMediaStreamManager';
19
+ import MediaStreamTrackManager from './MediaStreamTrackManager';
21
20
 
22
21
  export type BaseTrackConstructorParams = {
23
22
  mediaStreamTrack: MediaStreamTrack,
24
23
  logLevel: LogLevel,
25
24
  engine: Engine,
26
25
  clientEventEmitter: EnhancedEventEmitter,
27
- mediaStreamManager: TrackMediaStreamManager,
26
+ constraints: MediaStreamConstraints;
27
+ mediaStreamTrackManager: MediaStreamTrackManager;
28
28
  };
29
29
 
30
30
  class BaseTrack {
@@ -42,7 +42,7 @@ class BaseTrack {
42
42
 
43
43
  #selfConsumer?: PeerConsumer;
44
44
 
45
- #checkStateTimeout?: Timeout;
45
+ #checkStateTimeout?: NodeJS.Timeout;
46
46
 
47
47
  #producerRestarted = false;
48
48
 
@@ -50,16 +50,19 @@ class BaseTrack {
50
50
 
51
51
  #closed = false;
52
52
 
53
- readonly #mediaStreamManager: TrackMediaStreamManager;
53
+ readonly #constraints: MediaStreamConstraints;
54
+
55
+ readonly #mediaStreamTrackManager: MediaStreamTrackManager;
54
56
 
55
57
  constructor(params: BaseTrackConstructorParams) {
56
58
  const {
57
- mediaStreamTrack, logLevel, engine, clientEventEmitter, mediaStreamManager,
59
+ mediaStreamTrack, logLevel, engine, clientEventEmitter, constraints, mediaStreamTrackManager,
58
60
  } = params;
59
61
  this.#mediaStreamTrack = mediaStreamTrack;
60
62
  this.#engine = engine;
61
63
  this.#clientEventEmitter = clientEventEmitter;
62
- this.#mediaStreamManager = mediaStreamManager;
64
+ this.#constraints = constraints;
65
+ this.#mediaStreamTrackManager = mediaStreamTrackManager;
63
66
  this.logger = new Logger({
64
67
  namespace: 'Track',
65
68
  logLevel,
@@ -102,7 +105,6 @@ class BaseTrack {
102
105
 
103
106
  setLabel(label: TrackLabel): void {
104
107
  this.label = label;
105
- this.#mediaStreamManager.setLabel(label);
106
108
  }
107
109
 
108
110
  setEncoderConfig(encoderConfig: EncoderConfig): void {
@@ -389,7 +391,10 @@ class BaseTrack {
389
391
  }
390
392
 
391
393
  try {
392
- const track = await this.#mediaStreamManager.getMediaStreamTrack();
394
+ const track = await this.#mediaStreamTrackManager.createMediaStreamTrack({
395
+ label: this.label,
396
+ constraints: this.#constraints,
397
+ });
393
398
  this.#mediaStreamTrack = track;
394
399
  await this.producer.replaceTrack({ track });
395
400
  await this.resumeRemoteProducer(this.producer.id);
@@ -0,0 +1,46 @@
1
+ import { LogLevel, TrackLabel } from '../../../types/common';
2
+ import Logger from '../../Logger';
3
+
4
+ export type GetMediaStreamTrackParams = {
5
+ label: TrackLabel;
6
+ constraints: MediaStreamConstraints;
7
+ };
8
+
9
+ class MediaStreamTrackManager {
10
+ readonly #logger: Logger;
11
+
12
+ constructor(logLevel: LogLevel) {
13
+ this.#logger = new Logger({
14
+ namespace: 'MediaStreamTrackManager',
15
+ logLevel,
16
+ });
17
+ }
18
+
19
+ async createMediaStreamTrack({ label, constraints }: GetMediaStreamTrackParams): Promise<MediaStreamTrack> {
20
+ if (MediaStreamTrackManager.isDisplayMedia(label)) {
21
+ const [track] = await this.createDisplayMediaTracks(constraints);
22
+ return track;
23
+ }
24
+
25
+ const [track] = await this.createUserMediaTracks(constraints);
26
+ return track;
27
+ }
28
+
29
+ private static isDisplayMedia(label: TrackLabel): boolean {
30
+ return [TrackLabel.ScreenVideo, TrackLabel.ScreenAudio].includes(label);
31
+ }
32
+
33
+ async createUserMediaTracks(constraints: MediaStreamConstraints): Promise<MediaStreamTrack[]> {
34
+ const stream = await navigator.mediaDevices.getUserMedia(constraints);
35
+ this.#logger.debug('createUserMediaTracks() stream created', { streamId: stream.id });
36
+ return stream.getTracks();
37
+ }
38
+
39
+ async createDisplayMediaTracks(constraints: MediaStreamConstraints): Promise<MediaStreamTrack[]> {
40
+ const stream = await navigator.mediaDevices.getDisplayMedia(constraints);
41
+ this.#logger.debug('getDisplayMediaTracks() stream created', { streamId: stream.id });
42
+ return stream.getTracks();
43
+ }
44
+ }
45
+
46
+ export default MediaStreamTrackManager;
@@ -351,7 +351,7 @@ export type UpdatePeerAppDataPayload = {
351
351
  };
352
352
 
353
353
  export type CreateTracksPayload = {
354
- stream: MediaStream,
354
+ mediaStreamTracks: MediaStreamTrack[],
355
355
  constraints: MediaStreamConstraints,
356
356
  };
357
357
 
@@ -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,11 +0,0 @@
1
- import { TrackLabel } from '../../../types/common';
2
- declare class TrackMediaStreamManager {
3
- #private;
4
- constructor(constraints: MediaStreamConstraints);
5
- setLabel(label: TrackLabel): void;
6
- getMediaStreamTrack(): Promise<MediaStreamTrack>;
7
- private get isDisplayMedia();
8
- private getUserMediaTrack;
9
- private getDisplayMediaTrack;
10
- }
11
- export default TrackMediaStreamManager;
@@ -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 {};