mediasoup-client 3.6.50 → 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 (85) hide show
  1. package/lib/Consumer.d.ts +22 -24
  2. package/lib/Consumer.d.ts.map +1 -1
  3. package/lib/Consumer.js +5 -18
  4. package/lib/DataConsumer.d.ts +17 -19
  5. package/lib/DataConsumer.d.ts.map +1 -1
  6. package/lib/DataConsumer.js +2 -14
  7. package/lib/DataProducer.d.ts +17 -19
  8. package/lib/DataProducer.d.ts.map +1 -1
  9. package/lib/DataProducer.js +2 -14
  10. package/lib/Device.d.ts +4 -6
  11. package/lib/Device.d.ts.map +1 -1
  12. package/lib/Device.js +8 -9
  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 +35 -28
  17. package/lib/Producer.d.ts.map +1 -1
  18. package/lib/Producer.js +20 -29
  19. package/lib/Transport.d.ts +49 -21
  20. package/lib/Transport.d.ts.map +1 -1
  21. package/lib/Transport.js +97 -31
  22. package/lib/handlers/Chrome55.d.ts +2 -2
  23. package/lib/handlers/Chrome55.d.ts.map +1 -1
  24. package/lib/handlers/Chrome55.js +10 -4
  25. package/lib/handlers/Chrome67.d.ts +2 -2
  26. package/lib/handlers/Chrome67.d.ts.map +1 -1
  27. package/lib/handlers/Chrome67.js +10 -4
  28. package/lib/handlers/Chrome70.d.ts +2 -2
  29. package/lib/handlers/Chrome70.d.ts.map +1 -1
  30. package/lib/handlers/Chrome70.js +10 -4
  31. package/lib/handlers/Chrome74.d.ts +2 -2
  32. package/lib/handlers/Chrome74.d.ts.map +1 -1
  33. package/lib/handlers/Chrome74.js +24 -14
  34. package/lib/handlers/Edge11.d.ts +2 -2
  35. package/lib/handlers/Edge11.d.ts.map +1 -1
  36. package/lib/handlers/Edge11.js +10 -4
  37. package/lib/handlers/FakeHandler.d.ts +4 -4
  38. package/lib/handlers/FakeHandler.d.ts.map +1 -1
  39. package/lib/handlers/FakeHandler.js +7 -3
  40. package/lib/handlers/Firefox60.d.ts +2 -2
  41. package/lib/handlers/Firefox60.d.ts.map +1 -1
  42. package/lib/handlers/Firefox60.js +24 -14
  43. package/lib/handlers/HandlerInterface.d.ts +14 -12
  44. package/lib/handlers/HandlerInterface.d.ts.map +1 -1
  45. package/lib/handlers/HandlerInterface.js +0 -8
  46. package/lib/handlers/ReactNative.d.ts +2 -2
  47. package/lib/handlers/ReactNative.d.ts.map +1 -1
  48. package/lib/handlers/ReactNative.js +10 -4
  49. package/lib/handlers/Safari11.d.ts +2 -2
  50. package/lib/handlers/Safari11.d.ts.map +1 -1
  51. package/lib/handlers/Safari11.js +10 -4
  52. package/lib/handlers/Safari12.d.ts +2 -2
  53. package/lib/handlers/Safari12.d.ts.map +1 -1
  54. package/lib/handlers/Safari12.js +24 -14
  55. package/lib/handlers/ortc/edgeUtils.js +5 -1
  56. package/lib/handlers/sdp/MediaSection.js +5 -1
  57. package/lib/handlers/sdp/RemoteSdp.js +5 -1
  58. package/lib/handlers/sdp/commonUtils.js +5 -1
  59. package/lib/index.d.ts +1 -1
  60. package/lib/index.js +6 -2
  61. package/lib/ortc.js +5 -1
  62. package/lib/types.js +5 -1
  63. package/lib/utils.d.ts.map +1 -1
  64. package/package.json +11 -11
  65. package/src/Consumer.ts +40 -29
  66. package/src/DataConsumer.ts +26 -22
  67. package/src/DataProducer.ts +26 -22
  68. package/src/Device.ts +9 -9
  69. package/src/EnhancedEventEmitter.ts +105 -22
  70. package/src/Producer.ts +99 -38
  71. package/src/Transport.ts +193 -52
  72. package/src/handlers/Chrome55.ts +12 -4
  73. package/src/handlers/Chrome67.ts +11 -3
  74. package/src/handlers/Chrome70.ts +11 -3
  75. package/src/handlers/Chrome74.ts +29 -15
  76. package/src/handlers/Edge11.ts +11 -3
  77. package/src/handlers/FakeHandler.ts +6 -5
  78. package/src/handlers/Firefox60.ts +29 -15
  79. package/src/handlers/HandlerInterface.ts +16 -12
  80. package/src/handlers/ReactNative.ts +11 -3
  81. package/src/handlers/Safari11.ts +11 -3
  82. package/src/handlers/Safari12.ts +29 -15
  83. package/src/utils.ts +0 -1
  84. package/.vimrc +0 -21
  85. package/NO_GIT/Notes.txt +0 -18
