@epicgames-ps/lib-pixelstreamingfrontend-ue5.5 0.4.8 → 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 (116) 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/PeerConnectionController/AggregatedStats.js +103 -45
  16. package/dist/cjs/PeerConnectionController/AggregatedStats.js.map +1 -1
  17. package/dist/cjs/PeerConnectionController/InboundRTPStats.js.map +1 -1
  18. package/dist/cjs/PeerConnectionController/LatencyCalculator.js +290 -0
  19. package/dist/cjs/PeerConnectionController/LatencyCalculator.js.map +1 -0
  20. package/dist/cjs/PeerConnectionController/OutBoundRTPStats.js +11 -7
  21. package/dist/cjs/PeerConnectionController/OutBoundRTPStats.js.map +1 -1
  22. package/dist/cjs/PeerConnectionController/PeerConnectionController.js +53 -19
  23. package/dist/cjs/PeerConnectionController/PeerConnectionController.js.map +1 -1
  24. package/dist/cjs/PixelStreaming/PixelStreaming.js +21 -3
  25. package/dist/cjs/PixelStreaming/PixelStreaming.js.map +1 -1
  26. package/dist/cjs/Util/EventEmitter.js +31 -1
  27. package/dist/cjs/Util/EventEmitter.js.map +1 -1
  28. package/dist/cjs/WebRtcPlayer/WebRtcPlayerController.js +20 -4
  29. package/dist/cjs/WebRtcPlayer/WebRtcPlayerController.js.map +1 -1
  30. package/dist/cjs/__test__/mockMediaStream.js +100 -0
  31. package/dist/cjs/__test__/mockMediaStream.js.map +1 -0
  32. package/dist/cjs/__test__/mockRTCPeerConnection.js +252 -0
  33. package/dist/cjs/__test__/mockRTCPeerConnection.js.map +1 -0
  34. package/dist/cjs/__test__/mockRTCRtpReceiver.js +26 -0
  35. package/dist/cjs/__test__/mockRTCRtpReceiver.js.map +1 -0
  36. package/dist/cjs/__test__/mockWebSocket.js +109 -0
  37. package/dist/cjs/__test__/mockWebSocket.js.map +1 -0
  38. package/dist/cjs/pixelstreamingfrontend.js +4 -2
  39. package/dist/cjs/pixelstreamingfrontend.js.map +1 -1
  40. package/dist/esm/Config/Config.js +4 -0
  41. package/dist/esm/Config/Config.js.map +1 -1
  42. package/dist/esm/Config/SettingBase.js +1 -3
  43. package/dist/esm/Config/SettingBase.js.map +1 -1
  44. package/dist/esm/Config/SettingFlag.js +1 -3
  45. package/dist/esm/Config/SettingFlag.js.map +1 -1
  46. package/dist/esm/Config/SettingNumber.js +1 -3
  47. package/dist/esm/Config/SettingNumber.js.map +1 -1
  48. package/dist/esm/Config/SettingOption.js +2 -6
  49. package/dist/esm/Config/SettingOption.js.map +1 -1
  50. package/dist/esm/Config/SettingText.js +1 -3
  51. package/dist/esm/Config/SettingText.js.map +1 -1
  52. package/dist/esm/Inputs/GamepadController.js +0 -2
  53. package/dist/esm/Inputs/GamepadController.js.map +1 -1
  54. package/dist/esm/PeerConnectionController/AggregatedStats.js +104 -46
  55. package/dist/esm/PeerConnectionController/AggregatedStats.js.map +1 -1
  56. package/dist/esm/PeerConnectionController/InboundRTPStats.js.map +1 -1
  57. package/dist/esm/PeerConnectionController/LatencyCalculator.js +284 -0
  58. package/dist/esm/PeerConnectionController/LatencyCalculator.js.map +1 -0
  59. package/dist/esm/PeerConnectionController/OutBoundRTPStats.js +8 -4
  60. package/dist/esm/PeerConnectionController/OutBoundRTPStats.js.map +1 -1
  61. package/dist/esm/PeerConnectionController/PeerConnectionController.js +52 -18
  62. package/dist/esm/PeerConnectionController/PeerConnectionController.js.map +1 -1
  63. package/dist/esm/PixelStreaming/PixelStreaming.js +22 -4
  64. package/dist/esm/PixelStreaming/PixelStreaming.js.map +1 -1
  65. package/dist/esm/Util/EventEmitter.js +27 -0
  66. package/dist/esm/Util/EventEmitter.js.map +1 -1
  67. package/dist/esm/WebRtcPlayer/WebRtcPlayerController.js +20 -4
  68. package/dist/esm/WebRtcPlayer/WebRtcPlayerController.js.map +1 -1
  69. package/dist/esm/__test__/mockMediaStream.js +92 -0
  70. package/dist/esm/__test__/mockMediaStream.js.map +1 -0
  71. package/dist/esm/__test__/mockRTCPeerConnection.js +242 -0
  72. package/dist/esm/__test__/mockRTCPeerConnection.js.map +1 -0
  73. package/dist/esm/__test__/mockRTCRtpReceiver.js +21 -0
  74. package/dist/esm/__test__/mockRTCRtpReceiver.js.map +1 -0
  75. package/dist/esm/__test__/mockWebSocket.js +103 -0
  76. package/dist/esm/__test__/mockWebSocket.js.map +1 -0
  77. package/dist/esm/pixelstreamingfrontend.js +2 -1
  78. package/dist/esm/pixelstreamingfrontend.js.map +1 -1
  79. package/dist/types/Config/Config.d.ts +1 -0
  80. package/dist/types/PeerConnectionController/AggregatedStats.d.ts +18 -7
  81. package/dist/types/PeerConnectionController/InboundRTPStats.d.ts +88 -85
  82. package/dist/types/PeerConnectionController/LatencyCalculator.d.ts +87 -0
  83. package/dist/types/PeerConnectionController/OutBoundRTPStats.d.ts +46 -12
  84. package/dist/types/PeerConnectionController/PeerConnectionController.d.ts +17 -3
  85. package/dist/types/PixelStreaming/PixelStreaming.d.ts +16 -3
  86. package/dist/types/Util/EventEmitter.d.ts +34 -1
  87. package/dist/types/VideoPlayer/VideoPlayer.d.ts +1 -1
  88. package/dist/types/__test__/mockMediaStream.d.ts +49 -0
  89. package/dist/types/__test__/mockRTCPeerConnection.d.ts +134 -0
  90. package/dist/types/__test__/mockRTCRtpReceiver.d.ts +3 -0
  91. package/dist/types/__test__/mockWebSocket.d.ts +33 -0
  92. package/dist/types/pixelstreamingfrontend.d.ts +2 -1
  93. package/eslint.config.mjs +52 -0
  94. package/package.json +13 -14
  95. package/src/Config/Config.ts +14 -0
  96. package/src/Config/SettingBase.ts +1 -1
  97. package/src/Config/SettingFlag.ts +1 -1
  98. package/src/Config/SettingNumber.ts +1 -1
  99. package/src/Config/SettingOption.ts +2 -2
  100. package/src/Config/SettingText.ts +1 -1
  101. package/src/Inputs/GamepadController.ts +2 -2
  102. package/src/PeerConnectionController/AggregatedStats.ts +111 -52
  103. package/src/PeerConnectionController/InboundRTPStats.ts +88 -85
  104. package/src/PeerConnectionController/LatencyCalculator.ts +392 -0
  105. package/src/PeerConnectionController/OutBoundRTPStats.ts +46 -12
  106. package/src/PeerConnectionController/PeerConnectionController.ts +72 -19
  107. package/src/PixelStreaming/PixelStreaming.ts +29 -4
  108. package/src/Util/EventEmitter.ts +48 -0
  109. package/src/VideoPlayer/VideoPlayer.ts +1 -1
  110. package/src/WebRtcPlayer/WebRtcPlayerController.ts +23 -5
  111. package/src/__test__/mockRTCPeerConnection.ts +1 -1
  112. package/src/pixelstreamingfrontend.ts +2 -1
  113. package/tsconfig.base.json +2 -2
  114. package/.eslintignore +0 -12
  115. package/.eslintrc.js +0 -20
  116. package/.prettierrc.json +0 -7
