mediasoup-client 3.6.52 → 3.6.53

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 (67) hide show
  1. package/lib/Consumer.d.ts +16 -18
  2. package/lib/Consumer.d.ts.map +1 -1
  3. package/lib/Consumer.js +3 -17
  4. package/lib/DataConsumer.d.ts +13 -15
  5. package/lib/DataConsumer.d.ts.map +1 -1
  6. package/lib/DataConsumer.js +0 -13
  7. package/lib/DataProducer.d.ts +13 -15
  8. package/lib/DataProducer.d.ts.map +1 -1
  9. package/lib/DataProducer.js +0 -13
  10. package/lib/Device.d.ts +4 -6
  11. package/lib/Device.d.ts.map +1 -1
  12. package/lib/Device.js +0 -5
  13. package/lib/EnhancedEventEmitter.d.ts +19 -3
  14. package/lib/EnhancedEventEmitter.d.ts.map +1 -1
  15. package/lib/EnhancedEventEmitter.js +50 -14
  16. package/lib/Producer.d.ts +29 -22
  17. package/lib/Producer.d.ts.map +1 -1
  18. package/lib/Producer.js +18 -28
  19. package/lib/Transport.d.ts +40 -18
  20. package/lib/Transport.d.ts.map +1 -1
  21. package/lib/Transport.js +14 -25
  22. package/lib/handlers/Chrome55.d.ts.map +1 -1
  23. package/lib/handlers/Chrome55.js +3 -1
  24. package/lib/handlers/Chrome67.d.ts.map +1 -1
  25. package/lib/handlers/Chrome67.js +3 -1
  26. package/lib/handlers/Chrome70.d.ts.map +1 -1
  27. package/lib/handlers/Chrome70.js +3 -1
  28. package/lib/handlers/Chrome74.d.ts.map +1 -1
  29. package/lib/handlers/Chrome74.js +3 -1
  30. package/lib/handlers/Edge11.d.ts.map +1 -1
  31. package/lib/handlers/Edge11.js +3 -1
  32. package/lib/handlers/FakeHandler.d.ts +2 -2
  33. package/lib/handlers/FakeHandler.d.ts.map +1 -1
  34. package/lib/handlers/Firefox60.d.ts.map +1 -1
  35. package/lib/handlers/Firefox60.js +3 -1
  36. package/lib/handlers/HandlerInterface.d.ts +12 -10
  37. package/lib/handlers/HandlerInterface.d.ts.map +1 -1
  38. package/lib/handlers/HandlerInterface.js +0 -8
  39. package/lib/handlers/ReactNative.d.ts.map +1 -1
  40. package/lib/handlers/ReactNative.js +3 -1
  41. package/lib/handlers/Safari11.d.ts.map +1 -1
  42. package/lib/handlers/Safari11.js +3 -1
  43. package/lib/handlers/Safari12.d.ts.map +1 -1
  44. package/lib/handlers/Safari12.js +3 -1
  45. package/lib/index.d.ts +1 -1
  46. package/lib/index.js +1 -1
  47. package/lib/utils.d.ts.map +1 -1
  48. package/package.json +7 -7
  49. package/src/Consumer.ts +30 -20
  50. package/src/DataConsumer.ts +19 -16
  51. package/src/DataProducer.ts +19 -16
  52. package/src/Device.ts +6 -6
  53. package/src/EnhancedEventEmitter.ts +105 -22
  54. package/src/Producer.ts +91 -31
  55. package/src/Transport.ts +73 -39
  56. package/src/handlers/Chrome55.ts +9 -1
  57. package/src/handlers/Chrome67.ts +9 -1
  58. package/src/handlers/Chrome70.ts +9 -1
  59. package/src/handlers/Chrome74.ts +9 -1
  60. package/src/handlers/Edge11.ts +9 -1
  61. package/src/handlers/FakeHandler.ts +4 -3
  62. package/src/handlers/Firefox60.ts +9 -1
  63. package/src/handlers/HandlerInterface.ts +14 -10
  64. package/src/handlers/ReactNative.ts +9 -1
  65. package/src/handlers/Safari11.ts +9 -1
  66. package/src/handlers/Safari12.ts +9 -1
  67. package/src/utils.ts +0 -1
