@observertc/observer-js 1.0.1-7be4daa.0 → 1.0.1-87c501f.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.
- package/lib/ObservedCall.d.ts.map +1 -1
- package/lib/ObservedCall.js +13 -1
- package/lib/ObservedClient.d.ts +1 -0
- package/lib/ObservedClient.d.ts.map +1 -1
- package/lib/ObservedClient.js +123 -6
- package/lib/ObservedInboundTrack.d.ts +1 -0
- package/lib/ObservedInboundTrack.d.ts.map +1 -1
- package/lib/ObservedInboundTrack.js +1 -0
- package/lib/ObservedOutboundTrack.d.ts +1 -0
- package/lib/ObservedOutboundTrack.d.ts.map +1 -1
- package/lib/ObservedOutboundTrack.js +1 -0
- package/lib/ObservedPeerConnection.d.ts +22 -0
- package/lib/ObservedPeerConnection.d.ts.map +1 -1
- package/lib/ObservedPeerConnection.js +18 -0
- package/lib/ObserverEventMonitor.d.ts +32 -0
- package/lib/ObserverEventMonitor.d.ts.map +1 -1
- package/lib/ObserverEventMonitor.js +113 -0
- package/lib/index.d.ts +1 -1
- package/lib/index.d.ts.map +1 -1
- package/lib/schema/ClientEventTypes.d.ts +147 -79
- package/lib/schema/ClientEventTypes.d.ts.map +1 -1
- package/lib/schema/ClientEventTypes.js +5 -2
- package/package.json +1 -1
- package/src/ObservedCall.ts +12 -1
- package/src/ObservedClient.ts +124 -6
- package/src/ObservedInboundTrack.ts +2 -0
- package/src/ObservedOutboundTrack.ts +2 -0
- package/src/ObservedPeerConnection.ts +39 -0
- package/src/ObserverEventMonitor.ts +153 -0
- package/src/index.ts +1 -2
- package/src/schema/ClientEventTypes.ts +187 -83
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ClientEventTypes.d.ts","sourceRoot":"","sources":["../../src/schema/ClientEventTypes.ts"],"names":[],"mappings":"AAEA,
|
|
1
|
+
{"version":3,"file":"ClientEventTypes.d.ts","sourceRoot":"","sources":["../../src/schema/ClientEventTypes.ts"],"names":[],"mappings":"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"}
|
|
@@ -21,9 +21,10 @@ var ClientEventTypes;
|
|
|
21
21
|
ClientEventTypes["DATA_CHANNEL_ERROR"] = "DATA_CHANNEL_ERROR";
|
|
22
22
|
ClientEventTypes["NEGOTIATION_NEEDED"] = "NEGOTIATION_NEEDED";
|
|
23
23
|
ClientEventTypes["SIGNALING_STATE_CHANGE"] = "SIGNALING_STATE_CHANGE";
|
|
24
|
-
|
|
25
|
-
|
|
24
|
+
// ICE_GATHERING_STATE_CHANGE = 'ICE_GATHERING_STATE_CHANGE',
|
|
25
|
+
// ICE_CONNECTION_STATE_CHANGE = 'ICE_CONNECTION_STATE_CHANGE',
|
|
26
26
|
ClientEventTypes["ICE_CANDIDATE"] = "ICE_CANDIDATE";
|
|
27
|
+
ClientEventTypes["ICE_CANDIDATE_ERROR"] = "ICE_CANDIDATE_ERROR";
|
|
27
28
|
// mediasoup events
|
|
28
29
|
ClientEventTypes["PRODUCER_ADDED"] = "PRODUCER_ADDED";
|
|
29
30
|
ClientEventTypes["PRODUCER_REMOVED"] = "PRODUCER_REMOVED";
|
|
@@ -31,6 +32,8 @@ var ClientEventTypes;
|
|
|
31
32
|
ClientEventTypes["PRODUCER_RESUMED"] = "PRODUCER_RESUMED";
|
|
32
33
|
ClientEventTypes["CONSUMER_ADDED"] = "CONSUMER_ADDED";
|
|
33
34
|
ClientEventTypes["CONSUMER_REMOVED"] = "CONSUMER_REMOVED";
|
|
35
|
+
ClientEventTypes["CONSUMER_PAUSED"] = "CONSUMER_PAUSED";
|
|
36
|
+
ClientEventTypes["CONSUMER_RESUMED"] = "CONSUMER_RESUMED";
|
|
34
37
|
ClientEventTypes["DATA_PRODUCER_CREATED"] = "DATA_PRODUCER_CREATED";
|
|
35
38
|
ClientEventTypes["DATA_PRODUCER_CLOSED"] = "DATA_PRODUCER_CLOSED";
|
|
36
39
|
ClientEventTypes["DATA_CONSUMER_CREATED"] = "DATA_CONSUMER_CREATED";
|
package/package.json
CHANGED
package/src/ObservedCall.ts
CHANGED
|
@@ -157,7 +157,18 @@ export class ObservedCall<AppData extends Record<string, unknown> = Record<strin
|
|
|
157
157
|
|
|
158
158
|
this.updater?.close();
|
|
159
159
|
|
|
160
|
-
|
|
160
|
+
let minSampleTimestamps: number | undefined;
|
|
161
|
+
let maxSampleTimestamps: number | undefined;
|
|
162
|
+
|
|
163
|
+
for (const client of this.observedClients.values()) {
|
|
164
|
+
client.close();
|
|
165
|
+
|
|
166
|
+
if (client.joinedAt) minSampleTimestamps = Math.min(minSampleTimestamps ?? client.joinedAt, client.joinedAt);
|
|
167
|
+
if (client.leftAt) maxSampleTimestamps = Math.max(maxSampleTimestamps ?? client.leftAt, client.leftAt);
|
|
168
|
+
}
|
|
169
|
+
|
|
170
|
+
if (this.startedAt === undefined) this.startedAt = minSampleTimestamps;
|
|
171
|
+
if (this.endedAt === undefined) this.endedAt = maxSampleTimestamps;
|
|
161
172
|
|
|
162
173
|
this.closedAt = Date.now();
|
|
163
174
|
this.emit('close');
|
package/src/ObservedClient.ts
CHANGED
|
@@ -66,6 +66,7 @@ export class ObservedClient<AppData extends Record<string, unknown> = Record<str
|
|
|
66
66
|
public joinedAt?: number;
|
|
67
67
|
public leftAt?: number;
|
|
68
68
|
public closedAt?: number;
|
|
69
|
+
public lastSampleTimestamp?: number;
|
|
69
70
|
// the timestamp of the CLIENT_JOINED event
|
|
70
71
|
public operationSystem?: MetaData.OperationSystem;
|
|
71
72
|
public engine?: MetaData.Engine;
|
|
@@ -163,7 +164,13 @@ export class ObservedClient<AppData extends Record<string, unknown> = Record<str
|
|
|
163
164
|
this.closed = true;
|
|
164
165
|
|
|
165
166
|
Array.from(this.observedPeerConnections.values()).forEach((peerConnection) => peerConnection.close());
|
|
167
|
+
if (!this.leftAt) {
|
|
168
|
+
this.leftAt = this.lastSampleTimestamp;
|
|
166
169
|
|
|
170
|
+
if (this.leftAt) {
|
|
171
|
+
this.emit('left');
|
|
172
|
+
}
|
|
173
|
+
}
|
|
167
174
|
this.closedAt = Date.now();
|
|
168
175
|
|
|
169
176
|
this.emit('close');
|
|
@@ -327,6 +334,7 @@ export class ObservedClient<AppData extends Record<string, unknown> = Record<str
|
|
|
327
334
|
this.calculatedScore.value = sample.score;
|
|
328
335
|
this.detectors.update();
|
|
329
336
|
|
|
337
|
+
this.lastSampleTimestamp = sample.timestamp;
|
|
330
338
|
// emit update
|
|
331
339
|
this.emit('update', {
|
|
332
340
|
sample,
|
|
@@ -357,6 +365,7 @@ export class ObservedClient<AppData extends Record<string, unknown> = Record<str
|
|
|
357
365
|
logger.warn(`Client ${this.clientId} joinedAt timestamp was updated to ${event.timestamp}. the joined event will not be emitted.`);
|
|
358
366
|
}
|
|
359
367
|
}
|
|
368
|
+
logger.debug('Client %s joined at %o', this.clientId, event);
|
|
360
369
|
break;
|
|
361
370
|
}
|
|
362
371
|
case ClientEventTypes.CLIENT_LEFT: {
|
|
@@ -367,7 +376,9 @@ export class ObservedClient<AppData extends Record<string, unknown> = Record<str
|
|
|
367
376
|
} else {
|
|
368
377
|
logger.warn(`Client ${this.clientId} leftAt timestamp was already set`);
|
|
369
378
|
}
|
|
379
|
+
|
|
370
380
|
}
|
|
381
|
+
logger.debug('Client %s left at %o', this.clientId, event);
|
|
371
382
|
break;
|
|
372
383
|
}
|
|
373
384
|
case ClientEventTypes.PEER_CONNECTION_OPENED: {
|
|
@@ -381,7 +392,7 @@ export class ObservedClient<AppData extends Record<string, unknown> = Record<str
|
|
|
381
392
|
} else if (postBuffer) {
|
|
382
393
|
postBuffer.push(event);
|
|
383
394
|
} else {
|
|
384
|
-
logger.warn('Received PEER_CONNECTION_OPENED event without a corresponding observedPeerConnection', event);
|
|
395
|
+
logger.warn('Received PEER_CONNECTION_OPENED event without a corresponding observedPeerConnection: %o', event);
|
|
385
396
|
}
|
|
386
397
|
|
|
387
398
|
}
|
|
@@ -398,7 +409,7 @@ export class ObservedClient<AppData extends Record<string, unknown> = Record<str
|
|
|
398
409
|
} else if (postBuffer) {
|
|
399
410
|
postBuffer.push(event);
|
|
400
411
|
} else {
|
|
401
|
-
logger.warn('Received PEER_CONNECTION_CLOSED event without a corresponding observedPeerConnection', event);
|
|
412
|
+
logger.warn('Received PEER_CONNECTION_CLOSED event without a corresponding observedPeerConnection: %o', event);
|
|
402
413
|
}
|
|
403
414
|
}
|
|
404
415
|
break;
|
|
@@ -415,7 +426,7 @@ export class ObservedClient<AppData extends Record<string, unknown> = Record<str
|
|
|
415
426
|
} else if (postBuffer) {
|
|
416
427
|
postBuffer.push(event);
|
|
417
428
|
} else {
|
|
418
|
-
logger.warn('Received MEDIA_TRACK_ADDED event without a corresponding observedPeerConnection or observedTrack', event);
|
|
429
|
+
logger.warn('Received MEDIA_TRACK_ADDED event without a corresponding observedPeerConnection or observedTrack: %o', event);
|
|
419
430
|
}
|
|
420
431
|
}
|
|
421
432
|
break;
|
|
@@ -432,7 +443,7 @@ export class ObservedClient<AppData extends Record<string, unknown> = Record<str
|
|
|
432
443
|
} else if (postBuffer) {
|
|
433
444
|
postBuffer.push(event);
|
|
434
445
|
} else {
|
|
435
|
-
logger.warn('Received MEDIA_TRACK_REMOVED event without a corresponding observedPeerConnection or observedTrack', event);
|
|
446
|
+
logger.warn('Received MEDIA_TRACK_REMOVED event without a corresponding observedPeerConnection or observedTrack: %o', event);
|
|
436
447
|
}
|
|
437
448
|
}
|
|
438
449
|
break;
|
|
@@ -449,7 +460,7 @@ export class ObservedClient<AppData extends Record<string, unknown> = Record<str
|
|
|
449
460
|
} else if (postBuffer) {
|
|
450
461
|
postBuffer.push(event);
|
|
451
462
|
} else {
|
|
452
|
-
logger.warn('Received DATA_CHANNEL_OPENED event without a corresponding observedPeerConnection or observedDataChannel', event);
|
|
463
|
+
logger.warn('Received DATA_CHANNEL_OPENED event without a corresponding observedPeerConnection or observedDataChannel: %o', event);
|
|
453
464
|
}
|
|
454
465
|
}
|
|
455
466
|
break;
|
|
@@ -466,12 +477,119 @@ export class ObservedClient<AppData extends Record<string, unknown> = Record<str
|
|
|
466
477
|
} else if (postBuffer) {
|
|
467
478
|
postBuffer.push(event);
|
|
468
479
|
} else {
|
|
469
|
-
logger.warn('Received DATA_CHANNEL_CLOSE event without a corresponding observedPeerConnection or observedDataChannel', event);
|
|
480
|
+
logger.warn('Received DATA_CHANNEL_CLOSE event without a corresponding observedPeerConnection or observedDataChannel: %o', event);
|
|
481
|
+
}
|
|
482
|
+
}
|
|
483
|
+
break;
|
|
484
|
+
}
|
|
485
|
+
case ClientEventTypes.MEDIA_TRACK_MUTED: {
|
|
486
|
+
const payload = parseJsonAs<Record<string, unknown>>(event.payload);
|
|
487
|
+
|
|
488
|
+
if (payload?.peerConnectionId && typeof payload.peerConnectionId === 'string' && payload?.trackId && typeof payload.trackId === 'string') {
|
|
489
|
+
const observedPeerConnection = this.observedPeerConnections.get(payload.peerConnectionId);
|
|
490
|
+
const observedInboundTrack = observedPeerConnection?.observedInboundTracks.get(payload.trackId);
|
|
491
|
+
const observedOutboundTrack = observedPeerConnection?.observedOutboundTracks.get(payload.trackId);
|
|
492
|
+
|
|
493
|
+
if (observedPeerConnection) {
|
|
494
|
+
if (observedInboundTrack) {
|
|
495
|
+
observedInboundTrack.muted = true;
|
|
496
|
+
observedPeerConnection?.emit('muted-inbound-track', observedInboundTrack);
|
|
497
|
+
} else if (observedOutboundTrack) {
|
|
498
|
+
observedOutboundTrack.muted = true;
|
|
499
|
+
observedPeerConnection?.emit('muted-outbound-track', observedOutboundTrack);
|
|
500
|
+
}
|
|
501
|
+
} else if (postBuffer) {
|
|
502
|
+
postBuffer.push(event);
|
|
503
|
+
} else {
|
|
504
|
+
logger.warn('Received MEDIA_TRACK_MUTED event without a corresponding observedPeerConnection or observedTrack: %o', event);
|
|
505
|
+
}
|
|
506
|
+
}
|
|
507
|
+
|
|
508
|
+
break;
|
|
509
|
+
}
|
|
510
|
+
case ClientEventTypes.MEDIA_TRACK_UNMUTED: {
|
|
511
|
+
const payload = parseJsonAs<Record<string, unknown>>(event.payload);
|
|
512
|
+
|
|
513
|
+
if (payload?.peerConnectionId && typeof payload.peerConnectionId === 'string' && payload?.trackId && typeof payload.trackId === 'string') {
|
|
514
|
+
const observedPeerConnection = this.observedPeerConnections.get(payload.peerConnectionId);
|
|
515
|
+
const observedInboundTrack = observedPeerConnection?.observedInboundTracks.get(payload.trackId);
|
|
516
|
+
const observedOutboundTrack = observedPeerConnection?.observedOutboundTracks.get(payload.trackId);
|
|
517
|
+
|
|
518
|
+
if (observedPeerConnection) {
|
|
519
|
+
if (observedInboundTrack) {
|
|
520
|
+
observedInboundTrack.muted = false;
|
|
521
|
+
observedPeerConnection?.emit('unmuted-inbound-track', observedInboundTrack);
|
|
522
|
+
} else if (observedOutboundTrack) {
|
|
523
|
+
observedOutboundTrack.muted = false;
|
|
524
|
+
observedPeerConnection?.emit('unmuted-outbound-track', observedOutboundTrack);
|
|
525
|
+
}
|
|
526
|
+
} else if (postBuffer) {
|
|
527
|
+
postBuffer.push(event);
|
|
528
|
+
} else {
|
|
529
|
+
logger.warn('Received MEDIA_TRACK_UNMUTED event without a corresponding observedPeerConnection or observedTrack: %o', event);
|
|
530
|
+
}
|
|
531
|
+
}
|
|
532
|
+
break;
|
|
533
|
+
}
|
|
534
|
+
case ClientEventTypes.ICE_CONNECTION_STATE_CHANGED: {
|
|
535
|
+
const payload = parseJsonAs<Record<string, unknown>>(event.payload);
|
|
536
|
+
|
|
537
|
+
if (payload?.peerConnectionId && typeof payload.peerConnectionId === 'string' && payload?.iceConnectionState && typeof payload.iceConnectionState === 'string') {
|
|
538
|
+
const observedPeerConnection = this.observedPeerConnections.get(payload.peerConnectionId);
|
|
539
|
+
|
|
540
|
+
if (observedPeerConnection) {
|
|
541
|
+
observedPeerConnection.iceConnectionState = payload.iceConnectionState;
|
|
542
|
+
observedPeerConnection.emit('iceconnectionstatechange', {
|
|
543
|
+
state: payload.iceConnectionState,
|
|
544
|
+
});
|
|
545
|
+
} else if (postBuffer) {
|
|
546
|
+
postBuffer.push(event);
|
|
547
|
+
} else {
|
|
548
|
+
logger.warn('Received ICE_CONNECTION_STATE_CHANGED event without a corresponding observedPeerConnection: %o', event);
|
|
549
|
+
}
|
|
550
|
+
}
|
|
551
|
+
break;
|
|
552
|
+
}
|
|
553
|
+
case ClientEventTypes.ICE_GATHERING_STATE_CHANGED: {
|
|
554
|
+
const payload = parseJsonAs<Record<string, unknown>>(event.payload);
|
|
555
|
+
|
|
556
|
+
if (payload?.peerConnectionId && typeof payload.peerConnectionId === 'string' && payload?.iceGatheringState && typeof payload.iceGatheringState === 'string') {
|
|
557
|
+
const observedPeerConnection = this.observedPeerConnections.get(payload.peerConnectionId);
|
|
558
|
+
|
|
559
|
+
if (observedPeerConnection) {
|
|
560
|
+
observedPeerConnection.iceGatheringState = payload.iceGatheringState;
|
|
561
|
+
observedPeerConnection.emit('icegatheringstatechange', {
|
|
562
|
+
state: payload.iceGatheringState,
|
|
563
|
+
});
|
|
564
|
+
} else if (postBuffer) {
|
|
565
|
+
postBuffer.push(event);
|
|
566
|
+
} else {
|
|
567
|
+
logger.warn('Received ICE_GATHERING_STATE_CHANGED event without a corresponding observedPeerConnection: %o', event);
|
|
568
|
+
}
|
|
569
|
+
}
|
|
570
|
+
break;
|
|
571
|
+
}
|
|
572
|
+
case ClientEventTypes.PEER_CONNECTION_STATE_CHANGED: {
|
|
573
|
+
const payload = parseJsonAs<Record<string, unknown>>(event.payload);
|
|
574
|
+
|
|
575
|
+
if (payload?.peerConnectionId && typeof payload.peerConnectionId === 'string' && payload?.peerConnectionState && typeof payload.peerConnectionState === 'string') {
|
|
576
|
+
const observedPeerConnection = this.observedPeerConnections.get(payload.peerConnectionId);
|
|
577
|
+
|
|
578
|
+
if (observedPeerConnection) {
|
|
579
|
+
observedPeerConnection.connectionState = payload.peerConnectionState;
|
|
580
|
+
observedPeerConnection.emit('connectionstatechange', {
|
|
581
|
+
state: payload.peerConnectionState,
|
|
582
|
+
});
|
|
583
|
+
} else if (postBuffer) {
|
|
584
|
+
postBuffer.push(event);
|
|
585
|
+
} else {
|
|
586
|
+
logger.warn('Received PEER_CONNECTION_STATE_CHANGED event without a corresponding observedPeerConnection: %o', event);
|
|
470
587
|
}
|
|
471
588
|
}
|
|
472
589
|
break;
|
|
473
590
|
}
|
|
474
591
|
}
|
|
592
|
+
|
|
475
593
|
this.emit('clientEvent', event);
|
|
476
594
|
}
|
|
477
595
|
|
|
@@ -72,6 +72,26 @@ export type ObservedPeerConnectionEvents = {
|
|
|
72
72
|
'removed-peer-connection-transport': [ObservedPeerConnectionTransport];
|
|
73
73
|
'removed-remote-inbound-rtp': [ObservedRemoteInboundRtp];
|
|
74
74
|
'removed-remote-outbound-rtp': [ObservedRemoteOutboundRtp];
|
|
75
|
+
'updated-inbound-rtp': [ObservedInboundRtp];
|
|
76
|
+
'updated-outbound-rtp': [ObservedOutboundRtp];
|
|
77
|
+
'updated-inbound-track': [ObservedInboundTrack];
|
|
78
|
+
'updated-outbound-track': [ObservedOutboundTrack];
|
|
79
|
+
'updated-ice-candidate-pair': [ObservedIceCandidatePair];
|
|
80
|
+
'updated-ice-transport': [ObservedIceTransport];
|
|
81
|
+
'updated-peer-connection-transport': [ObservedPeerConnectionTransport];
|
|
82
|
+
'updated-media-source': [ObservedMediaSource];
|
|
83
|
+
'updated-media-playout': [ObservedMediaPlayout];
|
|
84
|
+
'updated-data-channel': [ObservedDataChannel];
|
|
85
|
+
'updated-ice-candidate': [ObservedIceCandidate];
|
|
86
|
+
'updated-certificate': [ObservedCertificate];
|
|
87
|
+
'updated-codec': [ObservedCodec];
|
|
88
|
+
'updated-remote-inbound-rtp': [ObservedRemoteInboundRtp];
|
|
89
|
+
'updated-remote-outbound-rtp': [ObservedRemoteOutboundRtp];
|
|
90
|
+
'muted-inbound-track': [ObservedInboundTrack];
|
|
91
|
+
'muted-outbound-track': [ObservedOutboundTrack];
|
|
92
|
+
'unmuted-inbound-track': [ObservedInboundTrack];
|
|
93
|
+
'unmuted-outbound-track': [ObservedOutboundTrack];
|
|
94
|
+
|
|
75
95
|
'update': [],
|
|
76
96
|
close: [];
|
|
77
97
|
};
|
|
@@ -108,6 +128,10 @@ export class ObservedPeerConnection extends EventEmitter {
|
|
|
108
128
|
public closedAt?: number;
|
|
109
129
|
public updated = Date.now();
|
|
110
130
|
|
|
131
|
+
public connectionState?: string;
|
|
132
|
+
public iceConnectionState?: string;
|
|
133
|
+
public iceGatheringState?: string;
|
|
134
|
+
|
|
111
135
|
public availableIncomingBitrate = 0;
|
|
112
136
|
public availableOutgoingBitrate = 0;
|
|
113
137
|
public totalInboundPacketsLost = 0;
|
|
@@ -650,6 +674,7 @@ export class ObservedPeerConnection extends EventEmitter {
|
|
|
650
674
|
this.emit('added-certificate', observedCertificate);
|
|
651
675
|
} else {
|
|
652
676
|
observedCertificate.update(stats);
|
|
677
|
+
this.emit('updated-certificate', observedCertificate);
|
|
653
678
|
}
|
|
654
679
|
|
|
655
680
|
return observedCertificate;
|
|
@@ -675,6 +700,7 @@ export class ObservedPeerConnection extends EventEmitter {
|
|
|
675
700
|
} else {
|
|
676
701
|
observedCodec.update(stats);
|
|
677
702
|
}
|
|
703
|
+
this.emit('updated-codec', observedCodec);
|
|
678
704
|
|
|
679
705
|
return observedCodec;
|
|
680
706
|
}
|
|
@@ -699,6 +725,7 @@ export class ObservedPeerConnection extends EventEmitter {
|
|
|
699
725
|
} else {
|
|
700
726
|
observedDataChannel.update(stats);
|
|
701
727
|
}
|
|
728
|
+
this.emit('updated-data-channel', observedDataChannel);
|
|
702
729
|
|
|
703
730
|
return observedDataChannel;
|
|
704
731
|
}
|
|
@@ -723,6 +750,7 @@ export class ObservedPeerConnection extends EventEmitter {
|
|
|
723
750
|
} else {
|
|
724
751
|
observedIceCandidate.update(stats);
|
|
725
752
|
}
|
|
753
|
+
this.emit('updated-ice-candidate', observedIceCandidate);
|
|
726
754
|
|
|
727
755
|
return observedIceCandidate;
|
|
728
756
|
}
|
|
@@ -747,6 +775,7 @@ export class ObservedPeerConnection extends EventEmitter {
|
|
|
747
775
|
} else {
|
|
748
776
|
observedIceCandidatePair.update(stats);
|
|
749
777
|
}
|
|
778
|
+
this.emit('updated-ice-candidate-pair', observedIceCandidatePair);
|
|
750
779
|
|
|
751
780
|
return observedIceCandidatePair;
|
|
752
781
|
}
|
|
@@ -771,6 +800,7 @@ export class ObservedPeerConnection extends EventEmitter {
|
|
|
771
800
|
} else {
|
|
772
801
|
observedIceTransport.update(stats);
|
|
773
802
|
}
|
|
803
|
+
this.emit('updated-ice-transport', observedIceTransport);
|
|
774
804
|
|
|
775
805
|
return observedIceTransport;
|
|
776
806
|
}
|
|
@@ -802,6 +832,7 @@ export class ObservedPeerConnection extends EventEmitter {
|
|
|
802
832
|
} else {
|
|
803
833
|
observedInboundRtp.update(stats);
|
|
804
834
|
}
|
|
835
|
+
this.emit('updated-inbound-rtp', observedInboundRtp);
|
|
805
836
|
|
|
806
837
|
return observedInboundRtp;
|
|
807
838
|
}
|
|
@@ -837,6 +868,7 @@ export class ObservedPeerConnection extends EventEmitter {
|
|
|
837
868
|
} else {
|
|
838
869
|
observedInboundTrack.update(stats);
|
|
839
870
|
}
|
|
871
|
+
this.emit('updated-inbound-track', observedInboundTrack);
|
|
840
872
|
|
|
841
873
|
return observedInboundTrack;
|
|
842
874
|
}
|
|
@@ -866,6 +898,7 @@ export class ObservedPeerConnection extends EventEmitter {
|
|
|
866
898
|
} else {
|
|
867
899
|
observedMediaPlayout.update(stats);
|
|
868
900
|
}
|
|
901
|
+
this.emit('updated-media-playout', observedMediaPlayout);
|
|
869
902
|
|
|
870
903
|
return observedMediaPlayout;
|
|
871
904
|
}
|
|
@@ -895,6 +928,7 @@ export class ObservedPeerConnection extends EventEmitter {
|
|
|
895
928
|
} else {
|
|
896
929
|
observedMediaSource.update(stats);
|
|
897
930
|
}
|
|
931
|
+
this.emit('updated-media-source', observedMediaSource);
|
|
898
932
|
|
|
899
933
|
return observedMediaSource;
|
|
900
934
|
}
|
|
@@ -925,6 +959,7 @@ export class ObservedPeerConnection extends EventEmitter {
|
|
|
925
959
|
} else {
|
|
926
960
|
observedOutboundRtp.update(stats);
|
|
927
961
|
}
|
|
962
|
+
this.emit('updated-outbound-rtp', observedOutboundRtp);
|
|
928
963
|
|
|
929
964
|
return observedOutboundRtp;
|
|
930
965
|
}
|
|
@@ -959,6 +994,7 @@ export class ObservedPeerConnection extends EventEmitter {
|
|
|
959
994
|
} else {
|
|
960
995
|
observedOutboundTrack.update(stats);
|
|
961
996
|
}
|
|
997
|
+
this.emit('updated-outbound-track', observedOutboundTrack);
|
|
962
998
|
|
|
963
999
|
return observedOutboundTrack;
|
|
964
1000
|
}
|
|
@@ -983,6 +1019,7 @@ export class ObservedPeerConnection extends EventEmitter {
|
|
|
983
1019
|
} else {
|
|
984
1020
|
observedPeerConnectionTransport.update(stats);
|
|
985
1021
|
}
|
|
1022
|
+
this.emit('updated-peer-connection-transport', observedPeerConnectionTransport);
|
|
986
1023
|
|
|
987
1024
|
return observedPeerConnectionTransport;
|
|
988
1025
|
}
|
|
@@ -1013,6 +1050,7 @@ export class ObservedPeerConnection extends EventEmitter {
|
|
|
1013
1050
|
} else {
|
|
1014
1051
|
observedRemoteInboundRtp.update(stats);
|
|
1015
1052
|
}
|
|
1053
|
+
this.emit('updated-remote-inbound-rtp', observedRemoteInboundRtp);
|
|
1016
1054
|
|
|
1017
1055
|
return observedRemoteInboundRtp;
|
|
1018
1056
|
}
|
|
@@ -1043,6 +1081,7 @@ export class ObservedPeerConnection extends EventEmitter {
|
|
|
1043
1081
|
} else {
|
|
1044
1082
|
observedRemoteOutboundRtp.update(stats);
|
|
1045
1083
|
}
|
|
1084
|
+
this.emit('updated-remote-outbound-rtp', observedRemoteOutboundRtp);
|
|
1046
1085
|
|
|
1047
1086
|
return observedRemoteOutboundRtp;
|
|
1048
1087
|
}
|