@@ -2,140 +2,143 @@
2
2
  * Inbound Audio Stats collected from the RTC Stats Report
3
3
  */
4
4
  export declare class InboundAudioStats {
5
- audioLevel: number;
5
+ audioLevel: number | undefined;
6
6
  bytesReceived: number;
7
7
  codecId: string;
8
- concealedSamples: number;
9
- concealmentEvents: number;
10
- fecPacketsDiscarded: number;
11
- fecPacketsReceived: number;
8
+ concealedSamples: number | undefined;
9
+ concealmentEvents: number | undefined;
10
+ fecPacketsDiscarded: number | undefined;
11
+ fecPacketsReceived: number | undefined;
12
12
  headerBytesReceived: number;
13
13
  id: string;
14
- insertedSamplesForDeceleration: number;
14
+ insertedSamplesForDeceleration: number | undefined;
15
15
  jitter: number;
16
16
  jitterBufferDelay: number;
17
17
  jitterBufferEmittedCount: number;
18
- jitterBufferMinimumDelay: number;
19
- jitterBufferTargetDelay: number;
18
+ jitterBufferMinimumDelay: number | undefined;
19
+ jitterBufferTargetDelay: number | undefined;
20
20
  kind: string;
21
21
  lastPacketReceivedTimestamp: number;
22
- mediaType: string;
22
+ mediaType: string | undefined;
23
23
  mid: string;
24
- packetsDiscarded: number;
24
+ packetsDiscarded: number | undefined;
25
25
  packetsLost: number;
26
26
  packetsReceived: number;
27
- removedSamplesForAcceleration: number;
28
- silentConcealedSamples: number;
27
+ removedSamplesForAcceleration: number | undefined;
28
+ silentConcealedSamples: number | undefined;
29
29
  ssrc: number;
30
30
  timestamp: number;
31
- totalAudioEnergy: number;
32
- totalSamplesDuration: number;
33
- totalSamplesReceived: number;
34
- trackIdentifier: string;
35
- transportId: string;
31
+ totalAudioEnergy: number | undefined;
32
+ totalSamplesDuration: number | undefined;
33
+ totalSamplesReceived: number | undefined;
34
+ trackIdentifier: string | undefined;
35
+ transportId: string | undefined;
36
36
  type: string;
37
- bitrate: number;
37
+ bitrate: number | undefined;
38
38
  }
