@epicgames-ps/lib-pixelstreamingfrontend-ue5.5 0.4.7 → 1.0.1

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 (218) hide show
  1. package/.lintstagedrc.mjs +7 -0
  2. package/dist/{commonjs → cjs}/Config/Config.js +8 -0
  3. package/dist/cjs/Config/Config.js.map +1 -0
  4. package/dist/{commonjs → cjs}/Config/SettingBase.js +1 -3
  5. package/dist/cjs/Config/SettingBase.js.map +1 -0
  6. package/dist/{commonjs → cjs}/Config/SettingFlag.js +1 -3
  7. package/dist/cjs/Config/SettingFlag.js.map +1 -0
  8. package/dist/{commonjs → cjs}/Config/SettingNumber.js +1 -3
  9. package/dist/cjs/Config/SettingNumber.js.map +1 -0
  10. package/dist/{commonjs → cjs}/Config/SettingOption.js +2 -6
  11. package/dist/cjs/Config/SettingOption.js.map +1 -0
  12. package/dist/{commonjs → cjs}/Config/SettingText.js +1 -3
  13. package/dist/cjs/Config/SettingText.js.map +1 -0
  14. package/dist/{commonjs → cjs}/Inputs/GamepadController.js +0 -2
  15. package/dist/cjs/Inputs/GamepadController.js.map +1 -0
  16. package/dist/{commonjs → cjs}/PeerConnectionController/AggregatedStats.js +103 -45
  17. package/dist/cjs/PeerConnectionController/AggregatedStats.js.map +1 -0
  18. package/dist/{commonjs → cjs}/PeerConnectionController/InboundRTPStats.js.map +1 -1
  19. package/dist/cjs/PeerConnectionController/LatencyCalculator.js +290 -0
  20. package/dist/cjs/PeerConnectionController/LatencyCalculator.js.map +1 -0
  21. package/dist/cjs/PeerConnectionController/OutBoundRTPStats.js +21 -0
  22. package/dist/cjs/PeerConnectionController/OutBoundRTPStats.js.map +1 -0
  23. package/dist/{commonjs → cjs}/PeerConnectionController/PeerConnectionController.js +53 -19
  24. package/dist/cjs/PeerConnectionController/PeerConnectionController.js.map +1 -0
  25. package/dist/{commonjs → cjs}/PixelStreaming/PixelStreaming.js +24 -3
  26. package/dist/cjs/PixelStreaming/PixelStreaming.js.map +1 -0
  27. package/dist/{commonjs → cjs}/Util/EventEmitter.js +38 -1
  28. package/dist/cjs/Util/EventEmitter.js.map +1 -0
  29. package/dist/{commonjs → cjs}/WebRtcPlayer/WebRtcPlayerController.js +41 -5
  30. package/dist/cjs/WebRtcPlayer/WebRtcPlayerController.js.map +1 -0
  31. package/dist/cjs/__test__/mockMediaStream.js +100 -0
  32. package/dist/cjs/__test__/mockMediaStream.js.map +1 -0
  33. package/dist/cjs/__test__/mockRTCPeerConnection.js +252 -0
  34. package/dist/cjs/__test__/mockRTCPeerConnection.js.map +1 -0
  35. package/dist/cjs/__test__/mockRTCRtpReceiver.js +26 -0
  36. package/dist/cjs/__test__/mockRTCRtpReceiver.js.map +1 -0
  37. package/dist/cjs/__test__/mockWebSocket.js +109 -0
  38. package/dist/cjs/__test__/mockWebSocket.js.map +1 -0
  39. package/dist/{commonjs → cjs}/pixelstreamingfrontend.js +4 -2
  40. package/dist/{commonjs → cjs}/pixelstreamingfrontend.js.map +1 -1
  41. package/dist/esm/Config/Config.js +8 -0
  42. package/dist/esm/Config/Config.js.map +1 -1
  43. package/dist/esm/Config/SettingBase.js +1 -3
  44. package/dist/esm/Config/SettingBase.js.map +1 -1
  45. package/dist/esm/Config/SettingFlag.js +1 -3
  46. package/dist/esm/Config/SettingFlag.js.map +1 -1
  47. package/dist/esm/Config/SettingNumber.js +1 -3
  48. package/dist/esm/Config/SettingNumber.js.map +1 -1
  49. package/dist/esm/Config/SettingOption.js +2 -6
  50. package/dist/esm/Config/SettingOption.js.map +1 -1
  51. package/dist/esm/Config/SettingText.js +1 -3
  52. package/dist/esm/Config/SettingText.js.map +1 -1
  53. package/dist/esm/Inputs/GamepadController.js +0 -2
  54. package/dist/esm/Inputs/GamepadController.js.map +1 -1
  55. package/dist/esm/PeerConnectionController/AggregatedStats.js +104 -46
  56. package/dist/esm/PeerConnectionController/AggregatedStats.js.map +1 -1
  57. package/dist/esm/PeerConnectionController/InboundRTPStats.js.map +1 -1
  58. package/dist/esm/PeerConnectionController/LatencyCalculator.js +284 -0
  59. package/dist/esm/PeerConnectionController/LatencyCalculator.js.map +1 -0
  60. package/dist/esm/PeerConnectionController/OutBoundRTPStats.js +8 -4
  61. package/dist/esm/PeerConnectionController/OutBoundRTPStats.js.map +1 -1
  62. package/dist/esm/PeerConnectionController/PeerConnectionController.js +52 -18
  63. package/dist/esm/PeerConnectionController/PeerConnectionController.js.map +1 -1
  64. package/dist/esm/PixelStreaming/PixelStreaming.js +25 -4
  65. package/dist/esm/PixelStreaming/PixelStreaming.js.map +1 -1
  66. package/dist/esm/Util/EventEmitter.js +33 -0
  67. package/dist/esm/Util/EventEmitter.js.map +1 -1
  68. package/dist/esm/WebRtcPlayer/WebRtcPlayerController.js +42 -6
  69. package/dist/esm/WebRtcPlayer/WebRtcPlayerController.js.map +1 -1
  70. package/dist/esm/__test__/mockMediaStream.js +92 -0
  71. package/dist/esm/__test__/mockMediaStream.js.map +1 -0
  72. package/dist/esm/__test__/mockRTCPeerConnection.js +242 -0
  73. package/dist/esm/__test__/mockRTCPeerConnection.js.map +1 -0
  74. package/dist/esm/__test__/mockRTCRtpReceiver.js +21 -0
  75. package/dist/esm/__test__/mockRTCRtpReceiver.js.map +1 -0
  76. package/dist/esm/__test__/mockWebSocket.js +103 -0
  77. package/dist/esm/__test__/mockWebSocket.js.map +1 -0
  78. package/dist/esm/pixelstreamingfrontend.js +2 -1
  79. package/dist/esm/pixelstreamingfrontend.js.map +1 -1
  80. package/dist/types/Config/Config.d.ts +2 -0
  81. package/dist/types/PeerConnectionController/AggregatedStats.d.ts +18 -7
  82. package/dist/types/PeerConnectionController/InboundRTPStats.d.ts +88 -85
  83. package/dist/types/PeerConnectionController/LatencyCalculator.d.ts +87 -0
  84. package/dist/types/PeerConnectionController/OutBoundRTPStats.d.ts +46 -12
  85. package/dist/types/PeerConnectionController/PeerConnectionController.d.ts +17 -3
  86. package/dist/types/PixelStreaming/PixelStreaming.d.ts +17 -3
  87. package/dist/types/Util/EventEmitter.d.ts +41 -1
  88. package/dist/types/VideoPlayer/VideoPlayer.d.ts +1 -1
  89. package/dist/types/WebRtcPlayer/WebRtcPlayerController.d.ts +4 -1
  90. package/dist/types/__test__/mockMediaStream.d.ts +49 -0
  91. package/dist/types/__test__/mockRTCPeerConnection.d.ts +134 -0
  92. package/dist/types/__test__/mockRTCRtpReceiver.d.ts +3 -0
  93. package/dist/types/__test__/mockWebSocket.d.ts +33 -0
  94. package/dist/types/pixelstreamingfrontend.d.ts +2 -1
  95. package/eslint.config.mjs +52 -0
  96. package/package.json +47 -45
  97. package/src/Config/Config.ts +30 -0
  98. package/src/Config/SettingBase.ts +1 -1
  99. package/src/Config/SettingFlag.ts +1 -1
  100. package/src/Config/SettingNumber.ts +1 -1
  101. package/src/Config/SettingOption.ts +2 -2
  102. package/src/Config/SettingText.ts +1 -1
  103. package/src/Inputs/GamepadController.ts +2 -2
  104. package/src/PeerConnectionController/AggregatedStats.ts +111 -52
  105. package/src/PeerConnectionController/InboundRTPStats.ts +88 -85
  106. package/src/PeerConnectionController/LatencyCalculator.ts +392 -0
  107. package/src/PeerConnectionController/OutBoundRTPStats.ts +46 -12
  108. package/src/PeerConnectionController/PeerConnectionController.ts +72 -19
  109. package/src/PixelStreaming/PixelStreaming.ts +34 -4
  110. package/src/Util/EventEmitter.ts +60 -0
  111. package/src/VideoPlayer/VideoPlayer.ts +1 -1
  112. package/src/WebRtcPlayer/WebRtcPlayerController.ts +53 -7
  113. package/src/__test__/mockRTCPeerConnection.ts +1 -1
  114. package/src/pixelstreamingfrontend.ts +2 -1
  115. package/{tsconfig.json → tsconfig.base.json} +5 -3
  116. package/tsconfig.cjs.json +3 -5
  117. package/tsconfig.esm.json +3 -3
  118. package/tsconfig.jest.json +6 -6
  119. package/.eslintignore +0 -12
  120. package/.eslintrc.js +0 -20
  121. package/.prettierrc.json +0 -7
  122. package/dist/commonjs/Config/Config.js.map +0 -1
  123. package/dist/commonjs/Config/SettingBase.js.map +0 -1
  124. package/dist/commonjs/Config/SettingFlag.js.map +0 -1
  125. package/dist/commonjs/Config/SettingNumber.js.map +0 -1
  126. package/dist/commonjs/Config/SettingOption.js.map +0 -1
  127. package/dist/commonjs/Config/SettingText.js.map +0 -1
  128. package/dist/commonjs/Inputs/GamepadController.js.map +0 -1
  129. package/dist/commonjs/PeerConnectionController/AggregatedStats.js.map +0 -1
  130. package/dist/commonjs/PeerConnectionController/OutBoundRTPStats.js +0 -17
  131. package/dist/commonjs/PeerConnectionController/OutBoundRTPStats.js.map +0 -1
  132. package/dist/commonjs/PeerConnectionController/PeerConnectionController.js.map +0 -1
  133. package/dist/commonjs/PixelStreaming/PixelStreaming.js.map +0 -1
  134. package/dist/commonjs/Util/EventEmitter.js.map +0 -1
  135. package/dist/commonjs/WebRtcPlayer/WebRtcPlayerController.js.map +0 -1
  136. /package/dist/{commonjs → cjs}/AFK/AFKController.js +0 -0
  137. /package/dist/{commonjs → cjs}/AFK/AFKController.js.map +0 -0
  138. /package/dist/{commonjs → cjs}/DataChannel/DataChannelController.js +0 -0
  139. /package/dist/{commonjs → cjs}/DataChannel/DataChannelController.js.map +0 -0
  140. /package/dist/{commonjs → cjs}/DataChannel/DataChannelLatencyTestController.js +0 -0
  141. /package/dist/{commonjs → cjs}/DataChannel/DataChannelLatencyTestController.js.map +0 -0
  142. /package/dist/{commonjs → cjs}/DataChannel/DataChannelLatencyTestResults.js +0 -0
  143. /package/dist/{commonjs → cjs}/DataChannel/DataChannelLatencyTestResults.js.map +0 -0
  144. /package/dist/{commonjs → cjs}/DataChannel/DataChannelSender.js +0 -0
  145. /package/dist/{commonjs → cjs}/DataChannel/DataChannelSender.js.map +0 -0
  146. /package/dist/{commonjs → cjs}/DataChannel/InitialSettings.js +0 -0
  147. /package/dist/{commonjs → cjs}/DataChannel/InitialSettings.js.map +0 -0
  148. /package/dist/{commonjs → cjs}/DataChannel/LatencyTestResults.js +0 -0
  149. /package/dist/{commonjs → cjs}/DataChannel/LatencyTestResults.js.map +0 -0
  150. /package/dist/{commonjs → cjs}/FreezeFrame/FreezeFrame.js +0 -0
  151. /package/dist/{commonjs → cjs}/FreezeFrame/FreezeFrame.js.map +0 -0
  152. /package/dist/{commonjs → cjs}/FreezeFrame/FreezeFrameController.js +0 -0
  153. /package/dist/{commonjs → cjs}/FreezeFrame/FreezeFrameController.js.map +0 -0
  154. /package/dist/{commonjs → cjs}/Inputs/GamepadTypes.js +0 -0
  155. /package/dist/{commonjs → cjs}/Inputs/GamepadTypes.js.map +0 -0
  156. /package/dist/{commonjs → cjs}/Inputs/IInputController.js +0 -0
  157. /package/dist/{commonjs → cjs}/Inputs/IInputController.js.map +0 -0
  158. /package/dist/{commonjs → cjs}/Inputs/InputClassesFactory.js +0 -0
  159. /package/dist/{commonjs → cjs}/Inputs/InputClassesFactory.js.map +0 -0
  160. /package/dist/{commonjs → cjs}/Inputs/KeyCodes.js +0 -0
  161. /package/dist/{commonjs → cjs}/Inputs/KeyCodes.js.map +0 -0
  162. /package/dist/{commonjs → cjs}/Inputs/KeyboardController.js +0 -0
  163. /package/dist/{commonjs → cjs}/Inputs/KeyboardController.js.map +0 -0
  164. /package/dist/{commonjs → cjs}/Inputs/MouseButtons.js +0 -0
  165. /package/dist/{commonjs → cjs}/Inputs/MouseButtons.js.map +0 -0
  166. /package/dist/{commonjs → cjs}/Inputs/MouseController.js +0 -0
  167. /package/dist/{commonjs → cjs}/Inputs/MouseController.js.map +0 -0
  168. /package/dist/{commonjs → cjs}/Inputs/MouseControllerHovering.js +0 -0
  169. /package/dist/{commonjs → cjs}/Inputs/MouseControllerHovering.js.map +0 -0
  170. /package/dist/{commonjs → cjs}/Inputs/MouseControllerLocked.js +0 -0
  171. /package/dist/{commonjs → cjs}/Inputs/MouseControllerLocked.js.map +0 -0
  172. /package/dist/{commonjs → cjs}/Inputs/SpecialKeyCodes.js +0 -0
  173. /package/dist/{commonjs → cjs}/Inputs/SpecialKeyCodes.js.map +0 -0
  174. /package/dist/{commonjs → cjs}/Inputs/TouchController.js +0 -0
  175. /package/dist/{commonjs → cjs}/Inputs/TouchController.js.map +0 -0
  176. /package/dist/{commonjs → cjs}/Inputs/TouchControllerFake.js +0 -0
  177. /package/dist/{commonjs → cjs}/Inputs/TouchControllerFake.js.map +0 -0
  178. /package/dist/{commonjs → cjs}/Inputs/XRGamepadController.js +0 -0
  179. /package/dist/{commonjs → cjs}/Inputs/XRGamepadController.js.map +0 -0
  180. /package/dist/{commonjs → cjs}/PeerConnectionController/CandidatePairStats.js +0 -0
  181. /package/dist/{commonjs → cjs}/PeerConnectionController/CandidatePairStats.js.map +0 -0
  182. /package/dist/{commonjs → cjs}/PeerConnectionController/CandidateStat.js +0 -0
  183. /package/dist/{commonjs → cjs}/PeerConnectionController/CandidateStat.js.map +0 -0
  184. /package/dist/{commonjs → cjs}/PeerConnectionController/CodecStats.js +0 -0
  185. /package/dist/{commonjs → cjs}/PeerConnectionController/CodecStats.js.map +0 -0
  186. /package/dist/{commonjs → cjs}/PeerConnectionController/DataChannelStats.js +0 -0
  187. /package/dist/{commonjs → cjs}/PeerConnectionController/DataChannelStats.js.map +0 -0
  188. /package/dist/{commonjs → cjs}/PeerConnectionController/InboundRTPStats.js +0 -0
  189. /package/dist/{commonjs → cjs}/PeerConnectionController/InboundTrackStats.js +0 -0
  190. /package/dist/{commonjs → cjs}/PeerConnectionController/InboundTrackStats.js.map +0 -0
  191. /package/dist/{commonjs → cjs}/PeerConnectionController/SessionStats.js +0 -0
  192. /package/dist/{commonjs → cjs}/PeerConnectionController/SessionStats.js.map +0 -0
  193. /package/dist/{commonjs → cjs}/PeerConnectionController/StreamStats.js +0 -0
  194. /package/dist/{commonjs → cjs}/PeerConnectionController/StreamStats.js.map +0 -0
  195. /package/dist/{commonjs → cjs}/UI/OnScreenKeyboard.js +0 -0
  196. /package/dist/{commonjs → cjs}/UI/OnScreenKeyboard.js.map +0 -0
  197. /package/dist/{commonjs → cjs}/UeInstanceMessage/ResponseController.js +0 -0
  198. /package/dist/{commonjs → cjs}/UeInstanceMessage/ResponseController.js.map +0 -0
  199. /package/dist/{commonjs → cjs}/UeInstanceMessage/SendMessageController.js +0 -0
  200. /package/dist/{commonjs → cjs}/UeInstanceMessage/SendMessageController.js.map +0 -0
  201. /package/dist/{commonjs → cjs}/UeInstanceMessage/StreamMessageController.js +0 -0
  202. /package/dist/{commonjs → cjs}/UeInstanceMessage/StreamMessageController.js.map +0 -0
  203. /package/dist/{commonjs → cjs}/UeInstanceMessage/ToStreamerMessagesController.js +0 -0
  204. /package/dist/{commonjs → cjs}/UeInstanceMessage/ToStreamerMessagesController.js.map +0 -0
  205. /package/dist/{commonjs → cjs}/Util/FileUtil.js +0 -0
  206. /package/dist/{commonjs → cjs}/Util/FileUtil.js.map +0 -0
  207. /package/dist/{commonjs → cjs}/Util/IURLSearchParams.js +0 -0
  208. /package/dist/{commonjs → cjs}/Util/IURLSearchParams.js.map +0 -0
  209. /package/dist/{commonjs → cjs}/Util/InputCoordTranslator.js +0 -0
  210. /package/dist/{commonjs → cjs}/Util/InputCoordTranslator.js.map +0 -0
  211. /package/dist/{commonjs → cjs}/Util/RTCUtils.js +0 -0
  212. /package/dist/{commonjs → cjs}/Util/RTCUtils.js.map +0 -0
  213. /package/dist/{commonjs → cjs}/VideoPlayer/StreamController.js +0 -0
  214. /package/dist/{commonjs → cjs}/VideoPlayer/StreamController.js.map +0 -0
  215. /package/dist/{commonjs → cjs}/VideoPlayer/VideoPlayer.js +0 -0
  216. /package/dist/{commonjs → cjs}/VideoPlayer/VideoPlayer.js.map +0 -0
  217. /package/dist/{commonjs → cjs}/WebXR/WebXRController.js +0 -0
  218. /package/dist/{commonjs → cjs}/WebXR/WebXRController.js.map +0 -0
