@epicgames-ps/lib-pixelstreamingfrontend-ue5.5 0.4.8 → 1.0.2

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 (127) hide show
  1. package/dist/cjs/Config/Config.js +4 -0
  2. package/dist/cjs/Config/Config.js.map +1 -1
  3. package/dist/cjs/Config/SettingBase.js +1 -3
  4. package/dist/cjs/Config/SettingBase.js.map +1 -1
  5. package/dist/cjs/Config/SettingFlag.js +1 -3
  6. package/dist/cjs/Config/SettingFlag.js.map +1 -1
  7. package/dist/cjs/Config/SettingNumber.js +1 -3
  8. package/dist/cjs/Config/SettingNumber.js.map +1 -1
  9. package/dist/cjs/Config/SettingOption.js +2 -6
  10. package/dist/cjs/Config/SettingOption.js.map +1 -1
  11. package/dist/cjs/Config/SettingText.js +1 -3
  12. package/dist/cjs/Config/SettingText.js.map +1 -1
  13. package/dist/cjs/Inputs/GamepadController.js +0 -2
  14. package/dist/cjs/Inputs/GamepadController.js.map +1 -1
  15. package/dist/cjs/Inputs/KeyboardController.js +14 -6
  16. package/dist/cjs/Inputs/KeyboardController.js.map +1 -1
  17. package/dist/cjs/PeerConnectionController/AggregatedStats.js +103 -45
  18. package/dist/cjs/PeerConnectionController/AggregatedStats.js.map +1 -1
  19. package/dist/cjs/PeerConnectionController/InboundRTPStats.js.map +1 -1
  20. package/dist/cjs/PeerConnectionController/LatencyCalculator.js +290 -0
  21. package/dist/cjs/PeerConnectionController/LatencyCalculator.js.map +1 -0
  22. package/dist/cjs/PeerConnectionController/OutBoundRTPStats.js +11 -7
  23. package/dist/cjs/PeerConnectionController/OutBoundRTPStats.js.map +1 -1
  24. package/dist/cjs/PeerConnectionController/PeerConnectionController.js +53 -19
  25. package/dist/cjs/PeerConnectionController/PeerConnectionController.js.map +1 -1
  26. package/dist/cjs/PixelStreaming/PixelStreaming.js +21 -3
  27. package/dist/cjs/PixelStreaming/PixelStreaming.js.map +1 -1
  28. package/dist/cjs/UI/OnScreenKeyboard.js +4 -1
  29. package/dist/cjs/UI/OnScreenKeyboard.js.map +1 -1
  30. package/dist/cjs/Util/EventEmitter.js +31 -1
  31. package/dist/cjs/Util/EventEmitter.js.map +1 -1
  32. package/dist/cjs/WebRtcPlayer/WebRtcPlayerController.js +20 -4
  33. package/dist/cjs/WebRtcPlayer/WebRtcPlayerController.js.map +1 -1
  34. package/dist/cjs/__test__/mockMediaStream.js +100 -0
  35. package/dist/cjs/__test__/mockMediaStream.js.map +1 -0
  36. package/dist/cjs/__test__/mockRTCPeerConnection.js +252 -0
  37. package/dist/cjs/__test__/mockRTCPeerConnection.js.map +1 -0
  38. package/dist/cjs/__test__/mockRTCRtpReceiver.js +26 -0
  39. package/dist/cjs/__test__/mockRTCRtpReceiver.js.map +1 -0
  40. package/dist/cjs/__test__/mockWebSocket.js +109 -0
  41. package/dist/cjs/__test__/mockWebSocket.js.map +1 -0
  42. package/dist/cjs/pixelstreamingfrontend.js +4 -2
  43. package/dist/cjs/pixelstreamingfrontend.js.map +1 -1
  44. package/dist/esm/Config/Config.js +4 -0
  45. package/dist/esm/Config/Config.js.map +1 -1
  46. package/dist/esm/Config/SettingBase.js +1 -3
  47. package/dist/esm/Config/SettingBase.js.map +1 -1
  48. package/dist/esm/Config/SettingFlag.js +1 -3
  49. package/dist/esm/Config/SettingFlag.js.map +1 -1
  50. package/dist/esm/Config/SettingNumber.js +1 -3
  51. package/dist/esm/Config/SettingNumber.js.map +1 -1
  52. package/dist/esm/Config/SettingOption.js +2 -6
  53. package/dist/esm/Config/SettingOption.js.map +1 -1
  54. package/dist/esm/Config/SettingText.js +1 -3
  55. package/dist/esm/Config/SettingText.js.map +1 -1
  56. package/dist/esm/Inputs/GamepadController.js +0 -2
  57. package/dist/esm/Inputs/GamepadController.js.map +1 -1
  58. package/dist/esm/Inputs/KeyboardController.js +14 -6
  59. package/dist/esm/Inputs/KeyboardController.js.map +1 -1
  60. package/dist/esm/PeerConnectionController/AggregatedStats.js +104 -46
  61. package/dist/esm/PeerConnectionController/AggregatedStats.js.map +1 -1
  62. package/dist/esm/PeerConnectionController/InboundRTPStats.js.map +1 -1
  63. package/dist/esm/PeerConnectionController/LatencyCalculator.js +284 -0
  64. package/dist/esm/PeerConnectionController/LatencyCalculator.js.map +1 -0
  65. package/dist/esm/PeerConnectionController/OutBoundRTPStats.js +8 -4
  66. package/dist/esm/PeerConnectionController/OutBoundRTPStats.js.map +1 -1
  67. package/dist/esm/PeerConnectionController/PeerConnectionController.js +52 -18
  68. package/dist/esm/PeerConnectionController/PeerConnectionController.js.map +1 -1
  69. package/dist/esm/PixelStreaming/PixelStreaming.js +22 -4
  70. package/dist/esm/PixelStreaming/PixelStreaming.js.map +1 -1
  71. package/dist/esm/UI/OnScreenKeyboard.js +4 -1
  72. package/dist/esm/UI/OnScreenKeyboard.js.map +1 -1
  73. package/dist/esm/Util/EventEmitter.js +27 -0
  74. package/dist/esm/Util/EventEmitter.js.map +1 -1
  75. package/dist/esm/WebRtcPlayer/WebRtcPlayerController.js +20 -4
  76. package/dist/esm/WebRtcPlayer/WebRtcPlayerController.js.map +1 -1
  77. package/dist/esm/__test__/mockMediaStream.js +92 -0
  78. package/dist/esm/__test__/mockMediaStream.js.map +1 -0
  79. package/dist/esm/__test__/mockRTCPeerConnection.js +242 -0
  80. package/dist/esm/__test__/mockRTCPeerConnection.js.map +1 -0
  81. package/dist/esm/__test__/mockRTCRtpReceiver.js +21 -0
  82. package/dist/esm/__test__/mockRTCRtpReceiver.js.map +1 -0
  83. package/dist/esm/__test__/mockWebSocket.js +103 -0
  84. package/dist/esm/__test__/mockWebSocket.js.map +1 -0
  85. package/dist/esm/pixelstreamingfrontend.js +2 -1
  86. package/dist/esm/pixelstreamingfrontend.js.map +1 -1
  87. package/dist/types/Config/Config.d.ts +1 -0
  88. package/dist/types/Inputs/KeyboardController.d.ts +1 -1
  89. package/dist/types/PeerConnectionController/AggregatedStats.d.ts +18 -7
  90. package/dist/types/PeerConnectionController/InboundRTPStats.d.ts +88 -85
  91. package/dist/types/PeerConnectionController/LatencyCalculator.d.ts +87 -0
  92. package/dist/types/PeerConnectionController/OutBoundRTPStats.d.ts +46 -12
  93. package/dist/types/PeerConnectionController/PeerConnectionController.d.ts +17 -3
  94. package/dist/types/PixelStreaming/PixelStreaming.d.ts +16 -3
  95. package/dist/types/Util/EventEmitter.d.ts +34 -1
  96. package/dist/types/VideoPlayer/VideoPlayer.d.ts +1 -1
  97. package/dist/types/__test__/mockMediaStream.d.ts +49 -0
  98. package/dist/types/__test__/mockRTCPeerConnection.d.ts +134 -0
  99. package/dist/types/__test__/mockRTCRtpReceiver.d.ts +3 -0
  100. package/dist/types/__test__/mockWebSocket.d.ts +33 -0
  101. package/dist/types/pixelstreamingfrontend.d.ts +2 -1
  102. package/eslint.config.mjs +52 -0
  103. package/package.json +13 -14
  104. package/src/Config/Config.ts +14 -0
  105. package/src/Config/SettingBase.ts +1 -1
  106. package/src/Config/SettingFlag.ts +1 -1
  107. package/src/Config/SettingNumber.ts +1 -1
  108. package/src/Config/SettingOption.ts +2 -2
  109. package/src/Config/SettingText.ts +1 -1
  110. package/src/Inputs/GamepadController.ts +2 -2
  111. package/src/Inputs/KeyboardController.ts +13 -7
  112. package/src/PeerConnectionController/AggregatedStats.ts +111 -52
  113. package/src/PeerConnectionController/InboundRTPStats.ts +88 -85
  114. package/src/PeerConnectionController/LatencyCalculator.ts +392 -0
  115. package/src/PeerConnectionController/OutBoundRTPStats.ts +46 -12
  116. package/src/PeerConnectionController/PeerConnectionController.ts +72 -19
  117. package/src/PixelStreaming/PixelStreaming.ts +29 -4
  118. package/src/UI/OnScreenKeyboard.ts +5 -1
  119. package/src/Util/EventEmitter.ts +48 -0
  120. package/src/VideoPlayer/VideoPlayer.ts +1 -1
  121. package/src/WebRtcPlayer/WebRtcPlayerController.ts +23 -5
  122. package/src/__test__/mockRTCPeerConnection.ts +1 -1
  123. package/src/pixelstreamingfrontend.ts +2 -1
  124. package/tsconfig.base.json +2 -2
  125. package/.eslintignore +0 -12
  126. package/.eslintrc.js +0 -20
  127. package/.prettierrc.json +0 -7
