@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
@@ -0,0 +1,284 @@
1
+ // Copyright Epic Games, Inc. All Rights Reserved.
2
+ /**
3
+ * Represents either a:
4
+ * - synchronization source: https://developer.mozilla.org/en-US/docs/Web/API/RTCRtpReceiver/getSynchronizationSources
5
+ * - contributing source: https://developer.mozilla.org/en-US/docs/Web/API/RTCRtpReceiver/getContributingSources
6
+ * Which also (if browser supports it) may optionall contain fields for captureTimestamp + senderCaptureTimeOffset
7
+ * if the abs-capture-time RTP header extension is enabled (currently this only works in Chromium based browsers).
8
+ */
9
+ class RTCRtpCaptureSource {
10
+ }
11
+ /**
12
+ * FrameTimingInfo is a Chromium-specific set of WebRTC stats useful for latency calculation. It is stored in WebRTC stats as `googTimingFrameInfo`.
13
+ * It is defined as an RTP header extension here: https://webrtc.googlesource.com/src/+/refs/heads/main/docs/native-code/rtp-hdrext/video-timing/README.md
14
+ * It is defined in source code here: https://source.chromium.org/chromium/chromium/src/+/main:third_party/webrtc/api/video/video_timing.cc;l=82;drc=8d399817282e3c12ed54eb23ec42a5e418298ec6
15
+ * It is discussed by its author here: https://github.com/w3c/webrtc-provisional-stats/issues/40#issuecomment-1272916692
16
+ * In summary it a comma-delimited string that contains the following (in this order):
17
+ * 1) RTP timestamp: the RTP timestamp of the frame
18
+ * 2) Capture time: timestamp when this frame was captured
19
+ * 3) Encode start: timestamp when this frame started to be encoded
20
+ * 4) Encode finish: timestamp when this frame finished encoding
21
+ * 5) Packetization finish: timestamp when this frame was split into packets and was ready to be sent over the network
22
+ * 6) Pacer exit: timestamp when last packet of this frame was sent over the network by the sender at this timestamp
23
+ * 7) Network timestamp1: place for the SFU to mark when the frame started being forwarded. Application specific.
24
+ * 8) Network timestamp2: place for the SFU to mark when the frame finished being forwarded. Application specific.
25
+ * 9) Receive start: timestamp when the first packet of this frame was received
26
+ * 10) Receive finish: timestamp when the last packet of this frame was received
27
+ * 11) Decode start: timestamp when the frame was passed to decoder
28
+ * 12) Decode finish: timestamp when the frame was decoded
29
+ * 13) Render time: timestamp of the projected render time for this frame
30
+ * 14) "is outlier": a flag for if this frame is bigger in encoded size than the average frame by at least 5x.
31
+ * 15) "triggered by timer": a flag for if this report was triggered by the timer (The report is sent every 200ms)
32
+ */
33
+ export class FrameTimingInfo {
34
+ }
35
+ /**
36
+ * Calculates a combination of latency statistics using purely WebRTC API.
37
+ */
38
+ export class LatencyCalculator {
39
+ constructor() {
40
+ /* Clock offset between peer clocks cannot always be calculated as it relies of latest sender reports.
41
+ * so we store the last time we had a valid clock offset in the assumption that clocks haven't drifted too much since then.
42
+ */
43
+ this.latestSenderRecvClockOffset = null;
44
+ }
45
+ calculate(stats, receivers) {
46
+ const latencyInfo = new LatencyInfo();
47
+ const rttMS = this.getRTTMs(stats);
48
+ if (rttMS != null) {
49
+ latencyInfo.rttMs = rttMS;
50
+ // Calculate sender latency using the first valid video ssrc/csrc
51
+ const captureSource = this.getCaptureSource(receivers);
52
+ if (captureSource != null) {
53
+ const senderLatencyMs = this.calculateSenderLatency(stats, captureSource);
54
+ if (senderLatencyMs !== null) {
55
+ latencyInfo.senderLatencyMs = senderLatencyMs;
56
+ }
57
+ }
58
+ }
59
+ // https://w3c.github.io/webrtc-stats/#dom-rtcinboundrtpstreamstats-totalprocessingdelay
60
+ if (stats.inboundVideoStats.totalProcessingDelay !== undefined &&
61
+ stats.inboundVideoStats.framesDecoded !== undefined) {
62
+ latencyInfo.averageProcessingDelayMs =
63
+ (stats.inboundVideoStats.totalProcessingDelay / stats.inboundVideoStats.framesDecoded) * 1000;
64
+ }
65
+ // https://w3c.github.io/webrtc-stats/#dom-rtcinboundrtpstreamstats-jitterbufferminimumdelay
66
+ if (stats.inboundVideoStats.jitterBufferDelay !== undefined &&
67
+ stats.inboundVideoStats.jitterBufferEmittedCount !== undefined) {
68
+ latencyInfo.averageJitterBufferDelayMs =
69
+ (stats.inboundVideoStats.jitterBufferDelay /
70
+ stats.inboundVideoStats.jitterBufferEmittedCount) *
71
+ 1000;
72
+ }
73
+ // https://w3c.github.io/webrtc-stats/#dom-rtcinboundrtpstreamstats-totaldecodetime
74
+ if (stats.inboundVideoStats.framesDecoded !== undefined &&
75
+ stats.inboundVideoStats.totalDecodeTime !== undefined) {
76
+ latencyInfo.averageDecodeLatencyMs =
77
+ (stats.inboundVideoStats.totalDecodeTime / stats.inboundVideoStats.framesDecoded) * 1000;
78
+ }
79
+ // https://w3c.github.io/webrtc-stats/#dom-rtcinboundrtpstreamstats-framesassembledfrommultiplepackets
80
+ if (stats.inboundVideoStats.totalAssemblyTime !== undefined &&
81
+ stats.inboundVideoStats.framesAssembledFromMultiplePackets !== undefined) {
82
+ latencyInfo.averageAssemblyDelayMs =
83
+ (stats.inboundVideoStats.totalAssemblyTime /
84
+ stats.inboundVideoStats.framesAssembledFromMultiplePackets) *
85
+ 1000;
86
+ }
87
+ // Extract extra Chrome-specific stats like encoding latency
88
+ if (stats.inboundVideoStats.googTimingFrameInfo !== undefined &&
89
+ stats.inboundVideoStats.googTimingFrameInfo.length > 0) {
90
+ latencyInfo.frameTiming = this.extractFrameTimingInfo(stats.inboundVideoStats.googTimingFrameInfo);
91
+ }
92
+ // Calculate E2E latency using video-timing capture to send time + one way network latency + receiver-side latency
93
+ if (latencyInfo.frameTiming !== undefined &&
94
+ latencyInfo.frameTiming.captureToSendLatencyMs !== undefined &&
95
+ latencyInfo.averageProcessingDelayMs !== undefined &&
96
+ latencyInfo.rttMs !== undefined) {
97
+ latencyInfo.averageE2ELatency =
98
+ latencyInfo.frameTiming.captureToSendLatencyMs +
99
+ latencyInfo.rttMs * 0.5 +
100
+ latencyInfo.averageProcessingDelayMs;
101
+ }
102
+ // Calculate E2E latency as abs-capture-time capture to send latency + one way network latency + receiver-side latency
103
+ if (latencyInfo.senderLatencyMs != undefined &&
104
+ latencyInfo.averageProcessingDelayMs !== undefined &&
105
+ latencyInfo.rttMs !== undefined) {
106
+ latencyInfo.averageE2ELatency =
107
+ latencyInfo.senderLatencyMs + latencyInfo.rttMs * 0.5 + latencyInfo.averageProcessingDelayMs;
108
+ }
109
+ return latencyInfo;
110
+ }
111
+ extractFrameTimingInfo(googTimingFrameInfo) {
112
+ const timingInfo = new FrameTimingInfo();
113
+ const timingInfoArr = googTimingFrameInfo.split(',');
114
+ // Should have exactly 15 elements according to:
115
+ // https://source.chromium.org/chromium/chromium/src/+/main:third_party/webrtc/api/video/video_timing.cc;l=82;drc=8d399817282e3c12ed54eb23ec42a5e418298ec6
116
+ if (timingInfoArr.length === 15) {
117
+ timingInfo.rtpTimestamp = Number.parseInt(timingInfoArr[0]);
118
+ timingInfo.captureTimestamp = Number.parseInt(timingInfoArr[1]);
119
+ timingInfo.encodeStartTimestamp = Number.parseInt(timingInfoArr[2]);
120
+ timingInfo.encodeFinishTimestamp = Number.parseInt(timingInfoArr[3]);
121
+ timingInfo.packetizerFinishTimestamp = Number.parseInt(timingInfoArr[4]);
122
+ timingInfo.pacerExitTimestamp = Number.parseInt(timingInfoArr[5]);
123
+ timingInfo.networkTimestamp1 = Number.parseInt(timingInfoArr[6]);
124
+ timingInfo.networkTimestamp2 = Number.parseInt(timingInfoArr[7]);
125
+ timingInfo.receiveStart = Number.parseInt(timingInfoArr[8]);
126
+ timingInfo.receiveFinish = Number.parseInt(timingInfoArr[9]);
127
+ timingInfo.decodeStart = Number.parseInt(timingInfoArr[10]);
128
+ timingInfo.decodeFinish = Number.parseInt(timingInfoArr[11]);
129
+ timingInfo.renderTime = Number.parseInt(timingInfoArr[12]);
130
+ timingInfo.isOutlier = Number.parseInt(timingInfoArr[13]) > 0;
131
+ timingInfo.isTriggeredByTimer = Number.parseInt(timingInfoArr[14]) > 0;
132
+ // Calculate some latency stats
133
+ timingInfo.encoderLatencyMs = timingInfo.encodeFinishTimestamp - timingInfo.encodeStartTimestamp;
134
+ timingInfo.packetizeLatencyMs =
135
+ timingInfo.packetizerFinishTimestamp - timingInfo.encodeFinishTimestamp;
136
+ timingInfo.pacerLatencyMs = timingInfo.pacerExitTimestamp - timingInfo.packetizerFinishTimestamp;
137
+ timingInfo.captureToSendLatencyMs = timingInfo.pacerExitTimestamp - timingInfo.captureTimestamp;
138
+ }
139
+ return timingInfo;
140
+ }
141
+ calculateSenderLatency(stats, captureSource) {
142
+ // The calculation performed in this function is as per the procedure defined here:
143
+ // https://w3c.github.io/webrtc-extensions/#dom-rtcrtpcontributingsource-sendercapturetimeoffset
144
+ // Get the sender capture in the sender's clock
145
+ const senderCaptureTimestamp = captureSource.captureTimestamp + captureSource.senderCaptureTimeOffset;
146
+ let sendRecvClockOffset = this.calculateSenderReceiverClockOffset(stats);
147
+ // Use latest clock offset if we couldn't calculate one now
148
+ if (sendRecvClockOffset == null) {
149
+ if (this.latestSenderRecvClockOffset != null) {
150
+ sendRecvClockOffset = this.latestSenderRecvClockOffset;
151
+ }
152
+ else {
153
+ return null;
154
+ }
155
+ }
156
+ else {
157
+ this.latestSenderRecvClockOffset = sendRecvClockOffset;
158
+ }
159
+ // This brings sender clock roughly inline with recv clock
160
+ const recvCaptureTimestampNTP = senderCaptureTimestamp + sendRecvClockOffset;
161
+ // As defined in Chrome source: https://chromium.googlesource.com/external/webrtc/+/master/system_wrappers/include/clock.h#26
162
+ const ntp1970 = 2208988800000;
163
+ const recvCaptureTimestamp = recvCaptureTimestampNTP - ntp1970;
164
+ const senderLatency = captureSource.timestamp - recvCaptureTimestamp;
165
+ return senderLatency;
166
+ }
167
+ /**
168
+ * Find the first valid ssrc or csrc that has capture time fields present from abs-capture-time header extension.
169
+ * @param receivers The RTP receviers this peer connection has.
170
+ * @returns A single valid ssrc or csrc that has capture time fields or null if there is none (e.g. in non-chromium browsers it will be null).
171
+ */
172
+ getCaptureSource(receivers) {
173
+ // We only want video receivers
174
+ receivers = receivers.filter((receiver) => receiver.track.kind === 'video');
175
+ for (const receiver of receivers) {
176
+ // Go through all ssrc and csrc to check for capture timestamp
177
+ // Note: Conversion to `any` here is because TS does not have captureTimestamp etc defined in the types
178
+ // these fields only exist in Chromium currently.
179
+ const sources = receiver
180
+ .getSynchronizationSources()
181
+ .concat(receiver.getContributingSources());
182
+ for (const src of sources) {
183
+ if (src.captureTimestamp !== undefined &&
184
+ src.senderCaptureTimeOffset !== undefined &&
185
+ src.timestamp !== undefined) {
186
+ const captureSrc = new RTCRtpCaptureSource();
187
+ captureSrc.timestamp = src.timestamp;
188
+ captureSrc.captureTimestamp = src.captureTimestamp;
189
+ captureSrc.senderCaptureTimeOffset = src.senderCaptureTimeOffset;
190
+ return captureSrc;
191
+ }
192
+ }
193
+ }
194
+ return null;
195
+ }
196
+ calculateSenderReceiverClockOffset(stats) {
197
+ // The calculation performed in this function is as per the procedure defined here:
198
+ // https://w3c.github.io/webrtc-extensions/#dom-rtcrtpcontributingsource-sendercapturetimeoffset
199
+ const hasRemoteOutboundVideoStats = stats.remoteOutboundVideoStats !== undefined &&
200
+ stats.remoteOutboundVideoStats.timestamp !== undefined &&
201
+ stats.remoteOutboundVideoStats.remoteTimestamp !== undefined;
202
+ // Note: As of Chrome 132, remote-outbound-rtp stats for video are not yet implemented (audio works).
203
+ // This codepath should activate once they do begin to work.
204
+ if (!hasRemoteOutboundVideoStats) {
205
+ return null;
206
+ }
207
+ const remoteStatsArrivedTimestamp = stats.remoteOutboundVideoStats.timestamp;
208
+ const remoteStatsSentTimestamp = stats.remoteOutboundVideoStats.remoteTimestamp;
209
+ const rttMs = this.getRTTMs(stats);
210
+ if (remoteStatsArrivedTimestamp !== undefined &&
211
+ remoteStatsSentTimestamp !== undefined &&
212
+ rttMs !== null) {
213
+ const onewayDelay = rttMs * 0.5;
214
+ return remoteStatsArrivedTimestamp - (remoteStatsSentTimestamp + onewayDelay);
215
+ }
216
+ // Could not get stats to calculate sender/receiver clock offset
217
+ else {
218
+ return null;
219
+ }
220
+ }
221
+ getRTTMs(stats) {
222
+ // Try to get it from the active candidate pair
223
+ const activeCandidatePair = stats.getActiveCandidatePair();
224
+ if (!!activeCandidatePair && activeCandidatePair.currentRoundTripTime !== undefined) {
225
+ const curRTTSeconds = activeCandidatePair.currentRoundTripTime;
226
+ return curRTTSeconds * 1000;
227
+ }
228
+ // Next try to get it from remote-outbound-rtp video stats
229
+ if (!!stats.remoteOutboundVideoStats &&
230
+ stats.remoteOutboundVideoStats.totalRoundTripTime !== undefined &&
231
+ stats.remoteOutboundVideoStats.roundTripTimeMeasurements !== undefined &&
232
+ stats.remoteOutboundVideoStats.roundTripTimeMeasurements > 0) {
233
+ const avgRttSeconds = stats.remoteOutboundVideoStats.totalRoundTripTime /
234
+ stats.remoteOutboundVideoStats.roundTripTimeMeasurements;
235
+ return avgRttSeconds * 1000;
236
+ }
237
+ // Next try to get it from remote-outbound-rtp audio stats
238
+ if (!!stats.remoteOutboundAudioStats &&
239
+ stats.remoteOutboundAudioStats.totalRoundTripTime !== undefined &&
240
+ stats.remoteOutboundAudioStats.roundTripTimeMeasurements !== undefined &&
241
+ stats.remoteOutboundAudioStats.roundTripTimeMeasurements > 0) {
242
+ const avgRttSeconds = stats.remoteOutboundAudioStats.totalRoundTripTime /
243
+ stats.remoteOutboundAudioStats.roundTripTimeMeasurements;
244
+ return avgRttSeconds * 1000;
245
+ }
246
+ return null;
247
+ }
248
+ }
249
+ /**
250
+ * A collection of latency information calculated using the WebRTC API.
251
+ * Most stats are calculated following the spec:
252
+ * https://w3c.github.io/webrtc-stats/#dictionary-rtcinboundrtpstreamstats-members
253
+ */
254
+ export class LatencyInfo {
255
+ constructor() {
256
+ /**
257
+ * The time taken from the moment a frame is done capturing to the moment it is sent over the network.
258
+ * Note: This can only be calculated if both offer and answer contain the
259
+ * the RTP header extension for `video-timing` (Chrome only for now)
260
+ */
261
+ this.senderLatencyMs = undefined;
262
+ /**
263
+ * The time taken from the moment a frame is done capturing to the moment it is sent over the network.
264
+ * Note: This can only be calculated if both offer and answer contain the
265
+ * the RTP header extension for `abs-capture-time` (Chrome only for now)
266
+ */
267
+ this.senderLatencyAbsCaptureTimeMs = undefined;
268
+ /* The round trip time (milliseconds) between each sender->receiver->sender */
269
+ this.rttMs = undefined;
270
+ /* Average time taken (milliseconds) from video packet receipt to post-decode. */
271
+ this.averageProcessingDelayMs = undefined;
272
+ /* Average time taken (milliseconds) inside the jitter buffer (which is post-receipt but pre-decode). */
273
+ this.averageJitterBufferDelayMs = undefined;
274
+ /* Average time taken (milliseconds) to decode a video frame. */
275
+ this.averageDecodeLatencyMs = undefined;
276
+ /* Average time taken (milliseconds) to between receipt of the first and last video packet of a. */
277
+ this.averageAssemblyDelayMs = undefined;
278
+ /* The sender latency + RTT/2 + processing delay */
279
+ this.averageE2ELatency = undefined;
280
+ /* Timing information about the worst performing frame since the last getStats call (only works on Chrome) */
281
+ this.frameTiming = undefined;
282
+ }
283
+ }
284
+ //# sourceMappingURL=LatencyCalculator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"LatencyCalculator.js","sourceRoot":"","sources":["../../../src/PeerConnectionController/LatencyCalculator.ts"],"names":[],"mappings":"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"}
@@ -1,12 +1,16 @@
1
1
  // Copyright Epic Games, Inc. All Rights Reserved.
