@unwanted/matrix-sdk-mini 34.12.0-1 → 34.12.0-2

Sign up to get free protection for your applications and to get access to all the features.
Files changed (185) hide show
  1. package/git-revision.txt +1 -1
  2. package/lib/@types/event.d.ts +0 -19
  3. package/lib/@types/event.d.ts.map +1 -1
  4. package/lib/@types/event.js.map +1 -1
  5. package/lib/client.d.ts +2 -50
  6. package/lib/client.d.ts.map +1 -1
  7. package/lib/client.js +391 -501
  8. package/lib/client.js.map +1 -1
  9. package/lib/embedded.d.ts.map +1 -1
  10. package/lib/embedded.js +0 -1
  11. package/lib/embedded.js.map +1 -1
  12. package/lib/matrix.d.ts +0 -6
  13. package/lib/matrix.d.ts.map +1 -1
  14. package/lib/matrix.js +1 -5
  15. package/lib/matrix.js.map +1 -1
  16. package/package.json +1 -1
  17. package/src/@types/event.ts +2 -36
  18. package/src/client.ts +1 -150
  19. package/src/embedded.ts +0 -2
  20. package/src/matrix.ts +0 -13
  21. package/lib/matrixrtc/CallMembership.d.ts +0 -66
  22. package/lib/matrixrtc/CallMembership.d.ts.map +0 -1
  23. package/lib/matrixrtc/CallMembership.js +0 -197
  24. package/lib/matrixrtc/CallMembership.js.map +0 -1
  25. package/lib/matrixrtc/LivekitFocus.d.ts +0 -16
  26. package/lib/matrixrtc/LivekitFocus.d.ts.map +0 -1
  27. package/lib/matrixrtc/LivekitFocus.js +0 -20
  28. package/lib/matrixrtc/LivekitFocus.js.map +0 -1
  29. package/lib/matrixrtc/MatrixRTCSession.d.ts +0 -295
  30. package/lib/matrixrtc/MatrixRTCSession.d.ts.map +0 -1
  31. package/lib/matrixrtc/MatrixRTCSession.js +0 -1043
  32. package/lib/matrixrtc/MatrixRTCSession.js.map +0 -1
  33. package/lib/matrixrtc/MatrixRTCSessionManager.d.ts +0 -40
  34. package/lib/matrixrtc/MatrixRTCSessionManager.d.ts.map +0 -1
  35. package/lib/matrixrtc/MatrixRTCSessionManager.js +0 -146
  36. package/lib/matrixrtc/MatrixRTCSessionManager.js.map +0 -1
  37. package/lib/matrixrtc/focus.d.ts +0 -10
  38. package/lib/matrixrtc/focus.d.ts.map +0 -1
  39. package/lib/matrixrtc/focus.js +0 -1
  40. package/lib/matrixrtc/focus.js.map +0 -1
  41. package/lib/matrixrtc/index.d.ts +0 -7
  42. package/lib/matrixrtc/index.d.ts.map +0 -1
  43. package/lib/matrixrtc/index.js +0 -21
  44. package/lib/matrixrtc/index.js.map +0 -1
  45. package/lib/matrixrtc/types.d.ts +0 -19
  46. package/lib/matrixrtc/types.d.ts.map +0 -1
  47. package/lib/matrixrtc/types.js +0 -1
  48. package/lib/matrixrtc/types.js.map +0 -1
  49. package/lib/webrtc/audioContext.d.ts +0 -15
  50. package/lib/webrtc/audioContext.d.ts.map +0 -1
  51. package/lib/webrtc/audioContext.js +0 -46
  52. package/lib/webrtc/audioContext.js.map +0 -1
  53. package/lib/webrtc/call.d.ts +0 -560
  54. package/lib/webrtc/call.d.ts.map +0 -1
  55. package/lib/webrtc/call.js +0 -2541
  56. package/lib/webrtc/call.js.map +0 -1
  57. package/lib/webrtc/callEventHandler.d.ts +0 -37
  58. package/lib/webrtc/callEventHandler.d.ts.map +0 -1
  59. package/lib/webrtc/callEventHandler.js +0 -344
  60. package/lib/webrtc/callEventHandler.js.map +0 -1
  61. package/lib/webrtc/callEventTypes.d.ts +0 -73
  62. package/lib/webrtc/callEventTypes.d.ts.map +0 -1
  63. package/lib/webrtc/callEventTypes.js +0 -13
  64. package/lib/webrtc/callEventTypes.js.map +0 -1
  65. package/lib/webrtc/callFeed.d.ts +0 -128
  66. package/lib/webrtc/callFeed.d.ts.map +0 -1
  67. package/lib/webrtc/callFeed.js +0 -289
  68. package/lib/webrtc/callFeed.js.map +0 -1
  69. package/lib/webrtc/groupCall.d.ts +0 -323
  70. package/lib/webrtc/groupCall.d.ts.map +0 -1
  71. package/lib/webrtc/groupCall.js +0 -1337
  72. package/lib/webrtc/groupCall.js.map +0 -1
  73. package/lib/webrtc/groupCallEventHandler.d.ts +0 -31
  74. package/lib/webrtc/groupCallEventHandler.d.ts.map +0 -1
  75. package/lib/webrtc/groupCallEventHandler.js +0 -178
  76. package/lib/webrtc/groupCallEventHandler.js.map +0 -1
  77. package/lib/webrtc/mediaHandler.d.ts +0 -89
  78. package/lib/webrtc/mediaHandler.d.ts.map +0 -1
  79. package/lib/webrtc/mediaHandler.js +0 -437
  80. package/lib/webrtc/mediaHandler.js.map +0 -1
  81. package/lib/webrtc/stats/callFeedStatsReporter.d.ts +0 -8
  82. package/lib/webrtc/stats/callFeedStatsReporter.d.ts.map +0 -1
  83. package/lib/webrtc/stats/callFeedStatsReporter.js +0 -82
  84. package/lib/webrtc/stats/callFeedStatsReporter.js.map +0 -1
  85. package/lib/webrtc/stats/callStatsReportGatherer.d.ts +0 -25
  86. package/lib/webrtc/stats/callStatsReportGatherer.d.ts.map +0 -1
  87. package/lib/webrtc/stats/callStatsReportGatherer.js +0 -199
  88. package/lib/webrtc/stats/callStatsReportGatherer.js.map +0 -1
  89. package/lib/webrtc/stats/callStatsReportSummary.d.ts +0 -17
  90. package/lib/webrtc/stats/callStatsReportSummary.d.ts.map +0 -1
  91. package/lib/webrtc/stats/callStatsReportSummary.js +0 -1
  92. package/lib/webrtc/stats/callStatsReportSummary.js.map +0 -1
  93. package/lib/webrtc/stats/connectionStats.d.ts +0 -28
  94. package/lib/webrtc/stats/connectionStats.d.ts.map +0 -1
  95. package/lib/webrtc/stats/connectionStats.js +0 -26
  96. package/lib/webrtc/stats/connectionStats.js.map +0 -1
  97. package/lib/webrtc/stats/connectionStatsBuilder.d.ts +0 -5
  98. package/lib/webrtc/stats/connectionStatsBuilder.d.ts.map +0 -1
  99. package/lib/webrtc/stats/connectionStatsBuilder.js +0 -27
  100. package/lib/webrtc/stats/connectionStatsBuilder.js.map +0 -1
  101. package/lib/webrtc/stats/connectionStatsReportBuilder.d.ts +0 -7
  102. package/lib/webrtc/stats/connectionStatsReportBuilder.d.ts.map +0 -1
  103. package/lib/webrtc/stats/connectionStatsReportBuilder.js +0 -121
  104. package/lib/webrtc/stats/connectionStatsReportBuilder.js.map +0 -1
  105. package/lib/webrtc/stats/groupCallStats.d.ts +0 -22
  106. package/lib/webrtc/stats/groupCallStats.d.ts.map +0 -1
  107. package/lib/webrtc/stats/groupCallStats.js +0 -78
  108. package/lib/webrtc/stats/groupCallStats.js.map +0 -1
  109. package/lib/webrtc/stats/media/mediaSsrcHandler.d.ts +0 -10
  110. package/lib/webrtc/stats/media/mediaSsrcHandler.d.ts.map +0 -1
  111. package/lib/webrtc/stats/media/mediaSsrcHandler.js +0 -57
  112. package/lib/webrtc/stats/media/mediaSsrcHandler.js.map +0 -1
  113. package/lib/webrtc/stats/media/mediaTrackHandler.d.ts +0 -12
  114. package/lib/webrtc/stats/media/mediaTrackHandler.d.ts.map +0 -1
  115. package/lib/webrtc/stats/media/mediaTrackHandler.js +0 -62
  116. package/lib/webrtc/stats/media/mediaTrackHandler.js.map +0 -1
  117. package/lib/webrtc/stats/media/mediaTrackStats.d.ts +0 -86
  118. package/lib/webrtc/stats/media/mediaTrackStats.d.ts.map +0 -1
  119. package/lib/webrtc/stats/media/mediaTrackStats.js +0 -142
  120. package/lib/webrtc/stats/media/mediaTrackStats.js.map +0 -1
  121. package/lib/webrtc/stats/media/mediaTrackStatsHandler.d.ts +0 -22
  122. package/lib/webrtc/stats/media/mediaTrackStatsHandler.d.ts.map +0 -1
  123. package/lib/webrtc/stats/media/mediaTrackStatsHandler.js +0 -76
  124. package/lib/webrtc/stats/media/mediaTrackStatsHandler.js.map +0 -1
  125. package/lib/webrtc/stats/statsReport.d.ts +0 -99
  126. package/lib/webrtc/stats/statsReport.d.ts.map +0 -1
  127. package/lib/webrtc/stats/statsReport.js +0 -32
  128. package/lib/webrtc/stats/statsReport.js.map +0 -1
  129. package/lib/webrtc/stats/statsReportEmitter.d.ts +0 -15
  130. package/lib/webrtc/stats/statsReportEmitter.d.ts.map +0 -1
  131. package/lib/webrtc/stats/statsReportEmitter.js +0 -33
  132. package/lib/webrtc/stats/statsReportEmitter.js.map +0 -1
  133. package/lib/webrtc/stats/summaryStatsReportGatherer.d.ts +0 -16
  134. package/lib/webrtc/stats/summaryStatsReportGatherer.d.ts.map +0 -1
  135. package/lib/webrtc/stats/summaryStatsReportGatherer.js +0 -116
  136. package/lib/webrtc/stats/summaryStatsReportGatherer.js.map +0 -1
  137. package/lib/webrtc/stats/trackStatsBuilder.d.ts +0 -19
  138. package/lib/webrtc/stats/trackStatsBuilder.d.ts.map +0 -1
  139. package/lib/webrtc/stats/trackStatsBuilder.js +0 -168
  140. package/lib/webrtc/stats/trackStatsBuilder.js.map +0 -1
  141. package/lib/webrtc/stats/transportStats.d.ts +0 -11
  142. package/lib/webrtc/stats/transportStats.d.ts.map +0 -1
  143. package/lib/webrtc/stats/transportStats.js +0 -1
  144. package/lib/webrtc/stats/transportStats.js.map +0 -1
  145. package/lib/webrtc/stats/transportStatsBuilder.d.ts +0 -5
  146. package/lib/webrtc/stats/transportStatsBuilder.d.ts.map +0 -1
  147. package/lib/webrtc/stats/transportStatsBuilder.js +0 -34
  148. package/lib/webrtc/stats/transportStatsBuilder.js.map +0 -1
  149. package/lib/webrtc/stats/valueFormatter.d.ts +0 -4
  150. package/lib/webrtc/stats/valueFormatter.d.ts.map +0 -1
  151. package/lib/webrtc/stats/valueFormatter.js +0 -25
  152. package/lib/webrtc/stats/valueFormatter.js.map +0 -1
  153. package/src/matrixrtc/CallMembership.ts +0 -247
  154. package/src/matrixrtc/LivekitFocus.ts +0 -39
  155. package/src/matrixrtc/MatrixRTCSession.ts +0 -1319
  156. package/src/matrixrtc/MatrixRTCSessionManager.ts +0 -166
  157. package/src/matrixrtc/focus.ts +0 -25
  158. package/src/matrixrtc/index.ts +0 -22
  159. package/src/matrixrtc/types.ts +0 -36
  160. package/src/webrtc/audioContext.ts +0 -44
  161. package/src/webrtc/call.ts +0 -3074
  162. package/src/webrtc/callEventHandler.ts +0 -425
  163. package/src/webrtc/callEventTypes.ts +0 -93
  164. package/src/webrtc/callFeed.ts +0 -364
  165. package/src/webrtc/groupCall.ts +0 -1735
  166. package/src/webrtc/groupCallEventHandler.ts +0 -234
  167. package/src/webrtc/mediaHandler.ts +0 -484
  168. package/src/webrtc/stats/callFeedStatsReporter.ts +0 -94
  169. package/src/webrtc/stats/callStatsReportGatherer.ts +0 -219
  170. package/src/webrtc/stats/callStatsReportSummary.ts +0 -30
  171. package/src/webrtc/stats/connectionStats.ts +0 -47
  172. package/src/webrtc/stats/connectionStatsBuilder.ts +0 -28
  173. package/src/webrtc/stats/connectionStatsReportBuilder.ts +0 -140
  174. package/src/webrtc/stats/groupCallStats.ts +0 -93
  175. package/src/webrtc/stats/media/mediaSsrcHandler.ts +0 -57
  176. package/src/webrtc/stats/media/mediaTrackHandler.ts +0 -76
  177. package/src/webrtc/stats/media/mediaTrackStats.ts +0 -176
  178. package/src/webrtc/stats/media/mediaTrackStatsHandler.ts +0 -90
  179. package/src/webrtc/stats/statsReport.ts +0 -133
  180. package/src/webrtc/stats/statsReportEmitter.ts +0 -49
  181. package/src/webrtc/stats/summaryStatsReportGatherer.ts +0 -148
  182. package/src/webrtc/stats/trackStatsBuilder.ts +0 -207
  183. package/src/webrtc/stats/transportStats.ts +0 -26
  184. package/src/webrtc/stats/transportStatsBuilder.ts +0 -48
  185. package/src/webrtc/stats/valueFormatter.ts +0 -27