package/src/Consumer.ts CHANGED
@@ -3,6 +3,8 @@ import { EnhancedEventEmitter } from './EnhancedEventEmitter';
3
3
  import { InvalidStateError } from './errors';
4
4
  import { MediaKind, RtpParameters } from './RtpParameters';
5
5
 
6
+ const logger = new Logger('Consumer');
7
+
6
8
  export type ConsumerOptions =
7
9
  {
8
10
  id?: string;
@@ -12,9 +14,26 @@ export type ConsumerOptions =
12
14
  appData?: Record<string, unknown>;
13
15
  }
14
16
 
15
- const logger = new Logger('Consumer');
17
+ export type ConsumerEvents =
18
+ {
19
+ transportclose: [];
20
+ trackended: [];
21
+ // Private events.
22
+ '@getstats': [(stats: RTCStatsReport) => void, (error: Error) => void];
23
+ '@close': [];
24
+ '@pause': [];
25
+ '@resume': [];
26
+ }
16
27
 
17
- export class Consumer extends EnhancedEventEmitter
28
+ export type ConsumerObserverEvents =
29
+ {
30
+ close: [];
31
+ pause: [];
32
+ resume: [];
33
+ trackended: [];
34
+ }
35
+
36
+ export class Consumer extends EnhancedEventEmitter<ConsumerEvents>
18
37
  {
19
38
  // Id.
20
39
  private readonly _id: string;
@@ -35,16 +54,8 @@ export class Consumer extends EnhancedEventEmitter
35
54
  // App custom data.
36
55
  private readonly _appData: Record<string, unknown>;
37
56
  // Observer instance.
38
- protected readonly _observer = new EnhancedEventEmitter();
57
+ protected readonly _observer = new EnhancedEventEmitter<ConsumerObserverEvents>();
39
58
 
40
- /**
41
- * @emits transportclose
42
- * @emits trackended
43
- * @emits @getstats
44
- * @emits @close
45
- * @emits @pause
46
- * @emits @resume
47
- */
48
59
  constructor(
49
60
  {
50
61
  id,
@@ -172,14 +183,6 @@ export class Consumer extends EnhancedEventEmitter
172
183
  throw new Error('cannot override appData object');
173
184
  }
174
185
 
175
- /**
176
- * Observer.
177
- *
178
- * @emits close
179
- * @emits pause
180
- * @emits resume
181
- * @emits trackended
182
- */
183
186
  get observer(): EnhancedEventEmitter
184
187
  {
185
188
  return this._observer;
@@ -233,7 +236,14 @@ export class Consumer extends EnhancedEventEmitter
233
236
  if (this._closed)
234
237
  throw new InvalidStateError('closed');
235
238
 
236
- return this.safeEmitAsPromise('@getstats');
239
+ return new Promise<RTCStatsReport>((resolve, reject) =>
240
+ {
241
+ this.safeEmit(
242
+ '@getstats',
243
+ resolve,
244
+ reject
245
+ );
246
+ });
237
247
  }
238
248
 
239
249
  /**
@@ -2,6 +2,8 @@ import { Logger } from './Logger';
2
2
  import { EnhancedEventEmitter } from './EnhancedEventEmitter';
3
3
  import { SctpStreamParameters } from './SctpParameters';
4
4
 
5
+ const logger = new Logger('DataConsumer');
6
+
5
7
  export type DataConsumerOptions =
6
8
  {
7
9
  id?: string;
@@ -12,9 +14,23 @@ export type DataConsumerOptions =
12
14
  appData?: Record<string, unknown>;
13
15
  }
14
16
 
15
- const logger = new Logger('DataConsumer');
17
+ export type DataConsumerEvents =
18
+ {
19
+ transportclose: [];
20
+ open: [];
21
+ error: [Error];
22
+ close: [];
23
+ message: [any];
24
+ // Private events.
25
+ '@close': [];
26
+ }
27
+
28
+ export type DataConsumerObserverEvents =
29
+ {
30
+ close: [];
31
+ }
16
32
 
17
- export class DataConsumer extends EnhancedEventEmitter
33
+ export class DataConsumer extends EnhancedEventEmitter<DataConsumerEvents>
18
34
  {
19
35
  // Id.
20
36
  private readonly _id: string;
@@ -29,16 +45,8 @@ export class DataConsumer extends EnhancedEventEmitter
29
45
  // App custom data.
30
46
  private readonly _appData: Record<string, unknown>;
31
47
  // Observer instance.
32
- protected readonly _observer = new EnhancedEventEmitter();
48
+ protected readonly _observer = new EnhancedEventEmitter<DataConsumerObserverEvents>();
33
49
 
34
- /**
35
- * @emits transportclose
36
- * @emits open
37
- * @emits error - (error: Error)
38
- * @emits close
39
- * @emits message - (message: any)
40
- * @emits @close
41
- */
42
50
  constructor(
43
51
  {
44
52
  id,
@@ -158,11 +166,6 @@ export class DataConsumer extends EnhancedEventEmitter
158
166
  throw new Error('cannot override appData object');
159
167
  }
160
168
 
161
- /**
162
- * Observer.
163
- *
164
- * @emits close
165
- */
166
169
  get observer(): EnhancedEventEmitter
167
170
  {
168
171
  return this._observer;
@@ -3,6 +3,8 @@ import { EnhancedEventEmitter } from './EnhancedEventEmitter';
3
3
  import { InvalidStateError } from './errors';
4
4
  import { SctpStreamParameters } from './SctpParameters';
5
5
 
6
+ const logger = new Logger('DataProducer');
7
+
6
8
  export type DataProducerOptions =
7
9
  {
8
10
  ordered?: boolean;
@@ -13,9 +15,23 @@ export type DataProducerOptions =
13
15
  appData?: Record<string, unknown>;
14
16
  }
15
17
 
16
- const logger = new Logger('DataProducer');
18
+ export type DataProducerEvents =
19
+ {
20
+ transportclose: [];
21
+ open: [];
22
+ error: [Error];
23
+ close: [];
24
+ bufferedamountlow: [];
25
+ // Private events.
26
+ '@close': [];
27
+ }
17
28
 
18
- export class DataProducer extends EnhancedEventEmitter
29
+ export type DataProducerObserverEvents =
30
+ {
31
+ close: [];
32
+ }
33
+
34
+ export class DataProducer extends EnhancedEventEmitter<DataProducerEvents>
19
35
  {
20
36
  // Id.
21
37
  private readonly _id: string;
@@ -28,16 +44,8 @@ export class DataProducer extends EnhancedEventEmitter
28
44
  // App custom data.
29
45
  private readonly _appData: Record<string, unknown>;
30
46
  // Observer instance.
31
- protected readonly _observer = new EnhancedEventEmitter();
47
+ protected readonly _observer = new EnhancedEventEmitter<DataProducerObserverEvents>();
32
48
 
33
- /**
34
- * @emits transportclose
35
- * @emits open
36
- * @emits error - (error: Error)
37
- * @emits close
38
- * @emits bufferedamountlow
39
- * @emits @close
40
- */
41
49
  constructor(
42
50
  {
43
51
  id,
@@ -154,11 +162,6 @@ export class DataProducer extends EnhancedEventEmitter
154
162
  throw new Error('cannot override appData object');
155
163
  }
156
164
 
157
- /**
158
- * Observer.
159
- *
160
- * @emits close
161
- */
162
165
  get observer(): EnhancedEventEmitter
163
166
  {
164
167
  return this._observer;
package/src/Device.ts CHANGED
@@ -179,6 +179,11 @@ export function detectDevice(): BuiltinHandlerName | undefined
179
179
  }
180
180
  }
181
181
 
182
+ export type DeviceObserverEvents =
183
+ {
184
+ newtransport: [Transport];
185
+ }
186
+
182
187
  export class Device
183
188
  {
184
189
  // RTC handler factory.
@@ -197,7 +202,7 @@ export class Device
197
202
  // Local SCTP capabilities.
198
203
  private _sctpCapabilities?: SctpCapabilities;
199
204
  // Observer instance.
200
- protected readonly _observer = new EnhancedEventEmitter();
205
+ protected readonly _observer = new EnhancedEventEmitter<DeviceObserverEvents>();
201
206
 
202
207
  /**
203
208
  * Create a new Device to connect to mediasoup server.
@@ -340,11 +345,6 @@ export class Device
340
345
  return this._sctpCapabilities!;
341
346
  }
342
347
 
343
- /**
344
- * Observer.
345
- *
346
- * @emits newtransport - (transport: Transport)
347
- */
348
348
  get observer(): EnhancedEventEmitter
349
349
  {
350
350
  return this._observer;
@@ -3,7 +3,9 @@ import { Logger } from './Logger';
3
3
 
4
4
  const logger = new Logger('EnhancedEventEmitter');
5
5
 
6
- export class EnhancedEventEmitter extends EventEmitter
6
+ type Events = Record<string, any[]>
7
+
8
+ export class EnhancedEventEmitter<E extends Events = Events> extends EventEmitter
7
9
  {
8
10
  constructor()
9
11
  {
@@ -11,40 +13,121 @@ export class EnhancedEventEmitter extends EventEmitter
11
13
  this.setMaxListeners(Infinity);
12
14
  }
13
15
 
14
- safeEmit(event: string, ...args: any[]): boolean
16
+ emit<K extends keyof E & string>(eventName: K, ...args: E[K]): boolean
17
+ {
18
+ return super.emit(eventName, ...args);
19
+ }
20
+
21
+ /**
22
+ * Special addition to the EventEmitter API.
23
+ */
24
+ safeEmit<K extends keyof E & string>(eventName: K, ...args: E[K]): boolean
15
25
  {
16
- const numListeners = this.listenerCount(event);
26
+ const numListeners = super.listenerCount(eventName);
17
27
 
18
28
  try
19
29
  {
20
- return this.emit(event, ...args);
30
+ return super.emit(eventName, ...args);
21
31
  }
22
32
  catch (error)
23
33
  {
24
34
  logger.error(
25
- 'safeEmit() | event listener threw an error [event:%s]:%o',
26
- event, error);
35
+ 'safeEmit() | event listener threw an error [eventName:%s]:%o',
36
+ eventName, error);
27
37
 
28
38
  return Boolean(numListeners);
29
39
  }
30
40
  }
31
41
 
32
- async safeEmitAsPromise(event: string, ...args: any[]): Promise<any>
42
+ on<K extends keyof E & string>(
43
+ eventName: K,
44
+ listener: (...args: E[K]) => void
45
+ ): this
33
46
  {
34
- return new Promise((resolve, reject) =>
35
- {
36
- try
37
- {
38
- this.emit(event, ...args, resolve, reject);
39
- }
40
- catch (error)
41
- {
42
- logger.error(
43
- 'safeEmitAsPromise() | event listener threw an error [event:%s]:%o',
44
- event, error);
45
-
46
- reject(error);
47
- }
48
- });
47
+ super.on(eventName, listener as (...args: any[]) => void);
48
+
49
+ return this;
50
+ }
51
+
52
+ off<K extends keyof E & string>(
53
+ eventName: K,
54
+ listener: (...args: E[K]) => void
55
+ ): this
56
+ {
57
+ super.off(eventName, listener as (...args: any[]) => void);
58
+
59
+ return this;
60
+ }
61
+
62
+ addListener<K extends keyof E & string>(
63
+ eventName: K,
64
+ listener: (...args: E[K]) => void
65
+ ): this
66
+ {
67
+ super.on(eventName, listener as (...args: any[]) => void);
68
+
69
+ return this;
70
+ }
71
+
72
+ prependListener<K extends keyof E & string>(
73
+ eventName: K,
74
+ listener: (...args: E[K]) => void
75
+ ): this
76
+ {
77
+ super.prependListener(eventName, listener as (...args: any[]) => void);
78
+
79
+ return this;
80
+ }
81
+
82
+ once<K extends keyof E & string>(
83
+ eventName: K,
84
+ listener: (...args: E[K]) => void
85
+ ): this
86
+ {
87
+ super.once(eventName, listener as (...args: any[]) => void);
88
+
89
+ return this;
90
+ }
91
+
92
+ prependOnceListener<K extends keyof E & string>(
93
+ eventName: K,
94
+ listener: (...args: E[K]) => void
95
+ ): this
96
+ {
97
+ super.prependOnceListener(eventName, listener as (...args: any[]) => void);
98
+
99
+ return this;
100
+ }
101
+
102
+ removeListener<K extends keyof E & string>(
103
+ eventName: K,
104
+ listener: (...args: E[K]) => void
105
+ ): this
106
+ {
107
+ super.off(eventName, listener as (...args: any[]) => void);
108
+
109
+ return this;
110
+ }
111
+
112
+ removeAllListeners<K extends keyof E & string>(eventName: K): this
113
+ {
114
+ super.removeAllListeners(eventName);
115
+
116
+ return this;
117
+ }
118
+
119
+ listenerCount<K extends keyof E & string>(eventName: K): number
120
+ {
121
+ return super.listenerCount(eventName);
122
+ }
123
+
124
+ listeners<K extends keyof E & string>(eventName: K): Function[]
125
+ {
126
+ return super.listeners(eventName);
127
+ }
128
+
129
+ rawListeners<K extends keyof E & string>(eventName: K): Function[]
130
+ {
131
+ return super.rawListeners(eventName);
49
132
  }
50
133
  }
package/src/Producer.ts CHANGED
@@ -8,6 +8,8 @@ import {
8
8
  RtpEncodingParameters
9
9
  } from './RtpParameters';
10
10
 
11
+ const logger = new Logger('Producer');
12
+
11
13
  export type ProducerOptions =
12
14
  {
13
15
  track?: MediaStreamTrack;
@@ -34,9 +36,42 @@ export type ProducerCodecOptions =
34
36
  videoGoogleMinBitrate?: number;
35
37
  }
36
38
 
37
- const logger = new Logger('Producer');
39
+ export type ProducerEvents =
40
+ {
41
+ transportclose: [];
42
+ trackended: [];
43
+ // Private events.
44
+ '@replacetrack':
45
+ [
46
+ MediaStreamTrack | null,
47
+ () => void,
48
+ (error: Error) => void
49
+ ];
50
+ '@setmaxspatiallayer':
51
+ [
52
+ number,
53
+ () => void,
54
+ (error: Error) => void
55
+ ];
56
+ '@setrtpencodingparameters':
57
+ [
58
+ RTCRtpEncodingParameters,
59
+ () => void,
60
+ (error: Error) => void
61
+ ];
62
+ '@getstats': [(stats: RTCStatsReport) => void, (error: Error) => void];
63
+ '@close': [];
64
+ }
38
65
 
39
- export class Producer extends EnhancedEventEmitter
66
+ export type ProducerObserverEvents =
67
+ {
68
+ close: [];
69
+ pause: [];
70
+ resume: [];
71
+ trackended: [];
72
+ }
73
+
74
+ export class Producer extends EnhancedEventEmitter<ProducerEvents>
40
75
  {
41
76
  // Id.
42
77
  private readonly _id: string;
@@ -65,17 +100,8 @@ export class Producer extends EnhancedEventEmitter
65
100
  // App custom data.
66
101
  private readonly _appData: Record<string, unknown>;
67
102
  // Observer instance.
68
- protected readonly _observer = new EnhancedEventEmitter();
103
+ protected readonly _observer = new EnhancedEventEmitter<ProducerObserverEvents>();
69
104
 
70
- /**
71
- * @emits transportclose
72
- * @emits trackended
73
- * @emits @replacetrack - (track: MediaStreamTrack | null)
74
- * @emits @setmaxspatiallayer - (spatialLayer: string)
75
- * @emits @setrtpencodingparameters - (params: any)
76
- * @emits @getstats
77
- * @emits @close
78
- */
79
105
  constructor(
80
106
  {
81
107
  id,
@@ -216,14 +242,6 @@ export class Producer extends EnhancedEventEmitter
216
242
  throw new Error('cannot override appData object');
217
243
  }
218
244
 
219
- /**
220
- * Observer.
221
- *
222
- * @emits close
223
- * @emits pause
224
- * @emits resume
225
- * @emits trackended
226
- */
227
245
  get observer(): EnhancedEventEmitter
228
246
  {
229
247
  return this._observer;
@@ -277,7 +295,14 @@ export class Producer extends EnhancedEventEmitter
277
295
  if (this._closed)
278
296
  throw new InvalidStateError('closed');
279
297
 
280
- return this.safeEmitAsPromise('@getstats');
298
+ return new Promise<RTCStatsReport>((resolve, reject) =>
299
+ {
300
+ this.safeEmit(
301
+ '@getstats',
302
+ resolve,
303
+ reject
304
+ );
305
+ });
281
306
  }
282
307
 
283
308
  /**
@@ -303,8 +328,15 @@ export class Producer extends EnhancedEventEmitter
303
328
 
304
329
  if (this._zeroRtpOnPause)
305
330
  {
306
- this.safeEmitAsPromise('@replacetrack', null)
307
- .catch(() => {});
331
+ new Promise<void>((resolve, reject) =>
332
+ {
333
+ this.safeEmit(
334
+ '@replacetrack',
335
+ null,
336
+ resolve,
337
+ reject
338
+ );
339
+ }).catch(() => {});
308
340
  }
309
341
 
310
342
  // Emit observer event.
@@ -334,8 +366,15 @@ export class Producer extends EnhancedEventEmitter
334
366
 
335
367
  if (this._zeroRtpOnPause)
336
368
  {
337
- this.safeEmitAsPromise('@replacetrack', this._track)
338
- .catch(() => {});
369
+ new Promise<void>((resolve, reject) =>
370
+ {
371
+ this.safeEmit(
372
+ '@replacetrack',
373
+ this._track,
374
+ resolve,
375
+ reject
376
+ );
377
+ }).catch(() => {});
339
378
  }
340
379
 
341
380
  // Emit observer event.
@@ -376,7 +415,15 @@ export class Producer extends EnhancedEventEmitter
376
415
 
377
416
  if (!this._zeroRtpOnPause || !this._paused)
378
417
  {
379
- await this.safeEmitAsPromise('@replacetrack', track);
418
+ await new Promise<void>((resolve, reject) =>
419
+ {
420
+ this.safeEmit(
421
+ '@replacetrack',
422
+ track,
423
+ resolve,
424
+ reject
425
+ );
426
+ });
380
427
  }
381
428
 
382
429
  // Destroy the previous track.
@@ -414,14 +461,19 @@ export class Producer extends EnhancedEventEmitter
414
461
  if (spatialLayer === this._maxSpatialLayer)
415
462
  return;
416
463
 
417
- await this.safeEmitAsPromise('@setmaxspatiallayer', spatialLayer);
464
+ await new Promise<void>((resolve, reject) =>
465
+ {
466
+ this.safeEmit(
467
+ '@setmaxspatiallayer',
468
+ spatialLayer,
469
+ resolve,
470
+ reject
471
+ );
472
+ }).catch(() => {});
418
473
 
419
474
  this._maxSpatialLayer = spatialLayer;
420
475
  }
421
476
 
422
- /**
423
- * Sets the DSCP value.
424
- */
425
477
  async setRtpEncodingParameters(
426
478
  params: RTCRtpEncodingParameters
427
479
  ): Promise<void>
@@ -431,7 +483,15 @@ export class Producer extends EnhancedEventEmitter
431
483
  else if (typeof params !== 'object')
432
484
  throw new TypeError('invalid params');
433
485
 
434
- await this.safeEmitAsPromise('@setrtpencodingparameters', params);
486
+ await new Promise<void>((resolve, reject) =>
487
+ {
488
+ this.safeEmit(
489
+ '@setrtpencodingparameters',
490
+ params,
491
+ resolve,
492
+ reject
493
+ );
494
+ });
435
495
  }
436
496
 
437
497
  private _onTrackEnded(): void