39
39
  /**
40
40
  * Inbound Video Stats collected from the RTC Stats Report
41
41
  */
42
42
  export declare class InboundVideoStats {
43
43
  bytesReceived: number;
44
- codecId: string;
45
- firCount: number;
46
- frameHeight: number;
47
- frameWidth: number;
48
- framesAssembledFromMultiplePackets: number;
49
- framesDecoded: number;
50
- framesDropped: number;
51
- framesPerSecond: number;
52
- framesReceived: number;
53
- freezeCount: number;
54
- googTimingFrameInfo: string;
44
+ codecId: string | undefined;
45
+ firCount: number | undefined;
46
+ frameHeight: number | undefined;
47
+ frameWidth: number | undefined;
48
+ framesAssembledFromMultiplePackets: number | undefined;
49
+ framesDecoded: number | undefined;
50
+ framesDropped: number | undefined;
51
+ framesPerSecond: number | undefined;
52
+ framesReceived: number | undefined;
53
+ freezeCount: number | undefined;
54
+ googTimingFrameInfo: string | undefined;
55
55
  headerBytesReceived: number;
56
56
  id: string;
57
57
  jitter: number;
58
58
  jitterBufferDelay: number;
59
59
  jitterBufferEmittedCount: number;
60
- keyFramesDecoded: number;
60
+ keyFramesDecoded: number | undefined;
61
61
  kind: string;
62
- lastPacketReceivedTimestamp: number;
63
- mediaType: string;
62
+ lastPacketReceivedTimestamp: number | undefined;
63
+ mediaType: string | undefined;
64
64
  mid: string;
65
- nackCount: number;
65
+ nackCount: number | undefined;
66
66
  packetsLost: number;
67
67
  packetsReceived: number;
68
- pauseCount: number;
69
- pliCount: number;
68
+ pauseCount: number | undefined;
69
+ pliCount: number | undefined;
70
70
  ssrc: number;
71
71
  timestamp: number;
72
- totalAssemblyTime: number;
73
- totalDecodeTime: number;
74
- totalFreezesDuration: number;
75
- totalInterFrameDelay: number;
76
- totalPausesDuration: number;
77
- totalProcessingDelay: number;
78
- totalSquaredInterFrameDelay: number;
79
- trackIdentifier: string;
80
- transportId: string;
72
+ totalAssemblyTime: number | undefined;
73
+ totalDecodeTime: number | undefined;
74
+ totalFreezesDuration: number | undefined;
75
+ totalInterFrameDelay: number | undefined;
76
+ totalPausesDuration: number | undefined;
77
+ totalProcessingDelay: number | undefined;
78
+ totalSquaredInterFrameDelay: number | undefined;
79
+ trackIdentifier: string | undefined;
80
+ transportId: string | undefined;
81
81
  type: string;
82
- bitrate: number;
82
+ bitrate: number | undefined;
83
83
  }
84
84
  /**
85
85
  * Inbound Stats collected from the RTC Stats Report
86
86
  */