@@ -1,76 +0,0 @@
1
- /*
2
- Copyright 2023 The Matrix.org Foundation C.I.C.
3
-
4
- Licensed under the Apache License, Version 2.0 (the "License");
5
- you may not use this file except in compliance with the License.
6
- You may obtain a copy of the License at
7
-
8
- http://www.apache.org/licenses/LICENSE-2.0
9
-
10
- Unless required by applicable law or agreed to in writing, software
11
- distributed under the License is distributed on an "AS IS" BASIS,
12
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
- See the License for the specific language governing permissions and
14
- limitations under the License.
15
- */
16
-
17
- export type TrackId = string;
18
-
19
- export class MediaTrackHandler {
20
- public constructor(private readonly pc: RTCPeerConnection) {}
21
-
22
- public getLocalTracks(kind: "audio" | "video"): MediaStreamTrack[] {
23
- const isNotNullAndKind = (track: MediaStreamTrack | null): boolean => {
24
- return track !== null && track.kind === kind;
25
- };
26
- return this.pc
27
- .getTransceivers()
28
- .filter((t) => t.currentDirection === "sendonly" || t.currentDirection === "sendrecv")
29
- .filter((t) => t.sender !== null)
30
- .map((t) => t.sender)
31
- .map((s) => s.track)
32
- .filter(isNotNullAndKind) as MediaStreamTrack[];
33
- }
34
-
35
- public getTackById(trackId: string): MediaStreamTrack | undefined {
36
- return this.pc
37
- .getTransceivers()
38
- .map((t) => {
39
- if (t?.sender.track !== null && t.sender.track.id === trackId) {
40
- return t.sender.track;
41
- }
42
- if (t?.receiver.track !== null && t.receiver.track.id === trackId) {
43
- return t.receiver.track;
44
- }
45
- return undefined;
46
- })
47
- .find((t) => t !== undefined);
48
- }
49
-
50
- public getLocalTrackIdByMid(mid: string): string | undefined {
51
- const transceiver = this.pc.getTransceivers().find((t) => t.mid === mid);
52
- if (transceiver !== undefined && !!transceiver.sender && !!transceiver.sender.track) {
53
- return transceiver.sender.track.id;
54
- }
55
- return undefined;
56
- }
57
-
58
- public getRemoteTrackIdByMid(mid: string): string | undefined {
59
- const transceiver = this.pc.getTransceivers().find((t) => t.mid === mid);
60
- if (transceiver !== undefined && !!transceiver.receiver && !!transceiver.receiver.track) {
61
- return transceiver.receiver.track.id;
62
- }
63
- return undefined;
64
- }
65
-
66
- public getActiveSimulcastStreams(): number {
67
- //@TODO implement this right.. Check how many layer configured
68
- return 3;
69
- }
70
-
71
- public getTransceiverByTrackId(trackId: TrackId): RTCRtpTransceiver | undefined {
72
- return this.pc.getTransceivers().find((t) => {
73
- return t.receiver.track.id === trackId || (t.sender.track !== null && t.sender.track.id === trackId);
74
- });
75
- }
76
- }
@@ -1,176 +0,0 @@
1
- /*
2
- Copyright 2023 The Matrix.org Foundation C.I.C.
3
-
4
- Licensed under the Apache License, Version 2.0 (the "License");
5
- you may not use this file except in compliance with the License.
6
- You may obtain a copy of the License at
7
-
8
- http://www.apache.org/licenses/LICENSE-2.0
9
-
10
- Unless required by applicable law or agreed to in writing, software
11
- distributed under the License is distributed on an "AS IS" BASIS,
12
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
- See the License for the specific language governing permissions and
14
- limitations under the License.
15
- */
16
-
17
- import { AudioConcealment } from "../statsReport.ts";
18
- import { TrackId } from "./mediaTrackHandler.ts";
19
-
20
- export interface PacketLoss {
21
- packetsTotal: number;
22
- packetsLost: number;
23
- isDownloadStream: boolean;
24
- }
25
-
26
- export interface Bitrate {
27
- /**
28
- * bytes per second
29
- */
30
- download: number;
31
- /**
32
- * bytes per second
33
- */
34
- upload: number;
35
- }
36
- export interface ConcealedAudio {
37
- /**
38
- * duration in ms
39
- */
40
- duration: number;
41
-
42
- ratio: number;
43
- }
44
- export interface Resolution {
45
- width: number;
46
- height: number;
47
- }
48
-
49
- export type TrackStatsType = "local" | "remote";
50
-
51
- export class MediaTrackStats {
52
- private loss: PacketLoss = { packetsTotal: 0, packetsLost: 0, isDownloadStream: false };
53
- private bitrate: Bitrate = { download: 0, upload: 0 };
54
- private resolution: Resolution = { width: -1, height: -1 };
55
- private audioConcealment: AudioConcealment = { concealedAudio: 0, totalAudioDuration: 0 };
56
- private framerate = 0;
57
- private jitter = 0;
58
- private codec = "";
59
- private isAlive = true;
60
- private isMuted = false;
61
- private isEnabled = true;
62
-
63
- public constructor(
64
- public readonly trackId: TrackId,
65
- public readonly type: TrackStatsType,
66
- public readonly kind: "audio" | "video",
67
- ) {}
68
-
69
- public getType(): TrackStatsType {
70
- return this.type;
71
- }
72
-
73
- public setLoss(loss: PacketLoss): void {
74
- this.loss = loss;
75
- }
76
-
77
- public getLoss(): PacketLoss {
78
- return this.loss;
79
- }
80
-
81
- public setResolution(resolution: Resolution): void {
82
- this.resolution = resolution;
83
- }
84
-
85
- public getResolution(): Resolution {
86
- return this.resolution;
87
- }
88
-
89
- public setFramerate(framerate: number): void {
90
- this.framerate = framerate;
91
- }
92
-
93
- public getFramerate(): number {
94
- return this.framerate;
95
- }
96
-
97
- public setBitrate(bitrate: Bitrate): void {
98
- this.bitrate = bitrate;
99
- }
100
-
101
- public getBitrate(): Bitrate {
102
- return this.bitrate;
103
- }
104
-
105
- public setCodec(codecShortType: string): boolean {
106
- this.codec = codecShortType;
107
- return true;
108
- }
109
-
110
- public getCodec(): string {
111
- return this.codec;
112
- }
113
-
114
- public resetBitrate(): void {
115
- this.bitrate = { download: 0, upload: 0 };
116
- }
117
-
118
- public set alive(isAlive: boolean) {
119
- this.isAlive = isAlive;
120
- }
121
-
122
- /**
123
- * A MediaTrackState is alive if the corresponding MediaStreamTrack track bound to a transceiver and the
124
- * MediaStreamTrack is in state MediaStreamTrack.readyState === live
125
- */
126
- public get alive(): boolean {
127
- return this.isAlive;
128
- }
129
-
130
- public set muted(isMuted: boolean) {
131
- this.isMuted = isMuted;
132
- }
133
-
134
- /**
135
- * A MediaTrackState.isMuted corresponding to MediaStreamTrack.muted.
136
- * But these values only match if MediaTrackState.isAlive.
137
- */
138
- public get muted(): boolean {
139
- return this.isMuted;
140
- }
141
-
142
- public set enabled(isEnabled: boolean) {
143
- this.isEnabled = isEnabled;
144
- }
145
-
146
- /**
147
- * A MediaTrackState.isEnabled corresponding to MediaStreamTrack.enabled.
148
- * But these values only match if MediaTrackState.isAlive.
149
- */
150
- public get enabled(): boolean {
151
- return this.isEnabled;
152
- }
153
-
154
- public setJitter(jitter: number): void {
155
- this.jitter = jitter;
156
- }
157
-
158
- /**
159
- * Jitter in milliseconds
160
- */
161
- public getJitter(): number {
162
- return this.jitter;
163
- }
164
-
165
- /**
166
- * Audio concealment ration (conceled duration / total duration)
167
- */
168
- public setAudioConcealment(concealedAudioDuration: number, totalAudioDuration: number): void {
169
- this.audioConcealment.concealedAudio = concealedAudioDuration;
170
- this.audioConcealment.totalAudioDuration = totalAudioDuration;
171
- }
172
-
173
- public getAudioConcealment(): AudioConcealment {
174
- return this.audioConcealment;
175
- }
176
- }
@@ -1,90 +0,0 @@
1
- /*
2
- Copyright 2023 The Matrix.org Foundation C.I.C.
3
-
4
- Licensed under the Apache License, Version 2.0 (the "License");
5
- you may not use this file except in compliance with the License.
6
- You may obtain a copy of the License at
7
-
8
- http://www.apache.org/licenses/LICENSE-2.0
9
-
10
- Unless required by applicable law or agreed to in writing, software
11
- distributed under the License is distributed on an "AS IS" BASIS,
12
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
- See the License for the specific language governing permissions and
14
- limitations under the License.
15
- */
16
- import { TrackID } from "../statsReport.ts";
17
- import { MediaTrackStats } from "./mediaTrackStats.ts";
18
- import { MediaTrackHandler, TrackId } from "./mediaTrackHandler.ts";
19
- import { MediaSsrcHandler } from "./mediaSsrcHandler.ts";
20
-
21
- export class MediaTrackStatsHandler {
22
- private readonly track2stats = new Map<TrackID, MediaTrackStats>();
23
-
24
- public constructor(
25
- public readonly mediaSsrcHandler: MediaSsrcHandler,
26
- public readonly mediaTrackHandler: MediaTrackHandler,
27
- ) {}
28
-
29
- /**
30
- * Find tracks by rtc stats
31
- * Argument report is any because the stats api is not consistent:
32
- * For example `trackIdentifier`, `mid` not existing in every implementations
33
- * https://www.w3.org/TR/webrtc-stats/#dom-rtcinboundrtpstreamstats
34
- * https://developer.mozilla.org/en-US/docs/Web/API/RTCInboundRtpStreamStats
35
- */
36
- public findTrack2Stats(report: any, type: "remote" | "local"): MediaTrackStats | undefined {
37
- let trackID;
38
- if (report.trackIdentifier) {
39
- trackID = report.trackIdentifier;
40
- } else if (report.mid) {
41
- trackID =
42
- type === "remote"
43
- ? this.mediaTrackHandler.getRemoteTrackIdByMid(report.mid)
44
- : this.mediaTrackHandler.getLocalTrackIdByMid(report.mid);
45
- } else if (report.ssrc) {
46
- const mid = this.mediaSsrcHandler.findMidBySsrc(report.ssrc, type);
47
- if (!mid) {
48
- return undefined;
49
- }
50
- trackID =
51
- type === "remote"
52
- ? this.mediaTrackHandler.getRemoteTrackIdByMid(report.mid)
53
- : this.mediaTrackHandler.getLocalTrackIdByMid(report.mid);
54
- }
55
-
56
- if (!trackID) {
57
- return undefined;
58
- }
59
-
60
- let trackStats = this.track2stats.get(trackID);
61
-
62
- if (!trackStats) {
63
- const track = this.mediaTrackHandler.getTackById(trackID);
64
- if (track !== undefined) {
65
- const kind: "audio" | "video" = track.kind === "audio" ? track.kind : "video";
66
- trackStats = new MediaTrackStats(trackID, type, kind);
67
- this.track2stats.set(trackID, trackStats);
68
- } else {
69
- return undefined;
70
- }
71
- }
72
- return trackStats;
73
- }
74
-
75
- public findLocalVideoTrackStats(report: any): MediaTrackStats | undefined {
76
- const localVideoTracks = this.mediaTrackHandler.getLocalTracks("video");
77
- if (localVideoTracks.length === 0) {
78
- return undefined;
79
- }
80
- return this.findTrack2Stats(report, "local");
81
- }
82
-
83
- public getTrack2stats(): Map<TrackID, MediaTrackStats> {
84
- return this.track2stats;
85
- }
86
-
87
- public findTransceiverByTrackId(trackID: TrackId): undefined | RTCRtpTransceiver {
88
- return this.mediaTrackHandler.getTransceiverByTrackId(trackID);
89
- }
90
- }
@@ -1,133 +0,0 @@
1
- /*
2
- Copyright 2023 The Matrix.org Foundation C.I.C.
3
-
4
- Licensed under the Apache License, Version 2.0 (the "License");
5
- you may not use this file except in compliance with the License.
6
- You may obtain a copy of the License at
7
-
8
- http://www.apache.org/licenses/LICENSE-2.0
9
-
10
- Unless required by applicable law or agreed to in writing, software
11
- distributed under the License is distributed on an "AS IS" BASIS,
12
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
- See the License for the specific language governing permissions and
14
- limitations under the License.
15
- */
16
-
17
- import { ConnectionStatsBandwidth, ConnectionStatsBitrate, PacketLoss } from "./connectionStats.ts";
18
- import { TransportStats } from "./transportStats.ts";
19
- import { Resolution } from "./media/mediaTrackStats.ts";
20
-
21
- export enum StatsReport {
22
- CONNECTION_STATS = "StatsReport.connection_stats",
23
- CALL_FEED_REPORT = "StatsReport.call_feed_report",
24
- BYTE_SENT_STATS = "StatsReport.byte_sent_stats",
25
- SUMMARY_STATS = "StatsReport.summary_stats",
26
- }
27
-
28
- /// ByteSentStatsReport ################################################################################################
29
- export interface ByteSentStatsReport extends Map<TrackID, ByteSend> {
30
- callId?: string;
31
- opponentMemberId?: string;
32
- // is a map: `local trackID` => byte send
33
- }
34
-
35
- export type TrackID = string;
36
- export type ByteSend = number;
37
-
38
- /// ConnectionStatsReport ##############################################################################################
39
- export interface ConnectionStatsReport {
40
- callId?: string;
41
- opponentMemberId?: string;
42
- bandwidth: ConnectionStatsBandwidth;
43
- bitrate: ConnectionStatsBitrate;
44
- packetLoss: PacketLoss;
45
- audioConcealment: Map<TrackID, AudioConcealment>;
46
- totalAudioConcealment: AudioConcealment;
47
- resolution: ResolutionMap;
48
- framerate: FramerateMap;
49
- codec: CodecMap;
50
- jitter: Map<TrackID, number>;
51
- transport: TransportStats[];
52
- }
53
-
54
- export interface AudioConcealment {
55
- concealedAudio: number;
56
- totalAudioDuration: number;
57
- }
58
-
59
- export interface ResolutionMap {
60
- local: Map<TrackID, Resolution>;
61
- remote: Map<TrackID, Resolution>;
62
- }
63
-
64
- export interface FramerateMap {
65
- local: Map<TrackID, number>;
66
- remote: Map<TrackID, number>;
67
- }
68
-
69
- export interface CodecMap {
70
- local: Map<TrackID, string>;
71
- remote: Map<TrackID, string>;
72
- }
73
-
74
- /// SummaryStatsReport #################################################################################################
75
- export interface SummaryStatsReport {
76
- /**
77
- * Aggregated the information for percentage of received media
78
- *
79
- * This measure whether the current user receive data from a call participants.
80
- * As soon as a participant sends at least a byte media to this user, this counts as one measurement unit.
81
- * The units of measure divided by the total number of participants is a value between 0 and 1.
82
- */
83
- percentageReceivedMedia: number;
84
- percentageReceivedAudioMedia: number;
85
- percentageReceivedVideoMedia: number;
86
- maxJitter: number;
87
- maxPacketLoss: number;
88
- percentageConcealedAudio: number;
89
- peerConnections: number;
90
- opponentUsersInCall?: number;
91
- opponentDevicesInCall?: number;
92
- diffDevicesToPeerConnections?: number;
93
- ratioPeerConnectionToDevices?: number;
94
- // Todo: Decide if we want an index (or a timestamp) of this report in relation to the group call, to help differenciate when issues occur and ignore/track initial connection delays.
95
- }
96
-
97
- /// CallFeedReport #####################################################################################################
98
- export interface CallFeedReport {
99
- callId: string;
100
- opponentMemberId: string;
101
- transceiver: TransceiverStats[];
102
- callFeeds: CallFeedStats[];
103
- }
104
-
105
- export interface CallFeedStats {
106
- stream: string;
107
- type: "remote" | "local";
108
- audio: TrackStats | null;
109
- video: TrackStats | null;
110
- purpose: string;
111
- prefix: string;
112
- isVideoMuted: boolean;
113
- isAudioMuted: boolean;
114
- }
115
-
116
- export interface TransceiverStats {
117
- readonly mid: string;
118
- readonly sender: TrackStats | null;
119
- readonly receiver: TrackStats | null;
120
- readonly direction: string;
121
- readonly currentDirection: string;
122
- }
123
-
124
- export interface TrackStats {
125
- readonly id: string;
126
- readonly kind: "audio" | "video";
127
- readonly settingDeviceId: string;
128
- readonly constrainDeviceId: string;
129
- readonly muted: boolean;
130
- readonly enabled: boolean;
131
- readonly readyState: "ended" | "live";
132
- readonly label: string;
133
- }
@@ -1,49 +0,0 @@
1
- /*
2
- Copyright 2023 The Matrix.org Foundation C.I.C.
3
-
4
- Licensed under the Apache License, Version 2.0 (the "License");
5
- you may not use this file except in compliance with the License.
6
- You may obtain a copy of the License at
7
-
8
- http://www.apache.org/licenses/LICENSE-2.0
9
-
10
- Unless required by applicable law or agreed to in writing, software
11
- distributed under the License is distributed on an "AS IS" BASIS,
12
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
- See the License for the specific language governing permissions and
14
- limitations under the License.
15
- */
16
-
17
- import { TypedEventEmitter } from "../../models/typed-event-emitter.ts";
18
- import {
19
- ByteSentStatsReport,
20
- CallFeedReport,
21
- ConnectionStatsReport,
22
- StatsReport,
23
- SummaryStatsReport,
24
- } from "./statsReport.ts";
25
-
26
- export type StatsReportHandlerMap = {
27
- [StatsReport.BYTE_SENT_STATS]: (report: ByteSentStatsReport) => void;
28
- [StatsReport.CONNECTION_STATS]: (report: ConnectionStatsReport) => void;
29
- [StatsReport.CALL_FEED_REPORT]: (report: CallFeedReport) => void;
30
- [StatsReport.SUMMARY_STATS]: (report: SummaryStatsReport) => void;
31
- };
32
-
33
- export class StatsReportEmitter extends TypedEventEmitter<StatsReport, StatsReportHandlerMap> {
34
- public emitByteSendReport(byteSentStats: ByteSentStatsReport): void {
35
- this.emit(StatsReport.BYTE_SENT_STATS, byteSentStats);
36
- }
37
-
38
- public emitConnectionStatsReport(report: ConnectionStatsReport): void {
39
- this.emit(StatsReport.CONNECTION_STATS, report);
40
- }
41
-
42
- public emitCallFeedReport(report: CallFeedReport): void {
43
- this.emit(StatsReport.CALL_FEED_REPORT, report);
44
- }
45
-
46
- public emitSummaryStatsReport(report: SummaryStatsReport): void {
47
- this.emit(StatsReport.SUMMARY_STATS, report);
48
- }
49
- }
@@ -1,148 +0,0 @@
1
- /*
2
- Copyright 2023 The Matrix.org Foundation C.I.C.
3
- Licensed under the Apache License, Version 2.0 (the "License");
4
- you may not use this file except in compliance with the License.
5
- You may obtain a copy of the License at
6
- http://www.apache.org/licenses/LICENSE-2.0
7
- Unless required by applicable law or agreed to in writing, software
8
- distributed under the License is distributed on an "AS IS" BASIS,
9
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
10
- See the License for the specific language governing permissions and
11
- limitations under the License.
12
- */
13
- import { StatsReportEmitter } from "./statsReportEmitter.ts";
14
- import { CallStatsReportSummary } from "./callStatsReportSummary.ts";
15
- import { SummaryStatsReport } from "./statsReport.ts";
16
- import { ParticipantState } from "../groupCall.ts";
17
- import { RoomMember } from "../../matrix.ts";
18
-
19
- interface CallStatsReportSummaryCounter {
20
- receivedAudio: number;
21
- receivedVideo: number;
22
- receivedMedia: number;
23
- concealedAudio: number;
24
- totalAudio: number;
25
- }
26
-
27
- export class SummaryStatsReportGatherer {
28
- public constructor(private emitter: StatsReportEmitter) {}
29
-
30
- public build(allSummary: CallStatsReportSummary[]): void {
31
- // Filter all stats which collect the first time webrtc stats.
32
- // Because stats based on time interval and the first collection of a summery stats has no previous
33
- // webrtcStats as basement all the calculation are 0. We don't want track the 0 stats.
34
- const summary = allSummary.filter((s) => !s.isFirstCollection);
35
- const summaryTotalCount = summary.length;
36
- // For counting the peer connections we also want to consider the ignored summaries
37
- const peerConnectionsCount = allSummary.length;
38
- if (summaryTotalCount === 0) {
39
- return;
40
- }
41
-
42
- const summaryCounter: CallStatsReportSummaryCounter = {
43
- receivedAudio: 0,
44
- receivedVideo: 0,
45
- receivedMedia: 0,
46
- concealedAudio: 0,
47
- totalAudio: 0,
48
- };
49
- let maxJitter = 0;
50
- let maxPacketLoss = 0;
51
- summary.forEach((stats) => {
52
- this.countTrackListReceivedMedia(summaryCounter, stats);
53
- this.countConcealedAudio(summaryCounter, stats);
54
- maxJitter = this.buildMaxJitter(maxJitter, stats);
55
- maxPacketLoss = this.buildMaxPacketLoss(maxPacketLoss, stats);
56
- });
57
- const decimalPlaces = 5;
58
- const report = {
59
- percentageReceivedMedia: Number((summaryCounter.receivedMedia / summaryTotalCount).toFixed(decimalPlaces)),
60
- percentageReceivedVideoMedia: Number(
61
- (summaryCounter.receivedVideo / summaryTotalCount).toFixed(decimalPlaces),
62
- ),
63
- percentageReceivedAudioMedia: Number(
64
- (summaryCounter.receivedAudio / summaryTotalCount).toFixed(decimalPlaces),
65
- ),
66
- maxJitter,
67
- maxPacketLoss,
68
- percentageConcealedAudio: Number(
69
- summaryCounter.totalAudio > 0
70
- ? (summaryCounter.concealedAudio / summaryCounter.totalAudio).toFixed(decimalPlaces)
71
- : 0,
72
- ),
73
- peerConnections: peerConnectionsCount,
74
- } as SummaryStatsReport;
75
- this.emitter.emitSummaryStatsReport(report);
76
- }
77
-
78
- public static extendSummaryReport(
79
- report: SummaryStatsReport,
80
- callParticipants: Map<RoomMember, Map<string, ParticipantState>>,
81
- ): void {
82
- // Calculate the actual number of devices based on the participants state event
83
- // (this is used, to compare the expected participant count from the room state with the acutal peer connections)
84
- // const devices = callParticipants.()
85
- const devices: [string, ParticipantState][] = [];
86
- const users: [RoomMember, Map<string, ParticipantState>][] = [];
87
- for (const userEntry of callParticipants) {
88
- users.push(userEntry);
89
- for (const device of userEntry[1]) {
90
- devices.push(device);
91
- }
92
- }
93
- report.opponentDevicesInCall = Math.max(0, devices.length - 1);
94
- report.opponentUsersInCall = Math.max(0, users.length - 1);
95
- report.diffDevicesToPeerConnections = Math.max(0, devices.length - 1) - report.peerConnections;
96
- report.ratioPeerConnectionToDevices =
97
- Math.max(0, devices.length - 1) == 0 ? 0 : report.peerConnections / (devices.length - 1);
98
- }
99
-
100
- private countTrackListReceivedMedia(counter: CallStatsReportSummaryCounter, stats: CallStatsReportSummary): void {
101
- let hasReceivedAudio = false;
102
- let hasReceivedVideo = false;
103
- if (stats.receivedAudioMedia > 0 || stats.audioTrackSummary.count === 0) {
104
- counter.receivedAudio++;
105
- hasReceivedAudio = true;
106
- }
107
- if (stats.receivedVideoMedia > 0 || stats.videoTrackSummary.count === 0) {
108
- counter.receivedVideo++;
109
- hasReceivedVideo = true;
110
- } else {
111
- if (stats.videoTrackSummary.muted > 0 && stats.videoTrackSummary.muted === stats.videoTrackSummary.count) {
112
- counter.receivedVideo++;
113
- hasReceivedVideo = true;
114
- }
115
- }
116
-
117
- if (hasReceivedVideo && hasReceivedAudio) {
118
- counter.receivedMedia++;
119
- }
120
- }
121
-
122
- private buildMaxJitter(maxJitter: number, stats: CallStatsReportSummary): number {
123
- if (maxJitter < stats.videoTrackSummary.maxJitter) {
124
- maxJitter = stats.videoTrackSummary.maxJitter;
125
- }
126
-
127
- if (maxJitter < stats.audioTrackSummary.maxJitter) {
128
- maxJitter = stats.audioTrackSummary.maxJitter;
129
- }
130
- return maxJitter;
131
- }
132
-
133
- private buildMaxPacketLoss(maxPacketLoss: number, stats: CallStatsReportSummary): number {
134
- if (maxPacketLoss < stats.videoTrackSummary.maxPacketLoss) {
135
- maxPacketLoss = stats.videoTrackSummary.maxPacketLoss;
136
- }
137
-
138
- if (maxPacketLoss < stats.audioTrackSummary.maxPacketLoss) {
139
- maxPacketLoss = stats.audioTrackSummary.maxPacketLoss;
140
- }
141
- return maxPacketLoss;
142
- }
143
-
144
- private countConcealedAudio(summaryCounter: CallStatsReportSummaryCounter, stats: CallStatsReportSummary): void {
145
- summaryCounter.concealedAudio += stats.audioTrackSummary.concealedAudio;
146
- summaryCounter.totalAudio += stats.audioTrackSummary.totalAudio;
147
- }
148
- }