@@ -5,7 +5,7 @@ import { InboundTrackStats } from './InboundTrackStats';
5
5
  import { DataChannelStats } from './DataChannelStats';
6
6
  import { CandidateStat } from './CandidateStat';
7
7
  import { CandidatePairStats } from './CandidatePairStats';
8
- import { OutBoundRTPStats, OutBoundVideoStats } from './OutBoundRTPStats';
8
+ import { RemoteOutboundRTPStats, OutboundRTPStats } from './OutBoundRTPStats';
9
9
  import { SessionStats } from './SessionStats';
10
10
  import { StreamStats } from './StreamStats';
11
11
  import { CodecStats } from './CodecStats';
@@ -15,15 +15,17 @@ import { Logger } from '@epicgames-ps/lib-pixelstreamingcommon-ue5.5';
15
15
  * The Aggregated Stats that is generated from the RTC Stats Report
16
16
  */
17
17
 
18
- type RTCStatsTypePS = RTCStatsType | 'stream' | 'media-playout' | 'track';
19
18
  export class AggregatedStats {
20
19
  inboundVideoStats: InboundVideoStats;
21
20
  inboundAudioStats: InboundAudioStats;
22
21
  candidatePairs: Array<CandidatePairStats>;
23
- DataChannelStats: DataChannelStats;
22
+ datachannelStats: DataChannelStats;
24
23
  localCandidates: Array<CandidateStat>;
25
24
  remoteCandidates: Array<CandidateStat>;
26
- outBoundVideoStats: OutBoundVideoStats;
25
+ outboundVideoStats: OutboundRTPStats;
26
+ outboundAudioStats: OutboundRTPStats;
27
+ remoteOutboundVideoStats: RemoteOutboundRTPStats;
28
+ remoteOutboundAudioStats: RemoteOutboundRTPStats;
27
29
  sessionStats: SessionStats;
28
30
  streamStats: StreamStats;
29
31
  codecs: Map<string, CodecStats>;
@@ -32,8 +34,11 @@ export class AggregatedStats {
32
34
  constructor() {
33
35
  this.inboundVideoStats = new InboundVideoStats();
34
36
  this.inboundAudioStats = new InboundAudioStats();
35
- this.DataChannelStats = new DataChannelStats();
36
- this.outBoundVideoStats = new OutBoundVideoStats();
37
+ this.datachannelStats = new DataChannelStats();
38
+ this.outboundVideoStats = new OutboundRTPStats();
39
+ this.outboundAudioStats = new OutboundRTPStats();
40
+ this.remoteOutboundAudioStats = new RemoteOutboundRTPStats();
41
+ this.remoteOutboundVideoStats = new RemoteOutboundRTPStats();
37
42
  this.sessionStats = new SessionStats();
38
43
  this.streamStats = new StreamStats();
39
44
  this.codecs = new Map<string, CodecStats>();
@@ -49,7 +54,7 @@ export class AggregatedStats {
49
54
  this.candidatePairs = new Array<CandidatePairStats>();
50
55
 
51
56
  rtcStatsReport.forEach((stat) => {
52
- const type: RTCStatsTypePS = stat.type;
57
+ const type: string = stat.type;
53
58
 
54
59
  switch (type) {
55
60
  case 'candidate-pair':
@@ -64,7 +69,7 @@ export class AggregatedStats {
64
69
  this.handleDataChannel(stat);
65
70
  break;
66
71
  case 'inbound-rtp':
67
- this.handleInBoundRTP(stat);
72
+ this.handleInboundRTP(stat);
68
73
  break;
69
74
  case 'local-candidate':
70
75
  this.handleLocalCandidate(stat);
@@ -74,6 +79,7 @@ export class AggregatedStats {
74
79
  case 'media-playout':
75
80
  break;
76
81
  case 'outbound-rtp':
82
+ this.handleLocalOutbound(stat);
77
83
  break;
78
84
  case 'peer-connection':
79
85
  break;
@@ -83,7 +89,7 @@ export class AggregatedStats {
83
89
  case 'remote-inbound-rtp':
84
90
  break;
85
91
  case 'remote-outbound-rtp':
86
- this.handleRemoteOutBound(stat);
92
+ this.handleRemoteOutbound(stat);
87
93
  break;
88
94
  case 'track':
89
95
  this.handleTrack(stat);
@@ -125,16 +131,16 @@ export class AggregatedStats {
125
131
  * @param stat - the stats coming in from the data channel
126
132
  */
127
133
  handleDataChannel(stat: DataChannelStats) {
128
- this.DataChannelStats.bytesReceived = stat.bytesReceived;
129
- this.DataChannelStats.bytesSent = stat.bytesSent;
130
- this.DataChannelStats.dataChannelIdentifier = stat.dataChannelIdentifier;
131
- this.DataChannelStats.id = stat.id;
132
- this.DataChannelStats.label = stat.label;
133
- this.DataChannelStats.messagesReceived = stat.messagesReceived;
134
- this.DataChannelStats.messagesSent = stat.messagesSent;
135
- this.DataChannelStats.protocol = stat.protocol;
136
- this.DataChannelStats.state = stat.state;
137
- this.DataChannelStats.timestamp = stat.timestamp;
134
+ this.datachannelStats.bytesReceived = stat.bytesReceived;
135
+ this.datachannelStats.bytesSent = stat.bytesSent;
136
+ this.datachannelStats.dataChannelIdentifier = stat.dataChannelIdentifier;
137
+ this.datachannelStats.id = stat.id;
138
+ this.datachannelStats.label = stat.label;
139
+ this.datachannelStats.messagesReceived = stat.messagesReceived;
140
+ this.datachannelStats.messagesSent = stat.messagesSent;
141
+ this.datachannelStats.protocol = stat.protocol;
142
+ this.datachannelStats.state = stat.state;
143
+ this.datachannelStats.timestamp = stat.timestamp;
138
144
  }
139
145
 
140
146
  /**
@@ -159,23 +165,23 @@ export class AggregatedStats {
159
165
  * @param stat - ice candidate stats
160
166
  */
161
167
  handleRemoteCandidate(stat: CandidateStat) {
162
- const RemoteCandidate = new CandidateStat();
163
- RemoteCandidate.label = 'remote-candidate';
164
- RemoteCandidate.address = stat.address;
165
- RemoteCandidate.port = stat.port;
166
- RemoteCandidate.protocol = stat.protocol;
167
- RemoteCandidate.id = stat.id;
168
- RemoteCandidate.candidateType = stat.candidateType;
169
- RemoteCandidate.relayProtocol = stat.relayProtocol;
170
- RemoteCandidate.transportId = stat.transportId;
171
- this.remoteCandidates.push(RemoteCandidate);
168
+ const remoteCandidate = new CandidateStat();
169
+ remoteCandidate.label = 'remote-candidate';
170
+ remoteCandidate.address = stat.address;
171
+ remoteCandidate.port = stat.port;
172
+ remoteCandidate.protocol = stat.protocol;
173
+ remoteCandidate.id = stat.id;
174
+ remoteCandidate.candidateType = stat.candidateType;
175
+ remoteCandidate.relayProtocol = stat.relayProtocol;
176
+ remoteCandidate.transportId = stat.transportId;
177
+ this.remoteCandidates.push(remoteCandidate);
172
178
  }
173
179
 
174
180
  /**
175
181
  * Process the Inbound RTP Audio and Video Data
176
182
  * @param stat - inbound rtp stats
177
183
  */
178
- handleInBoundRTP(stat: InboundRTPStats) {
184
+ handleInboundRTP(stat: InboundRTPStats) {
179
185
  switch (stat.kind) {
180
186
  case 'video':
181
187
  // Calculate bitrate between stat updates
@@ -216,25 +222,63 @@ export class AggregatedStats {
216
222
  }
217
223
 
218
224
  /**
219
- * Process the outbound RTP Audio and Video Data
220
- * @param stat - remote outbound stats
225
+ * Process the "local" outbound RTP Audio and Video stats.
226
+ * @param stat - local outbound rtp stats
221
227
  */
222
- handleRemoteOutBound(stat: OutBoundRTPStats) {
223
- switch (stat.kind) {
224
- case 'video':
225
- this.outBoundVideoStats.bytesSent = stat.bytesSent;
226
- this.outBoundVideoStats.id = stat.id;
227
- this.outBoundVideoStats.localId = stat.localId;
228
- this.outBoundVideoStats.packetsSent = stat.packetsSent;
229
- this.outBoundVideoStats.remoteTimestamp = stat.remoteTimestamp;
230
- this.outBoundVideoStats.timestamp = stat.timestamp;
231
- break;
232
- case 'audio':
233
- break;
228
+ handleLocalOutbound(stat: OutboundRTPStats) {
229
+ const localOutboundStats: OutboundRTPStats =
230
+ stat.kind === 'audio' ? this.outboundAudioStats : this.outboundVideoStats;
231
+ localOutboundStats.active = stat.active;
232
+ localOutboundStats.codecId = stat.codecId;
233
+ localOutboundStats.bytesSent = stat.bytesSent;
234
+ localOutboundStats.frameHeight = stat.frameHeight;
235
+ localOutboundStats.frameWidth = stat.frameWidth;
236
+ localOutboundStats.framesEncoded = stat.framesEncoded;
237
+ localOutboundStats.framesPerSecond = stat.framesPerSecond;
238
+ localOutboundStats.headerBytesSent = stat.headerBytesSent;
239
+ localOutboundStats.id = stat.id;
240
+ localOutboundStats.keyFramesEncoded = stat.keyFramesEncoded;
241
+ localOutboundStats.kind = stat.kind;
242
+ localOutboundStats.mediaSourceId = stat.mediaSourceId;
243
+ localOutboundStats.mid = stat.mid;
244
+ localOutboundStats.nackCount = stat.nackCount;
245
+ localOutboundStats.packetsSent = stat.packetsSent;
246
+ localOutboundStats.qpSum = stat.qpSum;
247
+ localOutboundStats.qualityLimitationDurations = stat.qualityLimitationDurations;
248
+ localOutboundStats.qualityLimitationReason = stat.qualityLimitationReason;
249
+ localOutboundStats.remoteId = stat.remoteId;
250
+ localOutboundStats.retransmittedBytesSent = stat.retransmittedBytesSent;
251
+ localOutboundStats.rid = stat.rid;
252
+ localOutboundStats.scalabilityMode = stat.scalabilityMode;
253
+ localOutboundStats.ssrc = stat.ssrc;
254
+ localOutboundStats.targetBitrate = stat.targetBitrate;
255
+ localOutboundStats.timestamp = stat.timestamp;
256
+ localOutboundStats.totalEncodeTime = stat.totalEncodeTime;
257
+ localOutboundStats.totalEncodeBytesTarget = stat.totalEncodeBytesTarget;
258
+ localOutboundStats.totalPacketSendDelay = stat.totalPacketSendDelay;
259
+ localOutboundStats.transportId = stat.transportId;
260
+ }
234
261
 
235
- default:
236
- break;
237
- }
262
+ /**
263
+ * Process the "remote" outbound RTP Audio and Video stats.
264
+ * @param stat - remote outbound rtp stats
265
+ */
266
+ handleRemoteOutbound(stat: RemoteOutboundRTPStats) {
267
+ const remoteOutboundStats: RemoteOutboundRTPStats =
268
+ stat.kind === 'audio' ? this.remoteOutboundAudioStats : this.remoteOutboundVideoStats;
269
+ remoteOutboundStats.bytesSent = stat.bytesSent;
270
+ remoteOutboundStats.codecId = stat.codecId;
271
+ remoteOutboundStats.id = stat.id;
272
+ remoteOutboundStats.kind = stat.kind;
273
+ remoteOutboundStats.localId = stat.localId;
274
+ remoteOutboundStats.packetsSent = stat.packetsSent;
275
+ remoteOutboundStats.remoteTimestamp = stat.remoteTimestamp;
276
+ remoteOutboundStats.reportsSent = stat.reportsSent;
277
+ remoteOutboundStats.roundTripTimeMeasurements = stat.roundTripTimeMeasurements;
278
+ remoteOutboundStats.ssrc = stat.ssrc;
279
+ remoteOutboundStats.timestamp = stat.timestamp;
280
+ remoteOutboundStats.totalRoundTripTime = stat.totalRoundTripTime;
281
+ remoteOutboundStats.transportId = stat.transportId;
238
282
  }
239
283
 
240
284
  /**
@@ -288,16 +332,31 @@ export class AggregatedStats {
288
332
  * @returns The candidate pair that is currently receiving data
289
333
  */
290
334
  public getActiveCandidatePair(): CandidatePairStats | null {
335
+ if (this.candidatePairs === undefined) {
336
+ return null;
337
+ }
338
+
291
339
  // Check if the RTCTransport stat is not undefined
292
340
  if (this.transportStats) {
293
341
  // Return the candidate pair that matches the transport candidate pair id
294
- return this.candidatePairs.find(
295
- (candidatePair) => candidatePair.id === this.transportStats.selectedCandidatePairId,
296
- null
342
+ const selectedPair: CandidatePairStats | undefined = this.candidatePairs.find(
343
+ (candidatePair) => candidatePair.id === this.transportStats.selectedCandidatePairId
297
344
  );
345
+ if (selectedPair === undefined) {
346
+ return null;
347
+ } else {
348
+ return selectedPair;
349
+ }
298
350
  }
299
351
 
300
- // Fall back to the selected candidate pair
301
- return this.candidatePairs.find((candidatePair) => candidatePair.selected, null);
352
+ // Fall back to the `.selected` member of the candidate pair
353
+ const selectedPair: CandidatePairStats | undefined = this.candidatePairs.find(
354
+ (candidatePair) => candidatePair.selected
355
+ );
356
+ if (selectedPair === undefined) {
357
+ return null;
358
+ } else {
359
+ return selectedPair;
360
+ }
302
361
  }
303
362
  }
@@ -4,41 +4,41 @@
4
4
  * Inbound Audio Stats collected from the RTC Stats Report
5
5
  */
6
6
  export class InboundAudioStats {
7
- audioLevel: number;
7
+ audioLevel: number | undefined;
8
8
  bytesReceived: number;
9
9
  codecId: string;
10
- concealedSamples: number;
11
- concealmentEvents: number;
12
- fecPacketsDiscarded: number;
13
- fecPacketsReceived: number;
10
+ concealedSamples: number | undefined;
11
+ concealmentEvents: number | undefined;
12
+ fecPacketsDiscarded: number | undefined;
13
+ fecPacketsReceived: number | undefined;
14
14
  headerBytesReceived: number;
15
15
  id: string;
16
- insertedSamplesForDeceleration: number;
16
+ insertedSamplesForDeceleration: number | undefined;
17
17
  jitter: number;
18
18
  jitterBufferDelay: number;
19
19
  jitterBufferEmittedCount: number;
20
- jitterBufferMinimumDelay: number;
21
- jitterBufferTargetDelay: number;
20
+ jitterBufferMinimumDelay: number | undefined;
21
+ jitterBufferTargetDelay: number | undefined;
22
22
  kind: string;
23
23
  lastPacketReceivedTimestamp: number;
24
- mediaType: string;
24
+ mediaType: string | undefined;
25
25
  mid: string;
26
- packetsDiscarded: number;
26
+ packetsDiscarded: number | undefined;
27
27
  packetsLost: number;
28
28
  packetsReceived: number;
29
- removedSamplesForAcceleration: number;
30
- silentConcealedSamples: number;
29
+ removedSamplesForAcceleration: number | undefined;
30
+ silentConcealedSamples: number | undefined;
31
31
  ssrc: number;
32
32
  timestamp: number;
33
- totalAudioEnergy: number;
34
- totalSamplesDuration: number;
35
- totalSamplesReceived: number;
36
- trackIdentifier: string;
37
- transportId: string;
33
+ totalAudioEnergy: number | undefined;
34
+ totalSamplesDuration: number | undefined;
35
+ totalSamplesReceived: number | undefined;
36
+ trackIdentifier: string | undefined;
37
+ transportId: string | undefined;
38
38
  type: string;
39
39
 
40
40
  /* additional, custom stats */
41
- bitrate: number;
41
+ bitrate: number | undefined;
42
42
  }
43
43
 
44
44
  /**
@@ -46,47 +46,47 @@ export class InboundAudioStats {
46
46
  */
47
47
  export class InboundVideoStats {
48
48
  bytesReceived: number;
49
- codecId: string;
50
- firCount: number;
51
- frameHeight: number;
52
- frameWidth: number;
53
- framesAssembledFromMultiplePackets: number;
54
- framesDecoded: number;
55
- framesDropped: number;
56
- framesPerSecond: number;
57
- framesReceived: number;
58
- freezeCount: number;
59
- googTimingFrameInfo: string;
49
+ codecId: string | undefined;
50
+ firCount: number | undefined;
51
+ frameHeight: number | undefined;
52
+ frameWidth: number | undefined;
53
+ framesAssembledFromMultiplePackets: number | undefined;
54
+ framesDecoded: number | undefined;
55
+ framesDropped: number | undefined;
56
+ framesPerSecond: number | undefined;
57
+ framesReceived: number | undefined;
58
+ freezeCount: number | undefined;
59
+ googTimingFrameInfo: string | undefined;
60
60
  headerBytesReceived: number;
61
61
  id: string;
62
62
  jitter: number;
63
63
  jitterBufferDelay: number;
64
64
  jitterBufferEmittedCount: number;
65
- keyFramesDecoded: number;
65
+ keyFramesDecoded: number | undefined;
66
66
  kind: string;
67
- lastPacketReceivedTimestamp: number;
68
- mediaType: string;
67
+ lastPacketReceivedTimestamp: number | undefined;
68
+ mediaType: string | undefined;
69
69
  mid: string;
70
- nackCount: number;
70
+ nackCount: number | undefined;
71
71
  packetsLost: number;
72
72
  packetsReceived: number;
73
- pauseCount: number;
74
- pliCount: number;
73
+ pauseCount: number | undefined;
74
+ pliCount: number | undefined;
75
75
  ssrc: number;
76
76
  timestamp: number;
77
- totalAssemblyTime: number;
78
- totalDecodeTime: number;
79
- totalFreezesDuration: number;
80
- totalInterFrameDelay: number;
81
- totalPausesDuration: number;
82
- totalProcessingDelay: number;
83
- totalSquaredInterFrameDelay: number;
84
- trackIdentifier: string;
85
- transportId: string;
77
+ totalAssemblyTime: number | undefined;
78
+ totalDecodeTime: number | undefined;
79
+ totalFreezesDuration: number | undefined;
80
+ totalInterFrameDelay: number | undefined;
81
+ totalPausesDuration: number | undefined;
82
+ totalProcessingDelay: number | undefined;
83
+ totalSquaredInterFrameDelay: number | undefined;
84
+ trackIdentifier: string | undefined;
85
+ transportId: string | undefined;
86
86
  type: string;
87
87
 
88
88
  /* additional, custom stats */
89
- bitrate: number;
89
+ bitrate: number | undefined;
90
90
  }
91
91
 
92
92
  /**
@@ -95,60 +95,63 @@ export class InboundVideoStats {
95
95
  export class InboundRTPStats {
96
96
  /* common stats */
97
97
  bytesReceived: number;
98
- codecId: string;
98
+ codecId: string | undefined;
99
99
  headerBytesReceived: number;
100
100
  id: string;
101
101
  jitter: number;
102
102
  jitterBufferDelay: number;
103
103
  jitterBufferEmittedCount: number;
104
104
  kind: string;
105
- lastPacketReceivedTimestamp: number;
106
- mediaType: string;
105
+ lastPacketReceivedTimestamp: number | undefined;
106
+ mediaType: string | undefined;
107
107
  mid: string;
108
108
  packetsLost: number;
109
109
  packetsReceived: number;
110
+ playoutId: string | undefined;
111
+ qpsum: number | undefined;
112
+ remoteId: string | undefined;
110
113
  ssrc: number;
111
114
  timestamp: number;
112
- trackIdentifier: string;
113
- transportId: string;
115
+ trackIdentifier: string | undefined;
116
+ transportId: string | undefined;
114
117
  type: string;
115
118
 
116
119
  /* audio specific stats */
117
- audioLevel: number;
118
- concealedSamples: number;
119
- concealmentEvents: number;
120
- fecPacketsDiscarded: number;
121
- fecPacketsReceived: number;
122
- insertedSamplesForDeceleration: number;
123
- jitterBufferMinimumDelay: number;
124
- jitterBufferTargetDelay: number;
125
- packetsDiscarded: number;
126
- removedSamplesForAcceleration: number;
127
- silentConcealedSamples: number;
128
- totalAudioEnergy: number;
129
- totalSamplesDuration: number;
130
- totalSamplesReceived: number;
120
+ audioLevel: number | undefined;
121
+ concealedSamples: number | undefined;
122
+ concealmentEvents: number | undefined;
123
+ fecPacketsDiscarded: number | undefined;
124
+ fecPacketsReceived: number | undefined;
125
+ insertedSamplesForDeceleration: number | undefined;
126
+ jitterBufferMinimumDelay: number | undefined;
127
+ jitterBufferTargetDelay: number | undefined;
128
+ packetsDiscarded: number | undefined;
129
+ removedSamplesForAcceleration: number | undefined;
130
+ silentConcealedSamples: number | undefined;
131
+ totalAudioEnergy: number | undefined;
132
+ totalSamplesDuration: number | undefined;
133
+ totalSamplesReceived: number | undefined;
131
134
 
132
135
  /* video specific stats */
133
- firCount: number;
134
- frameHeight: number;
135
- frameWidth: number;
136
- framesAssembledFromMultiplePackets: number;
137
- framesDecoded: number;
138
- framesDropped: number;
139
- framesPerSecond: number;
140
- framesReceived: number;
141
- freezeCount: number;
142
- googTimingFrameInfo: string;
143
- keyFramesDecoded: number;
144
- nackCount: number;
145
- pauseCount: number;
146
- pliCount: number;
147
- totalAssemblyTime: number;
148
- totalDecodeTime: number;
149
- totalFreezesDuration: number;
150
- totalInterFrameDelay: number;
151
- totalPausesDuration: number;
152
- totalProcessingDelay: number;
153
- totalSquaredInterFrameDelay: number;
136
+ firCount: number | undefined;
137
+ frameHeight: number | undefined;
138
+ frameWidth: number | undefined;
139
+ framesAssembledFromMultiplePackets: number | undefined;
140
+ framesDecoded: number | undefined;
141
+ framesDropped: number | undefined;
142
+ framesPerSecond: number | undefined;
143
+ framesReceived: number | undefined;
144
+ freezeCount: number | undefined;
145
+ googTimingFrameInfo: string | undefined;
146
+ keyFramesDecoded: number | undefined;
147
+ nackCount: number | undefined;
148
+ pauseCount: number | undefined;
149
+ pliCount: number | undefined;
150
+ totalAssemblyTime: number | undefined;
151
+ totalDecodeTime: number | undefined;
152
+ totalFreezesDuration: number | undefined;
153
+ totalInterFrameDelay: number | undefined;
154
+ totalPausesDuration: number | undefined;
155
+ totalProcessingDelay: number | undefined;
156
+ totalSquaredInterFrameDelay: number | undefined;
154
157
  }