87
87
  export declare class InboundRTPStats {
88
88
  bytesReceived: number;
89
- codecId: string;
89
+ codecId: string | undefined;
90
90
  headerBytesReceived: number;
91
91
  id: string;
92
92
  jitter: number;
93
93
  jitterBufferDelay: number;
94
94
  jitterBufferEmittedCount: number;
95
95
  kind: string;
96
- lastPacketReceivedTimestamp: number;
97
- mediaType: string;
96
+ lastPacketReceivedTimestamp: number | undefined;
97
+ mediaType: string | undefined;
98
98
  mid: string;
99
99
  packetsLost: number;
100
100
  packetsReceived: number;
101
+ playoutId: string | undefined;
102
+ qpsum: number | undefined;
103
+ remoteId: string | undefined;
101
104
  ssrc: number;
102
105
  timestamp: number;
103
- trackIdentifier: string;
104
- transportId: string;
106
+ trackIdentifier: string | undefined;
107
+ transportId: string | undefined;
105
108
  type: string;
106
- audioLevel: number;
107
- concealedSamples: number;
108
- concealmentEvents: number;
109
- fecPacketsDiscarded: number;
110
- fecPacketsReceived: number;
111
- insertedSamplesForDeceleration: number;
112
- jitterBufferMinimumDelay: number;
113
- jitterBufferTargetDelay: number;
114
- packetsDiscarded: number;
115
- removedSamplesForAcceleration: number;
116
- silentConcealedSamples: number;
117
- totalAudioEnergy: number;
118
- totalSamplesDuration: number;
119
- totalSamplesReceived: number;
120
- firCount: number;
121
- frameHeight: number;
122
- frameWidth: number;
123
- framesAssembledFromMultiplePackets: number;
124
- framesDecoded: number;
125
- framesDropped: number;
126
- framesPerSecond: number;
127
- framesReceived: number;
128
- freezeCount: number;
129
- googTimingFrameInfo: string;
130
- keyFramesDecoded: number;
131
- nackCount: number;
132
- pauseCount: number;
133
- pliCount: number;
134
- totalAssemblyTime: number;
135
- totalDecodeTime: number;
136
- totalFreezesDuration: number;
137
- totalInterFrameDelay: number;
138
- totalPausesDuration: number;
139
- totalProcessingDelay: number;
140
- totalSquaredInterFrameDelay: number;
109
+ audioLevel: number | undefined;
110
+ concealedSamples: number | undefined;
111
+ concealmentEvents: number | undefined;
112
+ fecPacketsDiscarded: number | undefined;
113
+ fecPacketsReceived: number | undefined;
114
+ insertedSamplesForDeceleration: number | undefined;
115
+ jitterBufferMinimumDelay: number | undefined;
116
+ jitterBufferTargetDelay: number | undefined;
117
+ packetsDiscarded: number | undefined;
118
+ removedSamplesForAcceleration: number | undefined;
119
+ silentConcealedSamples: number | undefined;
120
+ totalAudioEnergy: number | undefined;
121
+ totalSamplesDuration: number | undefined;
122
+ totalSamplesReceived: number | undefined;
123
+ firCount: number | undefined;
124
+ frameHeight: number | undefined;
125
+ frameWidth: number | undefined;
126
+ framesAssembledFromMultiplePackets: number | undefined;
127
+ framesDecoded: number | undefined;
128
+ framesDropped: number | undefined;
129
+ framesPerSecond: number | undefined;
130
+ framesReceived: number | undefined;
131
+ freezeCount: number | undefined;
132
+ googTimingFrameInfo: string | undefined;
133
+ keyFramesDecoded: number | undefined;
134
+ nackCount: number | undefined;
135
+ pauseCount: number | undefined;
136
+ pliCount: number | undefined;
137
+ totalAssemblyTime: number | undefined;
138
+ totalDecodeTime: number | undefined;
139
+ totalFreezesDuration: number | undefined;
140
+ totalInterFrameDelay: number | undefined;
141
+ totalPausesDuration: number | undefined;
142
+ totalProcessingDelay: number | undefined;
143
+ totalSquaredInterFrameDelay: number | undefined;
141
144
  }
