@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.
Files changed (48) hide show
  1. package/dist/engine/DefaultEngineDependenciesFactory.d.ts +1 -1
  2. package/dist/engine/index.d.ts +0 -1
  3. package/dist/engine/media/tracks/BaseTrack.d.ts +0 -3
  4. package/dist/index.es.js +1 -1
  5. package/dist/index.js +2 -2
  6. package/dist/types/common.d.ts +0 -4
  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 +19 -22
  11. package/src/engine/media/index.ts +9 -16
  12. package/src/engine/media/tracks/BaseTrack.ts +5 -22
  13. package/src/types/common.ts +0 -5
  14. package/src/types/engine.ts +1 -2
  15. package/dist/engine/media/tracks/MediaStreamTrackManager.d.ts +0 -14
  16. package/dist/engine/wid/WebRTCIssueDetector.d.ts +0 -20
  17. package/dist/engine/wid/WebRTCIssueEmitter.d.ts +0 -11
  18. package/dist/engine/wid/detectors/AvailableOutgoingBitrateIssueDetector.d.ts +0 -6
  19. package/dist/engine/wid/detectors/FramesDroppedIssueDetector.d.ts +0 -7
  20. package/dist/engine/wid/detectors/FramesEncodedSentIssueDetector.d.ts +0 -7
  21. package/dist/engine/wid/detectors/InboundNetworkIssueDetector.d.ts +0 -7
  22. package/dist/engine/wid/detectors/NetworkMediaSyncIssueDetector.d.ts +0 -7
  23. package/dist/engine/wid/detectors/OutboundNetworkIssueDetector.d.ts +0 -7
  24. package/dist/engine/wid/detectors/QualityLimitationsIssueDetector.d.ts +0 -7
  25. package/dist/engine/wid/detectors/VideoCodecMismatchDetector.d.ts +0 -10
  26. package/dist/engine/wid/lib/NetworkScoresCalculator.d.ts +0 -9
  27. package/dist/engine/wid/lib/PeriodicWebRTCStatsReporter.d.ts +0 -20
  28. package/dist/engine/wid/lib/parser/CompositeRTCStatsParser.d.ts +0 -22
  29. package/dist/engine/wid/lib/parser/RTCStatsParser.d.ts +0 -20
  30. package/dist/engine/wid/lib/parser/utils.d.ts +0 -7
  31. package/dist/engine/wid/types.d.ts +0 -381
  32. package/src/engine/media/tracks/MediaStreamTrackManager.ts +0 -46
  33. package/src/engine/wid/WebRTCIssueDetector.ts +0 -136
  34. package/src/engine/wid/WebRTCIssueEmitter.ts +0 -16
  35. package/src/engine/wid/detectors/AvailableOutgoingBitrateIssueDetector.ts +0 -57
  36. package/src/engine/wid/detectors/FramesDroppedIssueDetector.ts +0 -65
  37. package/src/engine/wid/detectors/FramesEncodedSentIssueDetector.ts +0 -69
  38. package/src/engine/wid/detectors/InboundNetworkIssueDetector.ts +0 -120
  39. package/src/engine/wid/detectors/NetworkMediaSyncIssueDetector.ts +0 -60
  40. package/src/engine/wid/detectors/OutboundNetworkIssueDetector.ts +0 -96
  41. package/src/engine/wid/detectors/QualityLimitationsIssueDetector.ts +0 -63
  42. package/src/engine/wid/detectors/VideoCodecMismatchDetector.ts +0 -78
  43. package/src/engine/wid/lib/NetworkScoresCalculator.ts +0 -126
  44. package/src/engine/wid/lib/PeriodicWebRTCStatsReporter.ts +0 -66
  45. package/src/engine/wid/lib/parser/CompositeRTCStatsParser.ts +0 -82
  46. package/src/engine/wid/lib/parser/RTCStatsParser.ts +0 -274
  47. package/src/engine/wid/lib/parser/utils.ts +0 -40
  48. package/src/engine/wid/types.ts +0 -408
@@ -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
  };
@@ -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.2",
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 {
@@ -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
  }
@@ -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.createSelfPeerTrack(track);
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?.close();
484
+ peerTrack?.pause();
472
485
  });
473
486
 
474
487
  this.clientEventEmitter.on(INTERNAL_CLIENT_EVENTS.trackResumed, (track: Track) => {
475
- this.createSelfPeerTrack(track);
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({ constraints, mediaStreamTracks }: CreateTracksPayload): Track[] {
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 mediaStreamTracks = await this.#mediaStreamTrackManager.createUserMediaTracks(constraints);
97
- return this.createTracks({ constraints, mediaStreamTracks });
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 mediaStreamTracks = await this.#mediaStreamTrackManager.createDisplayMediaTracks(constraints);
102
- return this.createTracks({ constraints, mediaStreamTracks });
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 { CLIENT_EVENTS, INTERNAL_CLIENT_EVENTS, MEDIASOUP_EVENTS } from '../../../constants/events';
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, constraints, mediaStreamTrackManager,
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);
@@ -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
  };
@@ -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 {};