@@ -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;
@@ -10,12 +12,26 @@ export type DataProducerOptions =
10
12
  maxRetransmits?: number;
11
13
  label?: string;
12
14
  protocol?: string;
13
- appData?: any;
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;
@@ -26,18 +42,10 @@ export class DataProducer extends EnhancedEventEmitter
26
42
  // SCTP stream parameters.
27
43
  private readonly _sctpStreamParameters: SctpStreamParameters;
28
44
  // App custom data.
29
- private readonly _appData: any;
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,
@@ -49,7 +57,7 @@ export class DataProducer extends EnhancedEventEmitter
49
57
  id: string;
50
58
  dataChannel: RTCDataChannel;
51
59
  sctpStreamParameters: SctpStreamParameters;
52
- appData: any;
60
+ appData?: Record<string, unknown>;
53
61
  }
54
62
  )
55
63
  {
@@ -60,7 +68,7 @@ export class DataProducer extends EnhancedEventEmitter
60
68
  this._id = id;
61
69
  this._dataChannel = dataChannel;
62
70
  this._sctpStreamParameters = sctpStreamParameters;
63
- this._appData = appData;
71
+ this._appData = appData || {};
64
72
 
65
73
  this._handleDataChannel();
66
74
  }
@@ -140,7 +148,7 @@ export class DataProducer extends EnhancedEventEmitter
140
148
  /**
141
149
  * App custom data.
142
150
  */
143
- get appData(): any
151
+ get appData(): Record<string, unknown>
144
152
  {
145
153
  return this._appData;
146
154
  }
@@ -148,16 +156,12 @@ export class DataProducer extends EnhancedEventEmitter
148
156
  /**
149
157
  * Invalid setter.
150
158
  */
151
- set appData(appData: any) // eslint-disable-line no-unused-vars
159
+ // eslint-disable-next-line @typescript-eslint/no-unused-vars
160
+ set appData(appData: Record<string, unknown>)
152
161
  {
153
162
  throw new Error('cannot override appData object');
154
163
  }
155
164
 
156
- /**
157
- * Observer.
158
- *
159
- * @emits close
160
- */
161
165
  get observer(): EnhancedEventEmitter
162
166
  {
163
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;
@@ -465,7 +465,7 @@ export class Device
465
465
  iceTransportPolicy,
466
466
  additionalSettings,
467
467
  proprietaryConstraints,
468
- appData = {}
468
+ appData
469
469
  }: TransportOptions
470
470
  ): Transport
471
471
  {
@@ -504,7 +504,7 @@ export class Device
504
504
  iceTransportPolicy,
505
505
  additionalSettings,
506
506
  proprietaryConstraints,
507
- appData = {}
507
+ appData
508
508
  }: TransportOptions
509
509
  ): Transport
510
510
  {
@@ -538,7 +538,7 @@ export class Device
538
538
  iceTransportPolicy,
539
539
  additionalSettings,
540
540
  proprietaryConstraints,
541
- appData = {}
541
+ appData
542
542
  }: InternalTransportOptions
543
543
  ): Transport
544
544
  {
@@ -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;
@@ -17,7 +19,7 @@ export type ProducerOptions =
17
19
  stopTracks?: boolean;
18
20
  disableTrackOnPause?: boolean;
19
21
  zeroRtpOnPause?: boolean;
20
- appData?: any;
22
+ appData?: Record<string, unknown>;
21
23
  }
22
24
 
23
25
  // https://mediasoup.org/documentation/v3/mediasoup-client/api/#ProducerCodecOptions
@@ -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;
@@ -63,19 +98,10 @@ export class Producer extends EnhancedEventEmitter
63
98
  // Whether we should replace the RTCRtpSender.track with null when paused.
64
99
  private _zeroRtpOnPause: boolean;
65
100
  // App custom data.
66
- private readonly _appData: any;
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,
@@ -97,7 +123,7 @@ export class Producer extends EnhancedEventEmitter
97
123
  stopTracks: boolean;
98
124
  disableTrackOnPause: boolean;
99
125
  zeroRtpOnPause: boolean;
100
- appData: any;
126
+ appData?: Record<string, unknown>;
101
127
  }
102
128
  )