@@ -0,0 +1,87 @@
1
+ import { AggregatedStats } from './AggregatedStats';
2
+ /**
3
+ * FrameTimingInfo is a Chromium-specific set of WebRTC stats useful for latency calculation. It is stored in WebRTC stats as `googTimingFrameInfo`.
4
+ * 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
5
+ * 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
6
+ * It is discussed by its author here: https://github.com/w3c/webrtc-provisional-stats/issues/40#issuecomment-1272916692
7
+ * In summary it a comma-delimited string that contains the following (in this order):
8
+ * 1) RTP timestamp: the RTP timestamp of the frame
9
+ * 2) Capture time: timestamp when this frame was captured
10
+ * 3) Encode start: timestamp when this frame started to be encoded
11
+ * 4) Encode finish: timestamp when this frame finished encoding
12
+ * 5) Packetization finish: timestamp when this frame was split into packets and was ready to be sent over the network
13
+ * 6) Pacer exit: timestamp when last packet of this frame was sent over the network by the sender at this timestamp
14
+ * 7) Network timestamp1: place for the SFU to mark when the frame started being forwarded. Application specific.
15
+ * 8) Network timestamp2: place for the SFU to mark when the frame finished being forwarded. Application specific.
16
+ * 9) Receive start: timestamp when the first packet of this frame was received
17
+ * 10) Receive finish: timestamp when the last packet of this frame was received
18
+ * 11) Decode start: timestamp when the frame was passed to decoder
19
+ * 12) Decode finish: timestamp when the frame was decoded
20
+ * 13) Render time: timestamp of the projected render time for this frame
21
+ * 14) "is outlier": a flag for if this frame is bigger in encoded size than the average frame by at least 5x.
22
+ * 15) "triggered by timer": a flag for if this report was triggered by the timer (The report is sent every 200ms)
23
+ */
24
+ export declare class FrameTimingInfo {
25
+ rtpTimestamp: number;
26
+ captureTimestamp: number;
27
+ encodeStartTimestamp: number;
28
+ encodeFinishTimestamp: number;
29
+ packetizerFinishTimestamp: number;
30
+ pacerExitTimestamp: number;
31
+ networkTimestamp1: number;
32
+ networkTimestamp2: number;
33
+ receiveStart: number;
34
+ receiveFinish: number;
35
+ decodeStart: number;
36
+ decodeFinish: number;
37
+ renderTime: number;
38
+ isOutlier: boolean;
39
+ isTriggeredByTimer: boolean;
40
+ encoderLatencyMs: number;
41
+ packetizeLatencyMs: number;
42
+ pacerLatencyMs: number;
43
+ captureToSendLatencyMs: number;
44
+ }
45
+ /**
46
+ * Calculates a combination of latency statistics using purely WebRTC API.
47
+ */
48
+ export declare class LatencyCalculator {
49
+ private latestSenderRecvClockOffset;
50
+ calculate(stats: AggregatedStats, receivers: RTCRtpReceiver[]): LatencyInfo;
51
+ private extractFrameTimingInfo;
52
+ private calculateSenderLatency;
53
+ /**
54
+ * Find the first valid ssrc or csrc that has capture time fields present from abs-capture-time header extension.
55
+ * @param receivers The RTP receviers this peer connection has.
56
+ * @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).
57
+ */
58
+ private getCaptureSource;
59
+ private calculateSenderReceiverClockOffset;
60
+ private getRTTMs;
61
+ }
62
+ /**
63
+ * A collection of latency information calculated using the WebRTC API.
64
+ * Most stats are calculated following the spec:
65
+ * https://w3c.github.io/webrtc-stats/#dictionary-rtcinboundrtpstreamstats-members
66
+ */
67
+ export declare class LatencyInfo {
68
+ /**
69
+ * The time taken from the moment a frame is done capturing to the moment it is sent over the network.
70
+ * Note: This can only be calculated if both offer and answer contain the
71
+ * the RTP header extension for `video-timing` (Chrome only for now)
72
+ */
73
+ senderLatencyMs: number | undefined;
74
+ /**
75
+ * The time taken from the moment a frame is done capturing to the moment it is sent over the network.
76
+ * Note: This can only be calculated if both offer and answer contain the
77
+ * the RTP header extension for `abs-capture-time` (Chrome only for now)
78
+ */
79
+ senderLatencyAbsCaptureTimeMs: number | undefined;
80
+ rttMs: number | undefined;
81
+ averageProcessingDelayMs: number | undefined;
82
+ averageJitterBufferDelayMs: number | undefined;
83
+ averageDecodeLatencyMs: number | undefined;
84
+ averageAssemblyDelayMs: number | undefined;
85
+ averageE2ELatency: number | undefined;
86
+ frameTiming: FrameTimingInfo | undefined;
87
+ }
@@ -1,23 +1,57 @@
1
1
  /**
2
- * Outbound Video Stats collected from the RTC Stats Report
2
+ * Outbound RTP stats collected from the RTC Stats Report under `outbound-rtp`.
3
+ * Wrapper around: https://developer.mozilla.org/en-US/docs/Web/API/RTCOutboundRtpStreamStats
4
+ * These are stats for video we are sending to a remote peer.
3
5
  */
