mediasoup-client 3.6.52 → 3.6.55
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.vimrc +21 -0
- package/NO_GIT/Notes.txt +18 -0
- package/lib/Consumer.d.ts +16 -18
- package/lib/Consumer.d.ts.map +1 -1
- package/lib/Consumer.js +11 -17
- package/lib/DataConsumer.d.ts +13 -15
- package/lib/DataConsumer.d.ts.map +1 -1
- package/lib/DataConsumer.js +0 -13
- package/lib/DataProducer.d.ts +13 -15
- package/lib/DataProducer.d.ts.map +1 -1
- package/lib/DataProducer.js +0 -13
- package/lib/Device.d.ts +4 -6
- package/lib/Device.d.ts.map +1 -1
- package/lib/Device.js +1 -10
- package/lib/EnhancedEventEmitter.d.ts +19 -3
- package/lib/EnhancedEventEmitter.d.ts.map +1 -1
- package/lib/EnhancedEventEmitter.js +50 -14
- package/lib/Producer.d.ts +37 -22
- package/lib/Producer.d.ts.map +1 -1
- package/lib/Producer.js +18 -28
- package/lib/Transport.d.ts +43 -18
- package/lib/Transport.d.ts.map +1 -1
- package/lib/Transport.js +87 -41
- package/lib/handlers/Chrome55.d.ts +3 -1
- package/lib/handlers/Chrome55.d.ts.map +1 -1
- package/lib/handlers/Chrome55.js +20 -12
- package/lib/handlers/Chrome67.d.ts +3 -1
- package/lib/handlers/Chrome67.d.ts.map +1 -1
- package/lib/handlers/Chrome67.js +20 -12
- package/lib/handlers/Chrome70.d.ts +3 -1
- package/lib/handlers/Chrome70.d.ts.map +1 -1
- package/lib/handlers/Chrome70.js +23 -13
- package/lib/handlers/Chrome74.d.ts +3 -1
- package/lib/handlers/Chrome74.d.ts.map +1 -1
- package/lib/handlers/Chrome74.js +43 -13
- package/lib/handlers/Edge11.d.ts +3 -1
- package/lib/handlers/Edge11.d.ts.map +1 -1
- package/lib/handlers/Edge11.js +26 -18
- package/lib/handlers/FakeHandler.d.ts +5 -3
- package/lib/handlers/FakeHandler.d.ts.map +1 -1
- package/lib/handlers/FakeHandler.js +14 -8
- package/lib/handlers/Firefox60.d.ts +3 -1
- package/lib/handlers/Firefox60.d.ts.map +1 -1
- package/lib/handlers/Firefox60.js +45 -13
- package/lib/handlers/HandlerInterface.d.ts +15 -11
- package/lib/handlers/HandlerInterface.d.ts.map +1 -1
- package/lib/handlers/HandlerInterface.js +0 -8
- package/lib/handlers/ReactNative.d.ts +3 -1
- package/lib/handlers/ReactNative.d.ts.map +1 -1
- package/lib/handlers/ReactNative.js +20 -12
- package/lib/handlers/Safari11.d.ts +3 -1
- package/lib/handlers/Safari11.d.ts.map +1 -1
- package/lib/handlers/Safari11.js +20 -12
- package/lib/handlers/Safari12.d.ts +3 -1
- package/lib/handlers/Safari12.d.ts.map +1 -1
- package/lib/handlers/Safari12.js +45 -13
- package/lib/handlers/ortc/edgeUtils.js +1 -5
- package/lib/handlers/sdp/MediaSection.js +1 -5
- package/lib/handlers/sdp/RemoteSdp.js +1 -5
- package/lib/handlers/sdp/commonUtils.js +1 -5
- package/lib/index.d.ts +1 -1
- package/lib/index.js +2 -6
- package/lib/ortc.js +1 -5
- package/lib/types.js +1 -5
- package/lib/utils.d.ts.map +1 -1
- package/package.json +7 -7
- package/src/Consumer.ts +44 -20
- package/src/DataConsumer.ts +19 -16
- package/src/DataProducer.ts +19 -16
- package/src/Device.ts +6 -6
- package/src/EnhancedEventEmitter.ts +105 -22
- package/src/Producer.ts +97 -31
- package/src/Transport.ts +185 -58
- package/src/handlers/Chrome55.ts +31 -8
- package/src/handlers/Chrome67.ts +31 -8
- package/src/handlers/Chrome70.ts +34 -8
- package/src/handlers/Chrome74.ts +82 -8
- package/src/handlers/Edge11.ts +38 -15
- package/src/handlers/FakeHandler.ts +22 -6
- package/src/handlers/Firefox60.ts +84 -8
- package/src/handlers/HandlerInterface.ts +19 -11
- package/src/handlers/ReactNative.ts +31 -8
- package/src/handlers/Safari11.ts +31 -8
- package/src/handlers/Safari12.ts +84 -8
- 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
|
-
|
|
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
|
+
}
|
|
27
|
+
|
|
28
|
+
export type ConsumerObserverEvents =
|
|
29
|
+
{
|
|
30
|
+
close: [];
|
|
31
|
+
pause: [];
|
|
32
|
+
resume: [];
|
|
33
|
+
trackended: [];
|
|
34
|
+
}
|
|
16
35
|
|
|
17
|
-
export class Consumer extends EnhancedEventEmitter
|
|
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
|
|
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
|
/**
|
|
@@ -250,6 +260,13 @@ export class Consumer extends EnhancedEventEmitter
|
|
|
250
260
|
return;
|
|
251
261
|
}
|
|
252
262
|
|
|
263
|
+
if (this._paused)
|
|
264
|
+
{
|
|
265
|
+
logger.debug('pause() | Consumer is already paused');
|
|
266
|
+
|
|
267
|
+
return;
|
|
268
|
+
}
|
|
269
|
+
|
|
253
270
|
this._paused = true;
|
|
254
271
|
this._track.enabled = false;
|
|
255
272
|
|
|
@@ -273,6 +290,13 @@ export class Consumer extends EnhancedEventEmitter
|
|
|
273
290
|
return;
|
|
274
291
|
}
|
|
275
292
|
|
|
293
|
+
if (!this._paused)
|
|
294
|
+
{
|
|
295
|
+
logger.debug('resume() | Consumer is already resumed');
|
|
296
|
+
|
|
297
|
+
return;
|
|
298
|
+
}
|
|
299
|
+
|
|
276
300
|
this._paused = false;
|
|
277
301
|
this._track.enabled = true;
|
|
278
302
|
|
package/src/DataConsumer.ts
CHANGED
|
@@ -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
|
-
|
|
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;
|
package/src/DataProducer.ts
CHANGED
|
@@ -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
|
-
|
|
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
|
|
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
|
-
|
|
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
|
-
|
|
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 =
|
|
26
|
+
const numListeners = super.listenerCount(eventName);
|
|
17
27
|
|
|
18
28
|
try
|
|
19
29
|
{
|
|
20
|
-
return
|
|
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 [
|
|
26
|
-
|
|
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
|
-
|
|
42
|
+
on<K extends keyof E & string>(
|
|
43
|
+
eventName: K,
|
|
44
|
+
listener: (...args: E[K]) => void
|
|
45
|
+
): this
|
|
33
46
|
{
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
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,50 @@ export type ProducerCodecOptions =
|
|
|
34
36
|
videoGoogleMinBitrate?: number;
|
|
35
37
|
}
|
|
36
38
|
|
|
37
|
-
|
|
39
|
+
export type ProducerEvents =
|
|
40
|
+
{
|
|
41
|
+
transportclose: [];
|
|
42
|
+
trackended: [];
|
|
43
|
+
// Private events.
|
|
44
|
+
'@pause': [
|
|
45
|
+
() => void,
|
|
46
|
+
(error: Error) => void
|
|
47
|
+
];
|
|
48
|
+
'@resume': [
|
|
49
|
+
() => void,
|
|
50
|
+
(error: Error) => void
|
|
51
|
+
];
|
|
52
|
+
'@replacetrack':
|
|
53
|
+
[
|
|
54
|
+
MediaStreamTrack | null,
|
|
55
|
+
() => void,
|
|
56
|
+
(error: Error) => void
|
|
57
|
+
];
|
|
58
|
+
'@setmaxspatiallayer':
|
|
59
|
+
[
|
|
60
|
+
number,
|
|
61
|
+
() => void,
|
|
62
|
+
(error: Error) => void
|
|
63
|
+
];
|
|
64
|
+
'@setrtpencodingparameters':
|
|
65
|
+
[
|
|
66
|
+
RTCRtpEncodingParameters,
|
|
67
|
+
() => void,
|
|
68
|
+
(error: Error) => void
|
|
69
|
+
];
|
|
70
|
+
'@getstats': [(stats: RTCStatsReport) => void, (error: Error) => void];
|
|
71
|
+
'@close': [];
|
|
72
|
+
}
|
|
38
73
|
|
|
39
|
-
export
|
|
74
|
+
export type ProducerObserverEvents =
|
|
75
|
+
{
|
|
76
|
+
close: [];
|
|
77
|
+
pause: [];
|
|
78
|
+
resume: [];
|
|
79
|
+
trackended: [];
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
export class Producer extends EnhancedEventEmitter<ProducerEvents>
|
|
40
83
|
{
|
|
41
84
|
// Id.
|
|
42
85
|
private readonly _id: string;
|
|
@@ -65,17 +108,8 @@ export class Producer extends EnhancedEventEmitter
|
|
|
65
108
|
// App custom data.
|
|
66
109
|
private readonly _appData: Record<string, unknown>;
|
|
67
110
|
// Observer instance.
|
|
68
|
-
protected readonly _observer = new EnhancedEventEmitter();
|
|
111
|
+
protected readonly _observer = new EnhancedEventEmitter<ProducerObserverEvents>();
|
|
69
112
|
|
|
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
113
|
constructor(
|
|
80
114
|
{
|
|
81
115
|
id,
|
|
@@ -216,14 +250,6 @@ export class Producer extends EnhancedEventEmitter
|
|
|
216
250
|
throw new Error('cannot override appData object');
|
|
217
251
|
}
|
|
218
252
|
|
|
219
|
-
/**
|
|
220
|
-
* Observer.
|
|
221
|
-
*
|
|
222
|
-
* @emits close
|
|
223
|
-
* @emits pause
|
|
224
|
-
* @emits resume
|
|
225
|
-
* @emits trackended
|
|
226
|
-
*/
|
|
227
253
|
get observer(): EnhancedEventEmitter
|
|
228
254
|
{
|
|
229
255
|
return this._observer;
|
|
@@ -277,7 +303,14 @@ export class Producer extends EnhancedEventEmitter
|
|
|
277
303
|
if (this._closed)
|
|
278
304
|
throw new InvalidStateError('closed');
|
|
279
305
|
|
|
280
|
-
return
|
|
306
|
+
return new Promise<RTCStatsReport>((resolve, reject) =>
|
|
307
|
+
{
|
|
308
|
+
this.safeEmit(
|
|
309
|
+
'@getstats',
|
|
310
|
+
resolve,
|
|
311
|
+
reject
|
|
312
|
+
);
|
|
313
|
+
});
|
|
281
314
|
}
|
|
282
315
|
|
|
283
316
|
/**
|
|
@@ -303,8 +336,14 @@ export class Producer extends EnhancedEventEmitter
|
|
|
303
336
|
|
|
304
337
|
if (this._zeroRtpOnPause)
|
|
305
338
|
{
|
|
306
|
-
|
|
307
|
-
|
|
339
|
+
new Promise<void>((resolve, reject) =>
|
|
340
|
+
{
|
|
341
|
+
this.safeEmit(
|
|
342
|
+
'@pause',
|
|
343
|
+
resolve,
|
|
344
|
+
reject
|
|
345
|
+
);
|
|
346
|
+
}).catch(() => {});
|
|
308
347
|
}
|
|
309
348
|
|
|
310
349
|
// Emit observer event.
|
|
@@ -334,8 +373,14 @@ export class Producer extends EnhancedEventEmitter
|
|
|
334
373
|
|
|
335
374
|
if (this._zeroRtpOnPause)
|
|
336
375
|
{
|
|
337
|
-
|
|
338
|
-
|
|
376
|
+
new Promise<void>((resolve, reject) =>
|
|
377
|
+
{
|
|
378
|
+
this.safeEmit(
|
|
379
|
+
'@resume',
|
|
380
|
+
resolve,
|
|
381
|
+
reject
|
|
382
|
+
);
|
|
383
|
+
}).catch(() => {});
|
|
339
384
|
}
|
|
340
385
|
|
|
341
386
|
// Emit observer event.
|
|
@@ -376,7 +421,15 @@ export class Producer extends EnhancedEventEmitter
|
|
|
376
421
|
|
|
377
422
|
if (!this._zeroRtpOnPause || !this._paused)
|
|
378
423
|
{
|
|
379
|
-
await
|
|
424
|
+
await new Promise<void>((resolve, reject) =>
|
|
425
|
+
{
|
|
426
|
+
this.safeEmit(
|
|
427
|
+
'@replacetrack',
|
|
428
|
+
track,
|
|
429
|
+
resolve,
|
|
430
|
+
reject
|
|
431
|
+
);
|
|
432
|
+
});
|
|
380
433
|
}
|
|
381
434
|
|
|
382
435
|
// Destroy the previous track.
|
|
@@ -414,14 +467,19 @@ export class Producer extends EnhancedEventEmitter
|
|
|
414
467
|
if (spatialLayer === this._maxSpatialLayer)
|
|
415
468
|
return;
|
|
416
469
|
|
|
417
|
-
await
|
|
470
|
+
await new Promise<void>((resolve, reject) =>
|
|
471
|
+
{
|
|
472
|
+
this.safeEmit(
|
|
473
|
+
'@setmaxspatiallayer',
|
|
474
|
+
spatialLayer,
|
|
475
|
+
resolve,
|
|
476
|
+
reject
|
|
477
|
+
);
|
|
478
|
+
}).catch(() => {});
|
|
418
479
|
|
|
419
480
|
this._maxSpatialLayer = spatialLayer;
|
|
420
481
|
}
|
|
421
482
|
|
|
422
|
-
/**
|
|
423
|
-
* Sets the DSCP value.
|
|
424
|
-
*/
|
|
425
483
|
async setRtpEncodingParameters(
|
|
426
484
|
params: RTCRtpEncodingParameters
|
|
427
485
|
): Promise<void>
|
|
@@ -431,7 +489,15 @@ export class Producer extends EnhancedEventEmitter
|
|
|
431
489
|
else if (typeof params !== 'object')
|
|
432
490
|
throw new TypeError('invalid params');
|
|
433
491
|
|
|
434
|
-
await
|
|
492
|
+
await new Promise<void>((resolve, reject) =>
|
|
493
|
+
{
|
|
494
|
+
this.safeEmit(
|
|
495
|
+
'@setrtpencodingparameters',
|
|
496
|
+
params,
|
|
497
|
+
resolve,
|
|
498
|
+
reject
|
|
499
|
+
);
|
|
500
|
+
});
|
|
435
501
|
}
|
|
436
502
|
|
|
437
503
|
private _onTrackEnded(): void
|