@@ -22,12 +22,12 @@ export class SettingOption<CustomIds extends string = OptionParametersIds> exten
22
22
  defaultTextValue: string,
23
23
  options: Array<string>,
24
24
  useUrlParams: boolean,
25
- // eslint-disable-next-line @typescript-eslint/no-empty-function
25
+
26
26
  defaultUrlParamResolver: (urlParamValue: string) => string = function (value: string) {
27
27
  /* Return the string as-is by default */
28
28
  return value;
29
29
  },
30
- // eslint-disable-next-line @typescript-eslint/no-empty-function
30
+
31
31
  defaultOnChangeListener: (changedValue: unknown, setting: SettingBase) => void = () => {
32
32
  /* Do nothing, to be overridden. */
33
33
  }
@@ -17,7 +17,7 @@ export class SettingText<CustomIds extends string = TextParametersIds> extends S
17
17
  description: string,
18
18
  defaultTextValue: string,
19
19
  useUrlParams: boolean,
20
- // eslint-disable-next-line @typescript-eslint/no-empty-function
20
+
21
21
  defaultOnChangeListener: (changedValue: unknown, setting: SettingBase) => void = () => {
22
22
  /* Do nothing, to be overridden. */
23
23
  }
@@ -21,7 +21,7 @@ declare global {
21
21
  /**
22
22
  * Gamepad layout codes enum
23
23
  */
24
- /* eslint-disable @typescript-eslint/no-duplicate-enum-values */
24
+
25
25
  export enum GamepadLayout {
26
26
  RightClusterBottomButton = 0,
27
27
  RightClusterRightButton = 1,
@@ -46,7 +46,7 @@ export enum GamepadLayout {
46
46
  RightStickHorizontal = 2,
47
47
  RightStickVertical = 3
48
48
  }
49
- /* eslint-enable @typescript-eslint/no-duplicate-enum-values */
49
+
50
50
 
51
51
  /**
52
52
  * Handles gamepad events from the document to send to the streamer.
@@ -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
  }