103
129
  {
@@ -116,7 +142,7 @@ export class Producer extends EnhancedEventEmitter
116
142
  this._stopTracks = stopTracks;
117
143
  this._disableTrackOnPause = disableTrackOnPause;
118
144
  this._zeroRtpOnPause = zeroRtpOnPause;
119
- this._appData = appData;
145
+ this._appData = appData || {};
120
146
  this._onTrackEnded = this._onTrackEnded.bind(this);
121
147
 
122
148
  // NOTE: Minor issue. If zeroRtpOnPause is true, we cannot emit the
@@ -152,7 +178,7 @@ export class Producer extends EnhancedEventEmitter
152
178
  /**
153
179
  * Media kind.
154
180
  */
155
- get kind(): string
181
+ get kind(): MediaKind
156
182
  {
157
183
  return this._kind;
158
184
  }
@@ -202,7 +228,7 @@ export class Producer extends EnhancedEventEmitter
202
228
  /**
203
229
  * App custom data.
204
230
  */
205
- get appData(): any
231
+ get appData(): Record<string, unknown>
206
232
  {
207
233
  return this._appData;
208
234
  }
@@ -210,19 +236,12 @@ export class Producer extends EnhancedEventEmitter
210
236
  /**
211
237
  * Invalid setter.
212
238
  */
213
- set appData(appData) // eslint-disable-line @typescript-eslint/no-unused-vars
239
+ // eslint-disable-next-line @typescript-eslint/no-unused-vars
240
+ set appData(appData: Record<string, unknown>)
214
241
  {
215
242
  throw new Error('cannot override appData object');
216
243
  }
217
244
 
218
- /**
219
- * Observer.
220
- *
221
- * @emits close
222
- * @emits pause
223
- * @emits resume
224
- * @emits trackended
225
- */
226
245
  get observer(): EnhancedEventEmitter
227
246
  {
228
247
  return this._observer;
@@ -276,7 +295,14 @@ export class Producer extends EnhancedEventEmitter
276
295
  if (this._closed)
277
296
  throw new InvalidStateError('closed');
278
297
 
279
- return this.safeEmitAsPromise('@getstats');
298
+ return new Promise<RTCStatsReport>((resolve, reject) =>
299
+ {
300
+ this.safeEmit(
301
+ '@getstats',
302
+ resolve,
303
+ reject
304
+ );
305
+ });
280
306
  }
281
307
 
282
308
  /**
@@ -302,8 +328,15 @@ export class Producer extends EnhancedEventEmitter
302
328
 
303
329
  if (this._zeroRtpOnPause)
304
330
  {
305
- this.safeEmitAsPromise('@replacetrack', null)
306
- .catch(() => {});
331
+ new Promise<void>((resolve, reject) =>
332
+ {
333
+ this.safeEmit(
334
+ '@replacetrack',
335
+ null,
336
+ resolve,
337
+ reject
338
+ );
339
+ }).catch(() => {});
307
340
  }
308
341
 
309
342
  // Emit observer event.
@@ -333,8 +366,15 @@ export class Producer extends EnhancedEventEmitter
333
366
 
334
367
  if (this._zeroRtpOnPause)
335
368
  {
336
- this.safeEmitAsPromise('@replacetrack', this._track)
337
- .catch(() => {});
369
+ new Promise<void>((resolve, reject) =>
370
+ {
371
+ this.safeEmit(
372
+ '@replacetrack',
373
+ this._track,
374
+ resolve,
375
+ reject
376
+ );
377
+ }).catch(() => {});
338
378
  }
339
379
 
340
380
  // Emit observer event.
@@ -375,7 +415,15 @@ export class Producer extends EnhancedEventEmitter
375
415
 
376
416
  if (!this._zeroRtpOnPause || !this._paused)
377
417
  {
378
- 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
+ });
379
427
  }
380
428
 
381
429
  // Destroy the previous track.
@@ -413,14 +461,19 @@ export class Producer extends EnhancedEventEmitter
413
461
  if (spatialLayer === this._maxSpatialLayer)
414
462
  return;
415
463
 
416
- 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(() => {});
417
473
 
418
474
  this._maxSpatialLayer = spatialLayer;
419
475
  }
420
476
 
421
- /**
422
- * Sets the DSCP value.
423
- */
424
477
  async setRtpEncodingParameters(
425
478
  params: RTCRtpEncodingParameters
426
479
  ): Promise<void>
@@ -430,7 +483,15 @@ export class Producer extends EnhancedEventEmitter
430
483
  else if (typeof params !== 'object')
431
484
  throw new TypeError('invalid params');
432
485
 
433
- 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
+ });
434
495
  }
435
496
 
436
497
  private _onTrackEnded(): void