4
- export declare class OutBoundVideoStats {
6
+ export declare class OutboundRTPStats {
7
+ active: boolean | undefined;
8
+ codecId: string | undefined;
5
9
  bytesSent: number;
10
+ frameHeight: number | undefined;
11
+ frameWidth: number | undefined;
12
+ framesEncoded: number | undefined;
13
+ framesPerSecond: number | undefined;
14
+ framesSent: number | undefined;
15
+ headerBytesSent: number;
6
16
  id: string;
7
- localId: string;
17
+ keyFramesEncoded: number | undefined;
18
+ kind: string;
19
+ mediaSourceId: string | undefined;
20
+ mid: string | undefined;
21
+ nackCount: number | undefined;
8
22
  packetsSent: number;
9
- remoteTimestamp: number;
23
+ qpSum: number | undefined;
24
+ qualityLimitationDurations: number | undefined;
25
+ qualityLimitationReason: string | undefined;
26
+ remoteId: string | undefined;
27
+ retransmittedBytesSent: number;
28
+ rid: string | undefined;
29
+ scalabilityMode: string | undefined;
30
+ ssrc: string;
31
+ targetBitrate: number | undefined;
10
32
  timestamp: number;
33
+ totalEncodeTime: number | undefined;
34
+ totalEncodeBytesTarget: number | undefined;
35
+ totalPacketSendDelay: number | undefined;
36
+ transportId: string | undefined;
11
37
  }
12
38
  /**
13
- * Outbound Stats collected from the RTC Stats Report
39
+ * Remote outbound stats collected from the RTC Stats Report under `remote-outbound-rtp`.
40
+ * Wrapper around: https://developer.mozilla.org/en-US/docs/Web/API/RTCRemoteOutboundRtpStreamStats
41
+ * These are stats for media we are receiving from a remote peer.
14
42
  */
15
- export declare class OutBoundRTPStats {
43
+ export declare class RemoteOutboundRTPStats {
44
+ bytesSent: number | undefined;
45
+ codecId: string;
46
+ id: string | undefined;
16
47
  kind: string;
17
- bytesSent: number;
18
- id: string;
19
- localId: string;
20
- packetsSent: number;
21
- remoteTimestamp: number;
22
- timestamp: number;
48
+ localId: string | undefined;
49
+ packetsSent: number | undefined;
50
+ remoteTimestamp: number | undefined;
51
+ reportsSent: number | undefined;
52
+ roundTripTimeMeasurements: number | undefined;
53
+ ssrc: string;
54
+ timestamp: number | undefined;
55
+ totalRoundTripTime: number | undefined;
56
+ transportId: string | undefined;
23
57
  }
@@ -1,5 +1,7 @@
1
1
  import { Config } from '../Config/Config';
2
2
  import { AggregatedStats } from './AggregatedStats';
3
+ import { LatencyCalculator, LatencyInfo } from './LatencyCalculator';
4
+ export declare const kAbsCaptureTime = "http://www.webrtc.org/experiments/rtp-hdrext/abs-capture-time";
3
5
  /**
4
6
  * Handles the Peer Connection
5
7
  */
@@ -11,6 +13,7 @@ export declare class PeerConnectionController {
11
13
  updateCodecSelection: boolean;
12
14
  videoTrack: MediaStreamTrack;
13
15
  audioTrack: MediaStreamTrack;
16
+ latencyCalculator: LatencyCalculator;
14
17
  /**
15
18
  * Create a new RTC Peer Connection client
16
19
  * @param options - Peer connection Options
@@ -24,7 +27,7 @@ export declare class PeerConnectionController {
24
27
  */
25
28
  createOffer(offerOptions: RTCOfferOptions, config: Config): Promise<void>;
26
29
  /**
27
- *
30
+ * Receive offer from UE side and process it as the remote description of this peer connection
28
31
  */
29
32
  receiveOffer(offer: RTCSessionDescriptionInit, config: Config): Promise<void>;
30
33
  /**
@@ -47,6 +50,7 @@ export declare class PeerConnectionController {
47
50
  * @returns A modified Session Descriptor
48
51
  */
49
52
  mungeSDP(sdp: string, useMic: boolean): string;
53
+ isFirefox(): boolean;
50
54
  /**
51
55
  * When a Ice Candidate is received add to the RTC Peer Connection
52
56
  * @param iceCandidate - RTC Ice Candidate from the Signaling Server
@@ -121,16 +125,26 @@ export declare class PeerConnectionController {
121
125
  * @param event - Aggregated Stats
122
126
  */
123
127
  onVideoStats(event: AggregatedStats): void;
128
+ /**
129
+ * And override event for when latency info is calculated
130
+ * @param latencyInfo - Calculated latency information.
131
+ */
132
+ onLatencyCalculated(latencyInfo: LatencyInfo): void;
124
133
  /**
125
134
  * Event to send the RTC offer to the Signaling server
126
135
  * @param offer - RTC Offer
127
136
  */
128
137
  onSendWebRTCOffer(offer: RTCSessionDescriptionInit): void;
129
138
  /**
130
- * Event to send the RTC Answer to the Signaling server
139
+ * Event fired when remote offer description is set.
140
+ * @param offer - RTC Offer
141
+ */
142
+ onSetRemoteDescription(offer: RTCSessionDescriptionInit): void;
143
+ /**
144
+ * Event fire when local description answer is set.
131
145
  * @param answer - RTC Answer
132
146
  */
133
- onSendWebRTCAnswer(answer: RTCSessionDescriptionInit): void;
147
+ onSetLocalDescription(answer: RTCSessionDescriptionInit): void;
134
148
  /**
135
149
  * An override for showing the Peer connection connecting Overlay
136
150
  */
@@ -8,6 +8,7 @@ import { WebXRController } from '../WebXR/WebXRController';
8
8
  import { MessageDirection } from '../UeInstanceMessage/StreamMessageController';
9
9
  import { DataChannelLatencyTestConfig, DataChannelLatencyTestController } from '../DataChannel/DataChannelLatencyTestController';
10
10
  import { DataChannelLatencyTestResponse } from '../DataChannel/DataChannelLatencyTestResults';
11
+ import { LatencyInfo } from '../PeerConnectionController/LatencyCalculator';
11
12
  export interface PixelStreamingOverrides {
12
13
  /** The DOM element where Pixel Streaming video and user input event handlers are attached to.
13
14
  * You can give an existing DOM element here. If not given, the library will create a new div element
@@ -109,15 +110,27 @@ export declare class PixelStreaming {
109
110
  muteCamera(): void;
110
111
  private setCameraMuted;
111
112
  /**
112
- * Emit an event on auto connecting
113
+ * Internal function to emit an event when auto connecting occurs
113
114
  */
114
115
  _onWebRtcAutoConnect(): void;
115
116
  /**
116
- * Set up functionality to happen when receiving a webRTC answer
117
+ * Internal function to emit an event for when SDP negotiation is fully finished.
117
118
  */
118
119
  _onWebRtcSdp(): void;
119
120
  /**
120
- * Emits a StreamLoading event
121
+ * Internal function to emit an SDP offer after it has been set.
122
+ */
123
+ _onWebRtcSdpOffer(offer: RTCSessionDescriptionInit): void;
124
+ /**
125
+ * Internal function to emit an SDP answer after it has been set.
126
+ */
127
+ _onWebRtcSdpAnswer(answer: RTCSessionDescriptionInit): void;
128
+ /**
129
+ * Internal function call to emit a `latencyCalculated` event.
130
+ */
131
+ _onLatencyCalculated(latencyInfo: LatencyInfo): void;
132
+ /**
133
+ * Internal function to emits a StreamLoading event
121
134
  */
122
135
  _onStreamLoading(): void;
123
136
  /**
@@ -2,6 +2,7 @@ import { FlagsIds, NumericParametersIds, OptionParametersIds, TextParametersIds
2
2
  import { LatencyTestResults } from '../DataChannel/LatencyTestResults';
3
3
  import { AggregatedStats } from '../PeerConnectionController/AggregatedStats';
4
4
  import { InitialSettings } from '../DataChannel/InitialSettings';
5
+ import { LatencyInfo } from '../PeerConnectionController/LatencyCalculator';
5
6
  import { Messages } from '@epicgames-ps/lib-pixelstreamingcommon-ue5.5';
6
7
  import { SettingFlag } from '../Config/SettingFlag';
7
8
  import { SettingNumber } from '../Config/SettingNumber';
@@ -65,6 +66,28 @@ export declare class WebRtcSdpEvent extends Event {
65
66
  readonly type: 'webRtcSdp';
66
67
  constructor();
67
68
  }
69
+ /**
70
+ * An event that is emitted after the SDP answer is set.
71
+ */
72
+ export declare class WebRtcSdpAnswerEvent extends Event {
73
+ readonly type: 'webRtcSdpAnswer';
74
+ readonly data: {
75
+ /** The sdp answer */
76
+ sdp: RTCSessionDescriptionInit;
77
+ };
78
+ constructor(data: WebRtcSdpAnswerEvent['data']);
79
+ }
80
+ /**
81
+ * An event that is emitted after the SDP offer is set.
82
+ */
83
+ export declare class WebRtcSdpOfferEvent extends Event {
84
+ readonly type: 'webRtcSdpOffer';
85
+ readonly data: {
86
+ /** The sdp offer */
87
+ sdp: RTCSessionDescriptionInit;
88
+ };
89
+ constructor(data: WebRtcSdpOfferEvent['data']);
90
+ }
68
91
  /**
69
92
  * An event that is emitted when auto connecting.
70
93
  */
@@ -280,6 +303,16 @@ export declare class LatencyTestResultEvent extends Event {
280
303
  };
281
304
  constructor(data: LatencyTestResultEvent['data']);
282
305
  }
306
+ /**
307
+ * An event that is emitted everytime latency is calculated using the WebRTC stats API.
308
+ */
309
+ export declare class LatencyCalculatedEvent extends Event {
310
+ readonly type: 'latencyCalculated';
311
+ readonly data: {
312
+ latencyInfo: LatencyInfo;
313
+ };
314
+ constructor(data: LatencyCalculatedEvent['data']);
315
+ }
283
316
  /**
284
317
  * An event that is emitted when receiving data channel latency test response from server.
285
318
  * This event is handled by DataChannelLatencyTestController
@@ -408,7 +441,7 @@ export declare class WebRtcTCPRelayDetectedEvent extends Event {
408
441
  readonly type: 'webRtcTCPRelayDetected';
409
442
  constructor();
410
443
  }
411
- export type PixelStreamingEvent = AfkWarningActivateEvent | AfkWarningUpdateEvent | AfkWarningDeactivateEvent | AfkTimedOutEvent | VideoEncoderAvgQPEvent | WebRtcSdpEvent | WebRtcAutoConnectEvent | WebRtcConnectingEvent | WebRtcConnectedEvent | WebRtcFailedEvent | WebRtcDisconnectedEvent | DataChannelOpenEvent | DataChannelCloseEvent | DataChannelErrorEvent | VideoInitializedEvent | StreamLoadingEvent | StreamPreConnectEvent | StreamReconnectEvent | StreamPreDisconnectEvent | PlayStreamErrorEvent | PlayStreamEvent | PlayStreamRejectedEvent | LoadFreezeFrameEvent | HideFreezeFrameEvent | StatsReceivedEvent | StreamerListMessageEvent | StreamerIDChangedMessageEvent | LatencyTestResultEvent | DataChannelLatencyTestResponseEvent | DataChannelLatencyTestResultEvent | SubscribeFailedEvent | InitialSettingsEvent | SettingsChangedEvent | XrSessionStartedEvent | XrSessionEndedEvent | XrFrameEvent | PlayerCountEvent | WebRtcTCPRelayDetectedEvent;
444
+ export type PixelStreamingEvent = AfkWarningActivateEvent | AfkWarningUpdateEvent | AfkWarningDeactivateEvent | AfkTimedOutEvent | VideoEncoderAvgQPEvent | WebRtcSdpEvent | WebRtcSdpOfferEvent | WebRtcSdpAnswerEvent | WebRtcAutoConnectEvent | WebRtcConnectingEvent | WebRtcConnectedEvent | WebRtcFailedEvent | WebRtcDisconnectedEvent | DataChannelOpenEvent | DataChannelCloseEvent | DataChannelErrorEvent | VideoInitializedEvent | StreamLoadingEvent | StreamPreConnectEvent | StreamReconnectEvent | StreamPreDisconnectEvent | PlayStreamErrorEvent | PlayStreamEvent | PlayStreamRejectedEvent | LoadFreezeFrameEvent | HideFreezeFrameEvent | StatsReceivedEvent | StreamerListMessageEvent | StreamerIDChangedMessageEvent | LatencyCalculatedEvent | LatencyTestResultEvent | DataChannelLatencyTestResponseEvent | DataChannelLatencyTestResultEvent | SubscribeFailedEvent | InitialSettingsEvent | SettingsChangedEvent | XrSessionStartedEvent | XrSessionEndedEvent | XrFrameEvent | PlayerCountEvent | WebRtcTCPRelayDetectedEvent;
412
445
  export declare class PixelStreamingEventEmitter extends EventTarget {
413
446
  /**
414
447
  * Dispatch a new event.
@@ -4,7 +4,7 @@ import { Config } from '../Config/Config';
4
4
  */
5
5
  declare global {
6
6
  interface HTMLElement {
7
- mozRequestPointerLock(options: PointerLockOptions): Promise<void>;
7
+ mozRequestPointerLock(): Promise<void>;
8
8
  }
9
9
  }
10
10
  /**
@@ -0,0 +1,49 @@
1
+ export declare class MockMediaStreamImpl implements MediaStream {
2
+ active: boolean;
3
+ id: string;
4
+ constructor(data?: MediaStream | MediaStreamTrack[]);
5
+ onaddtrack: ((this: MediaStream, ev: MediaStreamTrackEvent) => any) | null;
6
+ onremovetrack: ((this: MediaStream, ev: MediaStreamTrackEvent) => any) | null;
7
+ addTrack(track: MediaStreamTrack): void;
8
+ clone(): MediaStream;
9
+ getAudioTracks(): MediaStreamTrack[];
10
+ getTrackById(trackId: string): MediaStreamTrack | null;
11
+ getTracks(): MediaStreamTrack[];
12
+ getVideoTracks(): MediaStreamTrack[];
13
+ removeTrack(track: MediaStreamTrack): void;
14
+ addEventListener<K extends keyof MediaStreamEventMap>(type: K, listener: (this: MediaStream, ev: MediaStreamEventMap[K]) => any, options?: boolean | AddEventListenerOptions | undefined): void;
15
+ addEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | AddEventListenerOptions | undefined): void;
16
+ removeEventListener<K extends keyof MediaStreamEventMap>(type: K, listener: (this: MediaStream, ev: MediaStreamEventMap[K]) => any, options?: boolean | EventListenerOptions | undefined): void;
17
+ removeEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | EventListenerOptions | undefined): void;
18
+ dispatchEvent(event: Event): boolean;
19
+ }
20
+ export declare class MockMediaStreamTrackImpl implements MediaStreamTrack {
21
+ contentHint: string;
22
+ enabled: boolean;
23
+ id: string;
24
+ kind: string;
25
+ label: string;
26
+ muted: boolean;
27
+ readyState: MediaStreamTrackState;
28
+ constructor();
29
+ onended: ((this: MediaStreamTrack, ev: Event) => any) | null;
30
+ onmute: ((this: MediaStreamTrack, ev: Event) => any) | null;
31
+ onunmute: ((this: MediaStreamTrack, ev: Event) => any) | null;
32
+ applyConstraints(constraints?: MediaTrackConstraints | undefined): Promise<void>;
33
+ clone(): MediaStreamTrack;
34
+ getCapabilities(): MediaTrackCapabilities;
35
+ getConstraints(): MediaTrackConstraints;
36
+ getSettings(): MediaTrackSettings;
37
+ stop(): void;
38
+ addEventListener<K extends keyof MediaStreamTrackEventMap>(type: K, listener: (this: MediaStreamTrack, ev: MediaStreamTrackEventMap[K]) => any, options?: boolean | AddEventListenerOptions | undefined): void;
39
+ addEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | AddEventListenerOptions | undefined): void;
40
+ removeEventListener<K extends keyof MediaStreamTrackEventMap>(type: K, listener: (this: MediaStreamTrack, ev: MediaStreamTrackEventMap[K]) => any, options?: boolean | EventListenerOptions | undefined): void;
41
+ removeEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | EventListenerOptions | undefined): void;
42
+ dispatchEvent(event: Event): boolean;
43
+ }
44
+ export declare const mockMediaStream: () => void;
45
+ export declare const unmockMediaStream: () => void;
46
+ export declare const mockHTMLMediaElement: (options: {
47
+ ableToPlay: boolean;
48
+ readyState?: number;
49
+ }) => void;