2
2
  /**
3
- * Outbound Video Stats collected from the RTC Stats Report
3
+ * Outbound RTP stats collected from the RTC Stats Report under `outbound-rtp`.
4
+ * Wrapper around: https://developer.mozilla.org/en-US/docs/Web/API/RTCOutboundRtpStreamStats
5
+ * These are stats for video we are sending to a remote peer.
4
6
  */
5
- export class OutBoundVideoStats {
7
+ export class OutboundRTPStats {
6
8
  }
7
9
  /**
8
- * Outbound Stats collected from the RTC Stats Report
10
+ * Remote outbound stats collected from the RTC Stats Report under `remote-outbound-rtp`.
11
+ * Wrapper around: https://developer.mozilla.org/en-US/docs/Web/API/RTCRemoteOutboundRtpStreamStats
12
+ * These are stats for media we are receiving from a remote peer.
9
13
  */
10
- export class OutBoundRTPStats {
14
+ export class RemoteOutboundRTPStats {
11
15
  }
12
16
  //# sourceMappingURL=OutBoundRTPStats.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"OutBoundRTPStats.js","sourceRoot":"","sources":["../../../src/PeerConnectionController/OutBoundRTPStats.ts"],"names":[],"mappings":"AAAA,kDAAkD;AAElD;;GAEG;AACH,MAAM,OAAO,kBAAkB;CAO9B;AAED;;GAEG;AACH,MAAM,OAAO,gBAAgB;CAQ5B"}
1
+ {"version":3,"file":"OutBoundRTPStats.js","sourceRoot":"","sources":["../../../src/PeerConnectionController/OutBoundRTPStats.ts"],"names":[],"mappings":"AAAA,kDAAkD;AAElD;;;;GAIG;AACH,MAAM,OAAO,gBAAgB;CA+B5B;AAED;;;;GAIG;AACH,MAAM,OAAO,sBAAsB;CAclC"}
@@ -13,6 +13,9 @@ import { OptionParameters, Flags } from '../Config/Config';
13
13
  import { AggregatedStats } from './AggregatedStats';
14
14
  import { parseRtpParameters, splitSections } from 'sdp';
15
15
  import { RTCUtils } from '../Util/RTCUtils';
16
+ import { SDPUtils } from '@epicgames-ps/lib-pixelstreamingcommon-ue5.5';
17
+ import { LatencyCalculator } from './LatencyCalculator';
18
+ export const kAbsCaptureTime = 'http://www.webrtc.org/experiments/rtp-hdrext/abs-capture-time';
16
19
  /**
17
20
  * Handles the Peer Connection
18
21
  */
@@ -25,6 +28,7 @@ export class PeerConnectionController {
25
28
  constructor(options, config, preferredCodec) {
26
29
  this.config = config;
27
30
  this.createPeerConnection(options, preferredCodec);
31
+ this.latencyCalculator = new LatencyCalculator();
28
32
  }
29
33
  createPeerConnection(options, preferredCodec) {
30
34
  // Set the ICE transport to relay if TURN enabled
@@ -76,13 +80,22 @@ export class PeerConnectionController {
76
80
  });
77
81
  }
78
82
  /**
79
- *
83
+ * Receive offer from UE side and process it as the remote description of this peer connection
80
84
  */
81
85
  receiveOffer(offer, config) {
82
86
  return __awaiter(this, void 0, void 0, function* () {
83
87
  var _a;
84
88
  Logger.Info('Receive Offer');
89
+ // If UE or JSStreamer did send abs-capture-time RTP header extension to a non-Chrome browser
90
+ // then remove it from the SDP because if Firefox detects it in offer or answer it will fail to connect
91
+ // due having 15 or more header extensions: https://mailarchive.ietf.org/arch/msg/rtcweb/QRnWNuWzGuLRovWdHkodNP6VOgg/
92
+ if (this.isFirefox()) {
93
+ // example: a=extmap:15 http://www.webrtc.org/experiments/rtp-hdrext/abs-capture-time
94
+ offer.sdp = offer.sdp.replace(/^a=extmap:\d+ http:\/\/www\.webrtc\.org\/experiments\/rtp-hdrext\/abs-capture-time\r\n/gm, '');
95
+ }
85
96
  (_a = this.peerConnection) === null || _a === void 0 ? void 0 : _a.setRemoteDescription(offer).then(() => {
97
+ // Fire event for when remote offer description is set
98
+ this.onSetRemoteDescription(offer);
86
99
  const isLocalhostConnection = location.hostname === 'localhost' || location.hostname === '127.0.0.1';
87
100
  const isHttpsConnection = location.protocol === 'https:';
88
101
  let useMic = config.isFlagEnabled(Flags.UseMic);
@@ -103,9 +116,9 @@ export class PeerConnectionController {
103
116
  return (_a = this.peerConnection) === null || _a === void 0 ? void 0 : _a.setLocalDescription(Answer);
104
117
  }).then(() => {
105
118
  var _a;
106
- this.onSendWebRTCAnswer((_a = this.peerConnection) === null || _a === void 0 ? void 0 : _a.currentLocalDescription);
107
- }).catch(() => {
108
- Logger.Error('createAnswer() failed');
119
+ this.onSetLocalDescription((_a = this.peerConnection) === null || _a === void 0 ? void 0 : _a.currentLocalDescription);
120
+ }).catch((err) => {
121
+ Logger.Error(`createAnswer() failed - ${err}`);
109
122
  });
110
123
  });
111
124
  });
@@ -125,23 +138,19 @@ export class PeerConnectionController {
125
138
  * Generate Aggregated Stats and then fire a onVideo Stats event
126
139
  */
127
140
  generateStats() {
128
- var _a, _b;
129
- const audioPromise = this.audioTrack
130
- ? (_a = this.peerConnection) === null || _a === void 0 ? void 0 : _a.getStats(this.audioTrack).then((statsData) => {
131
- this.aggregatedStats.processStats(statsData);
132
- })
133
- : Promise.resolve();
134
- const videoPromise = this.videoTrack
135
- ? (_b = this.peerConnection) === null || _b === void 0 ? void 0 : _b.getStats(this.videoTrack).then((statsData) => {
136
- this.aggregatedStats.processStats(statsData);
137
- })
138
- : Promise.resolve();
139
- Promise.allSettled([audioPromise, videoPromise]).then(() => {
141
+ this.peerConnection.getStats().then((statsData) => {
142
+ this.aggregatedStats.processStats(statsData);
140
143
  this.onVideoStats(this.aggregatedStats);
144
+ // Calculate latency using stats and video receivers and then call the handling function
145
+ const latencyInfo = this.latencyCalculator.calculate(this.aggregatedStats, this.peerConnection.getReceivers());
146
+ this.onLatencyCalculated(latencyInfo);
141
147
  // Update the preferred codec selection based on what was actually negotiated
142
148
  if (this.updateCodecSelection && !!this.aggregatedStats.inboundVideoStats.codecId) {
143
149
  // Construct the qualified codec name from the mimetype and fmtp
144
150
  const codecStats = this.aggregatedStats.codecs.get(this.aggregatedStats.inboundVideoStats.codecId);
151
+ if (codecStats === undefined) {
152
+ return;
153
+ }
145
154
  const codecShortname = codecStats.mimeType.replace('video/', '');
146
155
  let fullCodecName = codecShortname;
147
156
  if (codecStats.sdpFmtpLine && codecStats.sdpFmtpLine.trim() !== '') {
@@ -191,8 +200,17 @@ export class PeerConnectionController {
191
200
  audioSDP += 'useinbandfec=1';
192
201
  // We use the line 'useinbandfec=1' (which Opus uses) to set our Opus specific audio parameters.
193
202
  mungedSDP = mungedSDP.replace('useinbandfec=1', audioSDP);
203
+ // Add abs-capture-time RTP header extension if we have enabled the setting.
204
+ // Note: As at Feb 2025, Chromium based browsers are the only ones that support this and
205
+ // munging it into the answer in Firefox will cause the connection to fail.
206
+ if (this.config.isFlagEnabled(Flags.EnableCaptureTimeExt) && !this.isFirefox()) {
207
+ mungedSDP = SDPUtils.addVideoHeaderExtensionToSdp(mungedSDP, kAbsCaptureTime);
208
+ }
194
209
  return mungedSDP;
195
210
  }
211
+ isFirefox() {
212
+ return navigator.userAgent.indexOf('Firefox') > 0;
213
+ }
196
214
  /**
197
215
  * When a Ice Candidate is received add to the RTC Peer Connection
198
216
  * @param iceCandidate - RTC Ice Candidate from the Signaling Server
@@ -512,6 +530,14 @@ export class PeerConnectionController {
512
530
  onVideoStats(event) {
513
531
  // Default Functionality: Do Nothing
514
532
  }
533
+ /**
534
+ * And override event for when latency info is calculated
535
+ * @param latencyInfo - Calculated latency information.
536
+ */
537
+ // eslint-disable-next-line @typescript-eslint/no-unused-vars
538
+ onLatencyCalculated(latencyInfo) {
539
+ // Default Functionality: Do Nothing
540
+ }
515
541
  /**
516
542
  * Event to send the RTC offer to the Signaling server
517
543
  * @param offer - RTC Offer
@@ -521,11 +547,19 @@ export class PeerConnectionController {
521
547
  // Default Functionality: Do Nothing
522
548
  }
523
549
  /**
524
- * Event to send the RTC Answer to the Signaling server
550
+ * Event fired when remote offer description is set.
551
+ * @param offer - RTC Offer
552
+ */
553
+ // eslint-disable-next-line @typescript-eslint/no-unused-vars
554
+ onSetRemoteDescription(offer) {
555
+ // Default Functionality: Do Nothing
556
+ }
557
+ /**
558
+ * Event fire when local description answer is set.
525
559
  * @param answer - RTC Answer
526
560
  */
527
561
  // eslint-disable-next-line @typescript-eslint/no-unused-vars
528
- onSendWebRTCAnswer(answer) {
562
+ onSetLocalDescription(answer) {
529
563
  // Default Functionality: Do Nothing
530
564
  }
531
565
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"PeerConnectionController.js","sourceRoot":"","sources":["../../../src/PeerConnectionController/PeerConnectionController.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"PeerConnectionController.js","sourceRoot":"","sources":["../../../src/PeerConnectionController/PeerConnectionController.ts"],"names":[],"mappings":"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"}
@@ -4,7 +4,7 @@ import { WebRtcPlayerController } from '../WebRtcPlayer/WebRtcPlayerController';
4
4
  import { Flags, NumericParameters } from '../Config/Config';
5
5
  import { Logger } from '@epicgames-ps/lib-pixelstreamingcommon-ue5.5';
6
6
  import { OnScreenKeyboard } from '../UI/OnScreenKeyboard';
7
- import { PixelStreamingEventEmitter, InitialSettingsEvent, LatencyTestResultEvent, StatsReceivedEvent, StreamLoadingEvent, StreamPreConnectEvent, StreamReconnectEvent, StreamPreDisconnectEvent, VideoEncoderAvgQPEvent, VideoInitializedEvent, WebRtcAutoConnectEvent, WebRtcConnectedEvent, WebRtcConnectingEvent, WebRtcDisconnectedEvent, WebRtcFailedEvent, WebRtcSdpEvent, DataChannelLatencyTestResponseEvent, DataChannelLatencyTestResultEvent, PlayerCountEvent, WebRtcTCPRelayDetectedEvent, SubscribeFailedEvent } from '../Util/EventEmitter';
7
+ import { PixelStreamingEventEmitter, InitialSettingsEvent, LatencyCalculatedEvent, LatencyTestResultEvent, StatsReceivedEvent, StreamLoadingEvent, StreamPreConnectEvent, StreamReconnectEvent, StreamPreDisconnectEvent, VideoEncoderAvgQPEvent, VideoInitializedEvent, WebRtcAutoConnectEvent, WebRtcConnectedEvent, WebRtcConnectingEvent, WebRtcDisconnectedEvent, WebRtcFailedEvent, WebRtcSdpEvent, DataChannelLatencyTestResponseEvent, DataChannelLatencyTestResultEvent, PlayerCountEvent, WebRtcTCPRelayDetectedEvent, SubscribeFailedEvent, WebRtcSdpOfferEvent, WebRtcSdpAnswerEvent } from '../Util/EventEmitter';
8
8
  import { WebXRController } from '../WebXR/WebXRController';
9
9
  import { MessageDirection } from '../UeInstanceMessage/StreamMessageController';
10
10
  import { DataChannelLatencyTestController } from '../DataChannel/DataChannelLatencyTestController';
@@ -300,19 +300,37 @@ export class PixelStreaming {
300
300
  }
301
301
  }
302
302
  /**
303
- * Emit an event on auto connecting
303
+ * Internal function to emit an event when auto connecting occurs
304
304
  */
305
305
  _onWebRtcAutoConnect() {
306
306
  this._eventEmitter.dispatchEvent(new WebRtcAutoConnectEvent());
307
307
  }
308
308
  /**
309
- * Set up functionality to happen when receiving a webRTC answer
309
+ * Internal function to emit an event for when SDP negotiation is fully finished.
310
310
  */
311
311
  _onWebRtcSdp() {
312
312
  this._eventEmitter.dispatchEvent(new WebRtcSdpEvent());
313
313
  }
314
314
  /**
315
- * Emits a StreamLoading event
315
+ * Internal function to emit an SDP offer after it has been set.
316
+ */
317
+ _onWebRtcSdpOffer(offer) {
318
+ this._eventEmitter.dispatchEvent(new WebRtcSdpOfferEvent({ sdp: offer }));
319
+ }
320
+ /**
321
+ * Internal function to emit an SDP answer after it has been set.
322
+ */
323
+ _onWebRtcSdpAnswer(answer) {
324
+ this._eventEmitter.dispatchEvent(new WebRtcSdpAnswerEvent({ sdp: answer }));
325
+ }
326
+ /**
327
+ * Internal function call to emit a `latencyCalculated` event.
328
+ */
329
+ _onLatencyCalculated(latencyInfo) {
330
+ this._eventEmitter.dispatchEvent(new LatencyCalculatedEvent({ latencyInfo }));
331
+ }
332
+ /**
333
+ * Internal function to emits a StreamLoading event
316
334
  */
317
335
  _onStreamLoading() {
318
336
  this._eventEmitter.dispatchEvent(new StreamLoadingEvent());