@observertc/observer-js 0.42.9 → 1.0.1-28c6425.0

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 (279) hide show
  1. package/.prettierrc +6 -6
  2. package/README.md +0 -104
  3. package/lib/ObservedCall.d.ts +66 -42
  4. package/lib/ObservedCall.d.ts.map +1 -1
  5. package/lib/ObservedCall.js +232 -108
  6. package/lib/ObservedCallSummary.d.ts +18 -0
  7. package/lib/ObservedCallSummary.d.ts.map +1 -0
  8. package/lib/ObservedCertificate.d.ts +19 -0
  9. package/lib/ObservedCertificate.d.ts.map +1 -0
  10. package/lib/ObservedCertificate.js +38 -0
  11. package/lib/ObservedClient.d.ts +71 -130
  12. package/lib/ObservedClient.d.ts.map +1 -1
  13. package/lib/ObservedClient.js +311 -750
  14. package/lib/ObservedClientSummary.d.ts +23 -0
  15. package/lib/ObservedClientSummary.d.ts.map +1 -0
  16. package/lib/ObservedClientSummary.js +2 -0
  17. package/lib/ObservedCodec.d.ts +22 -0
  18. package/lib/ObservedCodec.d.ts.map +1 -0
  19. package/lib/ObservedCodec.js +45 -0
  20. package/lib/ObservedDataChannel.d.ts +23 -69
  21. package/lib/ObservedDataChannel.d.ts.map +1 -1
  22. package/lib/ObservedDataChannel.js +67 -109
  23. package/lib/ObservedIceCandidate.d.ts +29 -0
  24. package/lib/ObservedIceCandidate.d.ts.map +1 -0
  25. package/lib/ObservedIceCandidate.js +59 -0
  26. package/lib/ObservedIceCandidatePair.d.ts +44 -0
  27. package/lib/ObservedIceCandidatePair.d.ts.map +1 -0
  28. package/lib/ObservedIceCandidatePair.js +111 -0
  29. package/lib/ObservedIceTransport.d.ts +36 -0
  30. package/lib/ObservedIceTransport.d.ts.map +1 -0
  31. package/lib/ObservedIceTransport.js +93 -0
  32. package/lib/ObservedInboundRtp.d.ts +92 -0
  33. package/lib/ObservedInboundRtp.d.ts.map +1 -0
  34. package/lib/ObservedInboundRtp.js +193 -0
  35. package/lib/ObservedInboundTrack.d.ts +29 -0
  36. package/lib/ObservedInboundTrack.d.ts.map +1 -0
  37. package/lib/ObservedInboundTrack.js +57 -0
  38. package/lib/ObservedMediaPlayout.d.ts +22 -0
  39. package/lib/ObservedMediaPlayout.d.ts.map +1 -0
  40. package/lib/ObservedMediaPlayout.js +42 -0
  41. package/lib/ObservedMediaSource.d.ts +28 -0
  42. package/lib/ObservedMediaSource.d.ts.map +1 -0
  43. package/lib/ObservedMediaSource.js +55 -0
  44. package/lib/ObservedOutboundRtp.d.ts +62 -0
  45. package/lib/ObservedOutboundRtp.d.ts.map +1 -0
  46. package/lib/ObservedOutboundRtp.js +144 -0
  47. package/lib/ObservedOutboundTrack.d.ts +29 -0
  48. package/lib/ObservedOutboundTrack.d.ts.map +1 -0
  49. package/lib/ObservedOutboundTrack.js +57 -0
  50. package/lib/ObservedPeerConnection.d.ts +132 -80
  51. package/lib/ObservedPeerConnection.d.ts.map +1 -1
  52. package/lib/ObservedPeerConnection.js +630 -357
  53. package/lib/ObservedPeerConnectionTransport.d.ts +17 -0
  54. package/lib/ObservedPeerConnectionTransport.d.ts.map +1 -0
  55. package/lib/ObservedPeerConnectionTransport.js +34 -0
  56. package/lib/ObservedRemoteInboundRtp.d.ts +30 -0
  57. package/lib/ObservedRemoteInboundRtp.d.ts.map +1 -0
  58. package/lib/ObservedRemoteInboundRtp.js +60 -0
  59. package/lib/ObservedRemoteOutboundRtp.d.ts +30 -0
  60. package/lib/ObservedRemoteOutboundRtp.d.ts.map +1 -0
  61. package/lib/ObservedRemoteOutboundRtp.js +60 -0
  62. package/lib/ObservedTURN.d.ts +31 -0
  63. package/lib/ObservedTURN.d.ts.map +1 -0
  64. package/lib/ObservedTURN.js +58 -0
  65. package/lib/ObservedTurnServer.d.ts +25 -0
  66. package/lib/ObservedTurnServer.d.ts.map +1 -0
  67. package/lib/ObservedTurnServer.js +59 -0
  68. package/lib/Observer.d.ts +45 -51
  69. package/lib/Observer.d.ts.map +1 -1
  70. package/lib/Observer.js +150 -226
  71. package/lib/ObserverSummary.d.ts +13 -0
  72. package/lib/ObserverSummary.d.ts.map +1 -0
  73. package/lib/ObserverSummary.js +2 -0
  74. package/lib/common/Middleware.d.ts +10 -1
  75. package/lib/common/Middleware.d.ts.map +1 -1
  76. package/lib/common/Middleware.js +55 -36
  77. package/lib/common/logger.d.ts +8 -4
  78. package/lib/common/logger.d.ts.map +1 -1
  79. package/lib/common/logger.js +44 -68
  80. package/lib/common/types.d.ts +0 -21
  81. package/lib/common/types.d.ts.map +1 -1
  82. package/lib/common/types.js +1 -0
  83. package/lib/common/utils.d.ts +2 -1
  84. package/lib/common/utils.d.ts.map +1 -1
  85. package/lib/common/utils.js +17 -3
  86. package/lib/detectors/Detector.d.ts +5 -0
  87. package/lib/detectors/Detector.d.ts.map +1 -0
  88. package/lib/detectors/Detector.js +3 -0
  89. package/lib/detectors/Detectors.d.ts +11 -0
  90. package/lib/detectors/Detectors.d.ts.map +1 -0
  91. package/lib/detectors/Detectors.js +34 -0
  92. package/lib/index.d.ts +24 -25
  93. package/lib/index.d.ts.map +1 -1
  94. package/lib/index.js +41 -41
  95. package/lib/monitors/TurnUsageMonitor.d.ts +0 -52
  96. package/lib/monitors/TurnUsageMonitor.d.ts.map +1 -1
  97. package/lib/monitors/TurnUsageMonitor.js +145 -120
  98. package/lib/schema/ClientEventTypes.d.ts +100 -0
  99. package/lib/schema/ClientEventTypes.d.ts.map +1 -0
  100. package/lib/schema/ClientEventTypes.js +38 -0
  101. package/lib/schema/ClientMetaTypes.d.ts +34 -0
  102. package/lib/schema/ClientMetaTypes.d.ts.map +1 -0
  103. package/lib/schema/ClientMetaTypes.js +16 -0
  104. package/lib/schema/ClientSample.d.ts +1333 -0
  105. package/lib/schema/ClientSample.d.ts.map +1 -0
  106. package/lib/schema/ClientSample.js +4 -0
  107. package/lib/scores/CalculatedScore.d.ts +6 -0
  108. package/lib/scores/CalculatedScore.d.ts.map +1 -0
  109. package/lib/scores/CalculatedScore.js +2 -0
  110. package/lib/scores/DefaultCallScoreCalculator.d.ts +7 -0
  111. package/lib/scores/DefaultCallScoreCalculator.d.ts.map +1 -0
  112. package/lib/scores/DefaultCallScoreCalculator.js +21 -0
  113. package/lib/scores/ScoreCalculator.d.ts +4 -0
  114. package/lib/scores/ScoreCalculator.d.ts.map +1 -0
  115. package/lib/scores/ScoreCalculator.js +2 -0
  116. package/lib/updaters/CallUpdater.d.ts +5 -0
  117. package/lib/updaters/CallUpdater.d.ts.map +1 -0
  118. package/lib/updaters/CallUpdater.js +2 -0
  119. package/lib/updaters/ObserverUpdater.d.ts +5 -0
  120. package/lib/updaters/ObserverUpdater.d.ts.map +1 -0
  121. package/lib/updaters/ObserverUpdater.js +2 -0
  122. package/lib/updaters/OnAllCallObserverUpdater_.d.ts +13 -0
  123. package/lib/updaters/OnAllCallObserverUpdater_.d.ts.map +1 -0
  124. package/lib/updaters/OnAllCallObserverUpdater_.js +38 -0
  125. package/lib/updaters/OnAllClientCallUpdater.d.ts +13 -0
  126. package/lib/updaters/OnAllClientCallUpdater.d.ts.map +1 -0
  127. package/lib/updaters/OnAllClientCallUpdater.js +37 -0
  128. package/lib/updaters/OnAnyCallObserverUpdater_.d.ts +11 -0
  129. package/lib/updaters/OnAnyCallObserverUpdater_.d.ts.map +1 -0
  130. package/lib/updaters/OnAnyCallObserverUpdater_.js +27 -0
  131. package/lib/updaters/OnAnyClientCallUpdater.d.ts +11 -0
  132. package/lib/updaters/OnAnyClientCallUpdater.d.ts.map +1 -0
  133. package/lib/updaters/OnAnyClientCallUpdater.js +27 -0
  134. package/lib/updaters/OnIntervalUpdater.d.ts +10 -0
  135. package/lib/updaters/OnIntervalUpdater.d.ts.map +1 -0
  136. package/lib/updaters/OnIntervalUpdater.js +17 -0
  137. package/lib/updaters/Updater.d.ts +6 -0
  138. package/lib/updaters/Updater.d.ts.map +1 -0
  139. package/lib/updaters/Updater.js +2 -0
  140. package/lib/utils/RemoteTrackResolver.d.ts +7 -0
  141. package/lib/utils/RemoteTrackResolver.d.ts.map +1 -0
  142. package/lib/utils/RemoteTrackResolver.js +2 -0
  143. package/package.json +4 -4
  144. package/src/ObservedCall.ts +291 -164
  145. package/src/ObservedCallSummary.ts +22 -0
  146. package/src/ObservedCertificate.ts +43 -0
  147. package/src/ObservedClient.ts +342 -1064
  148. package/src/ObservedClientSummary.ts +24 -0
  149. package/src/ObservedCodec.ts +49 -0
  150. package/src/ObservedDataChannel.ts +68 -181
  151. package/src/ObservedIceCandidate.ts +64 -0
  152. package/src/ObservedIceCandidatePair.ts +118 -0
  153. package/src/ObservedIceTransport.ts +99 -0
  154. package/src/ObservedInboundRtp.ts +205 -0
  155. package/src/ObservedInboundTrack.ts +70 -0
  156. package/src/ObservedMediaPlayout.ts +49 -0
  157. package/src/ObservedMediaSource.ts +60 -0
  158. package/src/ObservedOutboundRtp.ts +156 -0
  159. package/src/ObservedOutboundTrack.ts +69 -0
  160. package/src/ObservedPeerConnection.ts +839 -408
  161. package/src/ObservedPeerConnectionTransport.ts +38 -0
  162. package/src/ObservedRemoteInboundRtp.ts +64 -0
  163. package/src/ObservedRemoteOutboundRtp.ts +65 -0
  164. package/src/ObservedTURN.ts +86 -0
  165. package/src/ObservedTurnServer.ts +72 -0
  166. package/src/Observer.ts +171 -294
  167. package/src/ObserverSummary.ts +15 -0
  168. package/src/common/Middleware.ts +70 -42
  169. package/src/common/logger.ts +60 -69
  170. package/src/common/types.ts +0 -42
  171. package/src/common/utils.ts +18 -2
  172. package/src/detectors/Detector.ts +6 -0
  173. package/src/detectors/Detectors.ts +38 -0
  174. package/src/index.ts +24 -90
  175. package/src/monitors/TurnUsageMonitor.ts +164 -164
  176. package/src/schema/ClientEventTypes.ts +112 -0
  177. package/src/schema/ClientMetaTypes.ts +41 -0
  178. package/src/schema/ClientSample.ts +1682 -0
  179. package/src/scores/CalculatedScore.ts +6 -0
  180. package/src/scores/DefaultCallScoreCalculator.ts +23 -0
  181. package/src/scores/ScoreCalculator.ts +3 -0
  182. package/src/updaters/CallUpdater.ts +5 -0
  183. package/src/updaters/ObserverUpdater.ts +5 -0
  184. package/src/updaters/OnAllCallObserverUpdater_.ts +46 -0
  185. package/src/updaters/OnAllClientCallUpdater.ts +46 -0
  186. package/src/updaters/OnAnyCallObserverUpdater_.ts +32 -0
  187. package/src/updaters/OnAnyClientCallUpdater.ts +32 -0
  188. package/src/updaters/OnIntervalUpdater.ts +19 -0
  189. package/src/updaters/Updater.ts +5 -0
  190. package/src/utils/RemoteTrackResolver.ts +12 -0
  191. package/tsconfig.json +3 -3
  192. package/lib/ObservedICE.d.ts +0 -64
  193. package/lib/ObservedICE.d.ts.map +0 -1
  194. package/lib/ObservedICE.js +0 -141
  195. package/lib/ObservedInboundAudioTrack.d.ts +0 -96
  196. package/lib/ObservedInboundAudioTrack.d.ts.map +0 -1
  197. package/lib/ObservedInboundAudioTrack.js +0 -217
  198. package/lib/ObservedInboundVideoTrack.d.ts +0 -101
  199. package/lib/ObservedInboundVideoTrack.d.ts.map +0 -1
  200. package/lib/ObservedInboundVideoTrack.js +0 -232
  201. package/lib/ObservedOutboundAudioTrack.d.ts +0 -87
  202. package/lib/ObservedOutboundAudioTrack.d.ts.map +0 -1
  203. package/lib/ObservedOutboundAudioTrack.js +0 -186
  204. package/lib/ObservedOutboundVideoTrack.d.ts +0 -91
  205. package/lib/ObservedOutboundVideoTrack.d.ts.map +0 -1
  206. package/lib/ObservedOutboundVideoTrack.js +0 -193
  207. package/lib/ObservedSfu.d.ts +0 -59
  208. package/lib/ObservedSfu.d.ts.map +0 -1
  209. package/lib/ObservedSfu.js +0 -157
  210. package/lib/ObservedSfuInboundRtpPad.d.ts +0 -42
  211. package/lib/ObservedSfuInboundRtpPad.d.ts.map +0 -1
  212. package/lib/ObservedSfuInboundRtpPad.js +0 -71
  213. package/lib/ObservedSfuOutboundRtpPad.d.ts +0 -42
  214. package/lib/ObservedSfuOutboundRtpPad.d.ts.map +0 -1
  215. package/lib/ObservedSfuOutboundRtpPad.js +0 -72
  216. package/lib/ObservedSfuSctpChannel.d.ts +0 -42
  217. package/lib/ObservedSfuSctpChannel.d.ts.map +0 -1
  218. package/lib/ObservedSfuSctpChannel.js +0 -57
  219. package/lib/ObservedSfuTransport.d.ts +0 -58
  220. package/lib/ObservedSfuTransport.d.ts.map +0 -1
  221. package/lib/ObservedSfuTransport.js +0 -120
  222. package/lib/RemoteTrackAssigner.d.ts +0 -14
  223. package/lib/RemoteTrackAssigner.d.ts.map +0 -1
  224. package/lib/RemoteTrackAssigner.js +0 -52
  225. package/lib/ReportsCollector.d.ts +0 -109
  226. package/lib/ReportsCollector.d.ts.map +0 -1
  227. package/lib/ReportsCollector.js +0 -207
  228. package/lib/common/CalculatedScore.d.ts +0 -80
  229. package/lib/common/CalculatedScore.d.ts.map +0 -1
  230. package/lib/common/CalculatedScore.js +0 -162
  231. package/lib/common/CallEventType.d.ts +0 -63
  232. package/lib/common/CallEventType.d.ts.map +0 -1
  233. package/lib/common/CallEventType.js +0 -39
  234. package/lib/common/CallMetaReports.d.ts +0 -42
  235. package/lib/common/CallMetaReports.d.ts.map +0 -1
  236. package/lib/common/CallMetaReports.js +0 -36
  237. package/lib/common/QualityScoreUtils.d.ts +0 -1
  238. package/lib/common/QualityScoreUtils.d.ts.map +0 -1
  239. package/lib/common/QualityScoreUtils.js +0 -1
  240. package/lib/common/TypedEventEmitter.d.ts +0 -22
  241. package/lib/common/TypedEventEmitter.d.ts.map +0 -1
  242. package/lib/common/TypedEventEmitter.js +0 -11
  243. package/lib/common/callEventReports.d.ts +0 -10
  244. package/lib/common/callEventReports.d.ts.map +0 -1
  245. package/lib/common/callEventReports.js +0 -112
  246. package/lib/monitors/CallSummary.d.ts +0 -37
  247. package/lib/monitors/CallSummary.d.ts.map +0 -1
  248. package/lib/monitors/CallSummaryMonitor.d.ts +0 -32
  249. package/lib/monitors/CallSummaryMonitor.d.ts.map +0 -1
  250. package/lib/monitors/CallSummaryMonitor.js +0 -152
  251. package/lib/monitors/ClientIssueMonitor.d.ts +0 -32
  252. package/lib/monitors/ClientIssueMonitor.d.ts.map +0 -1
  253. package/lib/monitors/ClientIssueMonitor.js +0 -49
  254. package/lib/monitors/SfuServerMonitor.d.ts +0 -79
  255. package/lib/monitors/SfuServerMonitor.d.ts.map +0 -1
  256. package/lib/monitors/SfuServerMonitor.js +0 -198
  257. package/src/ObservedICE.ts +0 -237
  258. package/src/ObservedInboundAudioTrack.ts +0 -344
  259. package/src/ObservedInboundVideoTrack.ts +0 -361
  260. package/src/ObservedOutboundAudioTrack.ts +0 -307
  261. package/src/ObservedOutboundVideoTrack.ts +0 -319
  262. package/src/ObservedSfu.ts +0 -231
  263. package/src/ObservedSfuInboundRtpPad.ts +0 -106
  264. package/src/ObservedSfuOutboundRtpPad.ts +0 -107
  265. package/src/ObservedSfuSctpChannel.ts +0 -103
  266. package/src/ObservedSfuTransport.ts +0 -185
  267. package/src/RemoteTrackAssigner.ts +0 -68
  268. package/src/ReportsCollector.ts +0 -336
  269. package/src/common/CalculatedScore.ts +0 -188
  270. package/src/common/CallEventType.ts +0 -69
  271. package/src/common/CallMetaReports.ts +0 -82
  272. package/src/common/QualityScoreUtils.ts +0 -0
  273. package/src/common/TypedEventEmitter.ts +0 -32
  274. package/src/common/callEventReports.ts +0 -178
  275. package/src/monitors/CallSummary.ts +0 -38
  276. package/src/monitors/CallSummaryMonitor.ts +0 -192
  277. package/src/monitors/ClientIssueMonitor.ts +0 -88
  278. package/src/monitors/SfuServerMonitor.ts +0 -285
  279. /package/lib/{monitors/CallSummary.js → ObservedCallSummary.js} +0 -0
@@ -1,217 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.ObservedInboundAudioTrack = void 0;
4
- const events_1 = require("events");
5
- const CalculatedScore_1 = require("./common/CalculatedScore");
6
- class ObservedInboundAudioTrack extends events_1.EventEmitter {
7
- constructor(_model, peerConnection) {
8
- super();
9
- this._model = _model;
10
- this.peerConnection = peerConnection;
11
- this.created = Date.now();
12
- this.visited = false;
13
- this._stats = new Map();
14
- this._closed = false;
15
- this._updated = Date.now();
16
- this._lastMaxStatsTimestamp = 0;
17
- this.bitrate = 0;
18
- this.fractionLoss = 0;
19
- this.totalLostPackets = 0;
20
- this.totalReceivedPackets = 0;
21
- this.totalBytesReceived = 0;
22
- this.totalReceivedSamples = 0;
23
- this.totalSilentConcealedSamples = 0;
24
- this.deltaLostPackets = 0;
25
- this.deltaReceivedPackets = 0;
26
- this.deltaBytesReceived = 0;
27
- this.deltaReceivedSamples = 0;
28
- this.deltaSilentConcealedSamples = 0;
29
- this.ωpendingIssuesForScores = [];
30
- this.setMaxListeners(Infinity);
31
- }
32
- get serviceId() {
33
- return this.peerConnection.serviceId;
34
- }
35
- get roomId() {
36
- return this.peerConnection.roomId;
37
- }
38
- get callId() {
39
- return this.peerConnection.callId;
40
- }
41
- get clientId() {
42
- return this.peerConnection.clientId;
43
- }
44
- get mediaUnitId() {
45
- return this.peerConnection.mediaUnitId;
46
- }
47
- get peerConnectionId() {
48
- return this.peerConnection.peerConnectionId;
49
- }
50
- get trackId() {
51
- return this._model.trackId;
52
- }
53
- get sfuStreamId() {
54
- return this._model.sfuStreamId;
55
- }
56
- get sfuSinkId() {
57
- return this._model.sfuSinkId;
58
- }
59
- get updated() {
60
- return this._updated;
61
- }
62
- get statsTimestamp() {
63
- return this._lastMaxStatsTimestamp;
64
- }
65
- get stats() {
66
- return this._stats;
67
- }
68
- get reports() {
69
- return this.peerConnection.reports;
70
- }
71
- set remoteOutboundTrack(track) {
72
- if (this._closed)
73
- return;
74
- if (this._remoteOutboundTrack)
75
- return;
76
- if (!track)
77
- return;
78
- track.once('close', () => {
79
- this._remoteOutboundTrack = undefined;
80
- this.emit('remoteoutboundtrack', undefined);
81
- });
82
- this._remoteOutboundTrack = track;
83
- this.emit('remoteoutboundtrack', track);
84
- }
85
- get remoteOutboundTrack() {
86
- return this._remoteOutboundTrack;
87
- }
88
- get closed() {
89
- return this._closed;
90
- }
91
- close() {
92
- if (this._closed)
93
- return;
94
- this._closed = true;
95
- this.emit('close');
96
- }
97
- update(sample, statsTimestamp) {
98
- var _a, _b, _c, _d, _e;
99
- if (this._closed)
100
- return;
101
- const now = Date.now();
102
- const report = Object.assign(Object.assign({ serviceId: this.peerConnection.client.call.serviceId, roomId: this.peerConnection.client.call.roomId, callId: this.peerConnection.client.call.callId, clientId: this.peerConnection.client.clientId, userId: this.peerConnection.client.userId, mediaUnitId: this.peerConnection.client.mediaUnitId, peerConnectionId: this.peerConnection.peerConnectionId }, sample), { timestamp: statsTimestamp, sampleSeq: -1, remoteClientId: (_a = sample.remoteClientId) !== null && _a !== void 0 ? _a : (_b = this.remoteOutboundTrack) === null || _b === void 0 ? void 0 : _b.peerConnection.client.clientId, remoteUserId: (_c = this.remoteOutboundTrack) === null || _c === void 0 ? void 0 : _c.peerConnection.client.userId, remoteTrackId: (_d = this.remoteOutboundTrack) === null || _d === void 0 ? void 0 : _d.trackId, remotePeerConnectionId: (_e = this.remoteOutboundTrack) === null || _e === void 0 ? void 0 : _e.peerConnection.peerConnectionId, marker: this.marker });
103
- this.reports.addInboundAudioTrackReport(report);
104
- if (!this._model.sfuStreamId && sample.sfuStreamId) {
105
- this._model.sfuStreamId = sample.sfuStreamId;
106
- }
107
- if (!this._model.sfuSinkId && sample.sfuSinkId) {
108
- this._model.sfuSinkId = sample.sfuSinkId;
109
- }
110
- const elapsedTimeInMs = Math.max(1, now - this._updated);
111
- const lastStat = this._stats.get(sample.ssrc);
112
- const rttInMs = sample.roundTripTime ? sample.roundTripTime * 1000 : undefined;
113
- let bitrate = 0;
114
- let deltaReceivedBytes = 0;
115
- let fractionLost = 0;
116
- let deltaLostPackets = 0;
117
- let deltaReceivedPackets = 0;
118
- if ((lastStat === null || lastStat === void 0 ? void 0 : lastStat.bytesReceived) && sample.bytesReceived && lastStat.bytesReceived < sample.bytesReceived) {
119
- deltaReceivedBytes = sample.bytesReceived - lastStat.bytesReceived;
120
- bitrate = deltaReceivedBytes / (elapsedTimeInMs / 1000);
121
- }
122
- if ((lastStat === null || lastStat === void 0 ? void 0 : lastStat.packetsReceived) && (sample === null || sample === void 0 ? void 0 : sample.packetsReceived) && lastStat.packetsReceived < sample.packetsReceived) {
123
- deltaReceivedPackets = sample.packetsReceived - lastStat.packetsReceived;
124
- }
125
- if ((lastStat === null || lastStat === void 0 ? void 0 : lastStat.packetsLost) && sample.packetsLost && lastStat.packetsLost < sample.packetsLost) {
126
- deltaLostPackets = sample.packetsLost - lastStat.packetsLost;
127
- if (0 < deltaReceivedPackets) {
128
- fractionLost = deltaLostPackets / (deltaReceivedPackets + deltaLostPackets);
129
- }
130
- }
131
- let deltaDecodedFrames;
132
- let deltaDroppedFrames;
133
- let deltaReceivedFrames;
134
- let deltaSilentConcealedSamples;
135
- const audioSample = sample;
136
- const lastAudioStat = lastStat;
137
- if (audioSample.silentConcealedSamples && (lastAudioStat === null || lastAudioStat === void 0 ? void 0 : lastAudioStat.silentConcealedSamples) && lastAudioStat.silentConcealedSamples < audioSample.silentConcealedSamples) {
138
- deltaSilentConcealedSamples = audioSample.silentConcealedSamples - lastAudioStat.silentConcealedSamples;
139
- }
140
- const stats = Object.assign(Object.assign({}, sample), { fractionLost,
141
- rttInMs,
142
- bitrate, ssrc: sample.ssrc, deltaReceivedBytes,
143
- deltaLostPackets,
144
- deltaReceivedPackets,
145
- deltaReceivedFrames,
146
- deltaDecodedFrames,
147
- deltaDroppedFrames,
148
- deltaSilentConcealedSamples,
149
- statsTimestamp });
150
- this._stats.set(sample.ssrc, stats);
151
- this.visited = true;
152
- // a peer connection is active if it has at least one active track
153
- this.peerConnection.visited = true;
154
- this._updated = now;
155
- this.emit('update', {
156
- elapsedTimeInMs,
157
- });
158
- }
159
- updateMetrics() {
160
- var _a, _b, _c, _d, _e, _f, _g;
161
- let maxStatsTimestamp = 0;
162
- let rttInMsSum = 0;
163
- let jitterSum = 0;
164
- let size = 0;
165
- this.bitrate = 0;
166
- this.rttInMs = undefined;
167
- this.deltaBytesReceived = 0;
168
- this.deltaLostPackets = 0;
169
- this.deltaReceivedSamples = 0;
170
- this.deltaSilentConcealedSamples = 0;
171
- this.fractionLoss = 0;
172
- for (const [, stats] of this._stats) {
173
- if (stats.statsTimestamp <= this._lastMaxStatsTimestamp)
174
- continue;
175
- this.deltaBytesReceived += (_a = stats.deltaReceivedBytes) !== null && _a !== void 0 ? _a : 0;
176
- this.deltaLostPackets += (_b = stats.deltaLostPackets) !== null && _b !== void 0 ? _b : 0;
177
- this.deltaReceivedPackets += (_c = stats.deltaReceivedFrames) !== null && _c !== void 0 ? _c : 0;
178
- this.deltaReceivedSamples += (_d = stats.deltaReceivedSamples) !== null && _d !== void 0 ? _d : 0;
179
- this.deltaSilentConcealedSamples += (_e = stats.deltaSilentConcealedSamples) !== null && _e !== void 0 ? _e : 0;
180
- this.bitrate += stats.bitrate;
181
- maxStatsTimestamp = Math.max(maxStatsTimestamp, stats.statsTimestamp);
182
- rttInMsSum += (_f = stats.rttInMs) !== null && _f !== void 0 ? _f : 0;
183
- jitterSum += (_g = stats.jitter) !== null && _g !== void 0 ? _g : 0;
184
- ++size;
185
- }
186
- this.totalBytesReceived += this.deltaBytesReceived;
187
- this.totalLostPackets += this.deltaLostPackets;
188
- this.totalReceivedPackets += this.deltaReceivedPackets;
189
- this.totalReceivedSamples += this.deltaReceivedSamples;
190
- this.totalSilentConcealedSamples += this.deltaSilentConcealedSamples;
191
- this.rttInMs = rttInMsSum / Math.max(size, 1);
192
- this.jitter = jitterSum / Math.max(size, 1);
193
- this.fractionLoss = 0 < this.deltaReceivedPackets && 0 < this.deltaLostPackets ? (this.deltaLostPackets / (this.deltaReceivedPackets + this.deltaLostPackets)) : 0;
194
- this._lastMaxStatsTimestamp = maxStatsTimestamp;
195
- this._updateQualityScore(maxStatsTimestamp);
196
- }
197
- _updateQualityScore(timestamp) {
198
- const newIssues = this.ωpendingIssuesForScores;
199
- const score = (0, CalculatedScore_1.calculateBaseAudioScore)(this, newIssues);
200
- if (0 < newIssues.length) {
201
- this.ωpendingIssuesForScores = [];
202
- }
203
- if (!score)
204
- return (this.score = undefined);
205
- if (0.05 < this.fractionLoss) {
206
- score.score *= 0.5;
207
- score.remarks.push({
208
- severity: 'major',
209
- text: 'Fraction loss is too high',
210
- });
211
- }
212
- score.timestamp = timestamp;
213
- this.score = score;
214
- this.emit('score', this.score);
215
- }
216
- }
217
- exports.ObservedInboundAudioTrack = ObservedInboundAudioTrack;
@@ -1,101 +0,0 @@
1
- /// <reference types="node" />
2
- import { EventEmitter } from 'events';
3
- import { ObservedPeerConnection } from './ObservedPeerConnection';
4
- import { InboundVideoTrack } from '@observertc/sample-schemas-js';
5
- import { CalculatedScore } from './common/CalculatedScore';
6
- import { ClientIssue } from './monitors/CallSummary';
7
- import { ObservedOutboundVideoTrack } from './ObservedOutboundVideoTrack';
8
- import { SupportedVideoCodecType } from './common/types';
9
- export type ObservedInboundVideoTrackModel = {
10
- trackId: string;
11
- sfuStreamId?: string;
12
- sfuSinkId?: string;
13
- };
14
- export type ObservedInboundVideoTrackEvents = {
15
- update: [
16
- {
17
- elapsedTimeInMs: number;
18
- }
19
- ];
20
- score: [CalculatedScore];
21
- close: [];
22
- remoteoutboundtrack: [ObservedOutboundVideoTrack | undefined];
23
- };
24
- export type ObservedInboundVideoTrackStatsUpdate = InboundVideoTrack;
25
- export type ObservedInboundVideoTrackStats = InboundVideoTrack & {
26
- ssrc: number;
27
- bitrate: number;
28
- fractionLost: number;
29
- rttInMs?: number;
30
- deltaReceivedBytes?: number;
31
- deltaLostPackets?: number;
32
- deltaReceivedPackets?: number;
33
- deltaReceivedFrames?: number;
34
- deltaDecodedFrames?: number;
35
- deltaDroppedFrames?: number;
36
- fractionLoss?: number;
37
- statsTimestamp: number;
38
- };
39
- export declare interface ObservedInboundVideoTrack {
40
- on<U extends keyof ObservedInboundVideoTrackEvents>(event: U, listener: (...args: ObservedInboundVideoTrackEvents[U]) => void): this;
41
- off<U extends keyof ObservedInboundVideoTrackEvents>(event: U, listener: (...args: ObservedInboundVideoTrackEvents[U]) => void): this;
42
- once<U extends keyof ObservedInboundVideoTrackEvents>(event: U, listener: (...args: ObservedInboundVideoTrackEvents[U]) => void): this;
43
- emit<U extends keyof ObservedInboundVideoTrackEvents>(event: U, ...args: ObservedInboundVideoTrackEvents[U]): boolean;
44
- update(sample: InboundVideoTrack, timestamp: number): void;
45
- }
46
- export declare class ObservedInboundVideoTrack extends EventEmitter {
47
- private readonly _model;
48
- readonly peerConnection: ObservedPeerConnection;
49
- readonly created: number;
50
- visited: boolean;
51
- added?: number;
52
- removed?: number;
53
- contentType: 'lowmotion' | 'standard' | 'highmotion';
54
- codec?: SupportedVideoCodecType;
55
- private readonly _stats;
56
- private _closed;
57
- private _updated;
58
- private _remoteOutboundTrack?;
59
- private _lastMaxStatsTimestamp;
60
- bitrate: number;
61
- rttInMs?: number;
62
- jitter?: number;
63
- fractionLoss: number;
64
- marker?: string;
65
- totalLostPackets: number;
66
- totalReceivedPackets: number;
67
- totalBytesReceived: number;
68
- totalReceivedFrames: number;
69
- totalDecodedFrames: number;
70
- totalDroppedFrames: number;
71
- deltaLostPackets: number;
72
- deltaReceivedPackets: number;
73
- deltaBytesReceived: number;
74
- deltaReceivedFrames: number;
75
- deltaDecodedFrames: number;
76
- deltaDroppedFrames: number;
77
- highestLayer?: ObservedInboundVideoTrackStats;
78
- score?: CalculatedScore;
79
- ωpendingIssuesForScores: ClientIssue[];
80
- constructor(_model: ObservedInboundVideoTrackModel, peerConnection: ObservedPeerConnection);
81
- get serviceId(): string;
82
- get roomId(): string;
83
- get callId(): string;
84
- get clientId(): string;
85
- get mediaUnitId(): string;
86
- get peerConnectionId(): string;
87
- get trackId(): string;
88
- get sfuStreamId(): string | undefined;
89
- get sfuSinkId(): string | undefined;
90
- get updated(): number;
91
- get statsTimestamp(): number;
92
- get stats(): ReadonlyMap<number, ObservedInboundVideoTrackStats>;
93
- get reports(): import("./ReportsCollector").ReportsCollector;
94
- set remoteOutboundTrack(track: ObservedOutboundVideoTrack | undefined);
95
- get remoteOutboundTrack(): ObservedOutboundVideoTrack | undefined;
96
- get closed(): boolean;
97
- close(): void;
98
- updateMetrics(): void;
99
- private _updateQualityScore;
100
- }
101
- //# sourceMappingURL=ObservedInboundVideoTrack.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"ObservedInboundVideoTrack.d.ts","sourceRoot":"","sources":["../src/ObservedInboundVideoTrack.ts"],"names":[],"mappings":"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"}
@@ -1,232 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.ObservedInboundVideoTrack = void 0;
4
- const events_1 = require("events");
5
- const CalculatedScore_1 = require("./common/CalculatedScore");
6
- class ObservedInboundVideoTrack extends events_1.EventEmitter {
7
- constructor(_model, peerConnection) {
8
- super();
9
- this._model = _model;
10
- this.peerConnection = peerConnection;
11
- this.created = Date.now();
12
- this.visited = false;
13
- this.contentType = 'standard';
14
- this._stats = new Map();
15
- this._closed = false;
16
- this._updated = Date.now();
17
- this._lastMaxStatsTimestamp = 0;
18
- this.bitrate = 0;
19
- this.fractionLoss = 0;
20
- this.totalLostPackets = 0;
21
- this.totalReceivedPackets = 0;
22
- this.totalBytesReceived = 0;
23
- this.totalReceivedFrames = 0;
24
- this.totalDecodedFrames = 0;
25
- this.totalDroppedFrames = 0;
26
- this.deltaLostPackets = 0;
27
- this.deltaReceivedPackets = 0;
28
- this.deltaBytesReceived = 0;
29
- this.deltaReceivedFrames = 0;
30
- this.deltaDecodedFrames = 0;
31
- this.deltaDroppedFrames = 0;
32
- this.ωpendingIssuesForScores = [];
33
- this.setMaxListeners(Infinity);
34
- }
35
- get serviceId() {
36
- return this.peerConnection.serviceId;
37
- }
38
- get roomId() {
39
- return this.peerConnection.roomId;
40
- }
41
- get callId() {
42
- return this.peerConnection.callId;
43
- }
44
- get clientId() {
45
- return this.peerConnection.clientId;
46
- }
47
- get mediaUnitId() {
48
- return this.peerConnection.mediaUnitId;
49
- }
50
- get peerConnectionId() {
51
- return this.peerConnection.peerConnectionId;
52
- }
53
- get trackId() {
54
- return this._model.trackId;
55
- }
56
- get sfuStreamId() {
57
- return this._model.sfuStreamId;
58
- }
59
- get sfuSinkId() {
60
- return this._model.sfuSinkId;
61
- }
62
- get updated() {
63
- return this._updated;
64
- }
65
- get statsTimestamp() {
66
- return this._lastMaxStatsTimestamp;
67
- }
68
- get stats() {
69
- return this._stats;
70
- }
71
- get reports() {
72
- return this.peerConnection.reports;
73
- }
74
- set remoteOutboundTrack(track) {
75
- if (this._closed)
76
- return;
77
- if (this._remoteOutboundTrack)
78
- return;
79
- if (!track)
80
- return;
81
- track.once('close', () => {
82
- this._remoteOutboundTrack = undefined;
83
- this.emit('remoteoutboundtrack', undefined);
84
- });
85
- this._remoteOutboundTrack = track;
86
- this.emit('remoteoutboundtrack', track);
87
- }
88
- get remoteOutboundTrack() {
89
- return this._remoteOutboundTrack;
90
- }
91
- get closed() {
92
- return this._closed;
93
- }
94
- close() {
95
- if (this._closed)
96
- return;
97
- this._closed = true;
98
- this.emit('close');
99
- }
100
- update(sample, statsTimestamp) {
101
- var _a, _b, _c, _d, _e;
102
- if (this._closed)
103
- return;
104
- const now = Date.now();
105
- const report = Object.assign(Object.assign({ serviceId: this.peerConnection.client.call.serviceId, roomId: this.peerConnection.client.call.roomId, callId: this.peerConnection.client.call.callId, clientId: this.peerConnection.client.clientId, userId: this.peerConnection.client.userId, mediaUnitId: this.peerConnection.client.mediaUnitId, peerConnectionId: this.peerConnection.peerConnectionId }, sample), { timestamp: statsTimestamp, sampleSeq: -1, remoteClientId: (_a = sample.remoteClientId) !== null && _a !== void 0 ? _a : (_b = this.remoteOutboundTrack) === null || _b === void 0 ? void 0 : _b.peerConnection.client.clientId, remoteUserId: (_c = this.remoteOutboundTrack) === null || _c === void 0 ? void 0 : _c.peerConnection.client.userId, remoteTrackId: (_d = this.remoteOutboundTrack) === null || _d === void 0 ? void 0 : _d.trackId, remotePeerConnectionId: (_e = this.remoteOutboundTrack) === null || _e === void 0 ? void 0 : _e.peerConnection.peerConnectionId, marker: this.marker });
106
- this.reports.addInboundVideoTrackReport(report);
107
- if (!this._model.sfuStreamId && sample.sfuStreamId) {
108
- this._model.sfuStreamId = sample.sfuStreamId;
109
- }
110
- if (!this._model.sfuSinkId && sample.sfuSinkId) {
111
- this._model.sfuSinkId = sample.sfuSinkId;
112
- }
113
- const elapsedTimeInMs = Math.max(1, now - this._updated);
114
- const lastStat = this._stats.get(sample.ssrc);
115
- const rttInMs = sample.roundTripTime ? sample.roundTripTime * 1000 : undefined;
116
- let bitrate = 0;
117
- let deltaReceivedBytes = 0;
118
- let fractionLost = 0;
119
- let deltaLostPackets = 0;
120
- let deltaReceivedPackets = 0;
121
- if ((lastStat === null || lastStat === void 0 ? void 0 : lastStat.bytesReceived) && sample.bytesReceived && lastStat.bytesReceived < sample.bytesReceived) {
122
- deltaReceivedBytes = sample.bytesReceived - lastStat.bytesReceived;
123
- bitrate = deltaReceivedBytes / (elapsedTimeInMs / 1000);
124
- }
125
- if ((lastStat === null || lastStat === void 0 ? void 0 : lastStat.packetsReceived) && (sample === null || sample === void 0 ? void 0 : sample.packetsReceived) && lastStat.packetsReceived < sample.packetsReceived) {
126
- deltaReceivedPackets = sample.packetsReceived - lastStat.packetsReceived;
127
- }
128
- if ((lastStat === null || lastStat === void 0 ? void 0 : lastStat.packetsLost) && sample.packetsLost && lastStat.packetsLost < sample.packetsLost) {
129
- deltaLostPackets = sample.packetsLost - lastStat.packetsLost;
130
- if (0 < deltaReceivedPackets) {
131
- fractionLost = deltaLostPackets / (deltaReceivedPackets + deltaLostPackets);
132
- }
133
- }
134
- let deltaDecodedFrames;
135
- let deltaDroppedFrames;
136
- let deltaReceivedFrames;
137
- const videoSample = sample;
138
- const lastVideoStat = lastStat;
139
- if (videoSample.framesDecoded && (lastVideoStat === null || lastVideoStat === void 0 ? void 0 : lastVideoStat.framesDecoded) && lastVideoStat.framesDecoded < videoSample.framesDecoded) {
140
- deltaDecodedFrames = videoSample.framesDecoded - lastVideoStat.framesDecoded;
141
- }
142
- if (videoSample.framesDropped && (lastVideoStat === null || lastVideoStat === void 0 ? void 0 : lastVideoStat.framesDropped) && lastVideoStat.framesDropped < videoSample.framesDropped) {
143
- deltaDroppedFrames = videoSample.framesDropped - lastVideoStat.framesDropped;
144
- }
145
- if (videoSample.framesReceived && (lastVideoStat === null || lastVideoStat === void 0 ? void 0 : lastVideoStat.framesReceived) && lastVideoStat.framesReceived < videoSample.framesReceived) {
146
- deltaReceivedFrames = videoSample.framesReceived - lastVideoStat.framesReceived;
147
- }
148
- const stats = Object.assign(Object.assign({}, sample), { fractionLost,
149
- rttInMs,
150
- bitrate, ssrc: sample.ssrc, deltaReceivedBytes,
151
- deltaLostPackets,
152
- deltaReceivedPackets,
153
- deltaReceivedFrames,
154
- deltaDecodedFrames,
155
- deltaDroppedFrames,
156
- statsTimestamp });
157
- this._stats.set(sample.ssrc, stats);
158
- this.visited = true;
159
- // a peer connection is active if it has at least one active track
160
- this.peerConnection.visited = true;
161
- this._updated = now;
162
- this.emit('update', {
163
- elapsedTimeInMs,
164
- });
165
- }
166
- updateMetrics() {
167
- var _a, _b, _c, _d, _e, _f, _g, _h;
168
- let maxStatsTimestamp = 0;
169
- let rttInMsSum = 0;
170
- let jitterSum = 0;
171
- let size = 0;
172
- this.bitrate = 0;
173
- this.rttInMs = undefined;
174
- this.deltaBytesReceived = 0;
175
- this.deltaLostPackets = 0;
176
- this.deltaReceivedFrames = 0;
177
- this.deltaDecodedFrames = 0;
178
- this.deltaDroppedFrames = 0;
179
- this.fractionLoss = 0;
180
- const highestLayer = { ssrc: -1, bitrate: -1 };
181
- for (const [ssrc, stats] of this._stats) {
182
- if (stats.statsTimestamp <= this._lastMaxStatsTimestamp)
183
- continue;
184
- this.deltaBytesReceived += (_a = stats.deltaReceivedBytes) !== null && _a !== void 0 ? _a : 0;
185
- this.deltaLostPackets += (_b = stats.deltaLostPackets) !== null && _b !== void 0 ? _b : 0;
186
- this.deltaReceivedPackets += (_c = stats.deltaReceivedFrames) !== null && _c !== void 0 ? _c : 0;
187
- this.deltaReceivedFrames += (_d = stats.deltaReceivedFrames) !== null && _d !== void 0 ? _d : 0;
188
- this.deltaDecodedFrames += (_e = stats.deltaDecodedFrames) !== null && _e !== void 0 ? _e : 0;
189
- this.deltaDroppedFrames += (_f = stats.deltaDroppedFrames) !== null && _f !== void 0 ? _f : 0;
190
- this.bitrate += stats.bitrate;
191
- maxStatsTimestamp = Math.max(maxStatsTimestamp, stats.statsTimestamp);
192
- if (highestLayer.bitrate < stats.bitrate) {
193
- highestLayer.ssrc = ssrc;
194
- }
195
- rttInMsSum += (_g = stats.rttInMs) !== null && _g !== void 0 ? _g : 0;
196
- jitterSum += (_h = stats.jitter) !== null && _h !== void 0 ? _h : 0;
197
- ++size;
198
- }
199
- this.highestLayer = this.stats.get(highestLayer.ssrc);
200
- this.totalBytesReceived += this.deltaBytesReceived;
201
- this.totalLostPackets += this.deltaLostPackets;
202
- this.totalReceivedPackets += this.deltaReceivedPackets;
203
- this.totalReceivedFrames += this.deltaReceivedFrames;
204
- this.totalDecodedFrames += this.deltaDecodedFrames;
205
- this.totalDroppedFrames += this.deltaDroppedFrames;
206
- this.rttInMs = rttInMsSum / Math.max(size, 1);
207
- this.jitter = jitterSum / Math.max(size, 1);
208
- this.fractionLoss = 0 < this.deltaReceivedPackets && 0 < this.deltaLostPackets ? (this.deltaLostPackets / (this.deltaReceivedPackets + this.deltaLostPackets)) : 0;
209
- this._lastMaxStatsTimestamp = maxStatsTimestamp;
210
- this._updateQualityScore(maxStatsTimestamp);
211
- }
212
- _updateQualityScore(timestamp) {
213
- const newIssues = this.ωpendingIssuesForScores;
214
- const score = (0, CalculatedScore_1.calculateBaseVideoScore)(this, newIssues);
215
- if (0 < this.ωpendingIssuesForScores.length) {
216
- this.ωpendingIssuesForScores = [];
217
- }
218
- if (!score)
219
- return (this.score = undefined);
220
- if (0.05 < this.fractionLoss) {
221
- score.score *= 0.5;
222
- score.remarks.push({
223
- severity: 'major',
224
- text: 'Fraction loss is too high',
225
- });
226
- }
227
- score.timestamp = timestamp;
228
- this.score = score;
229
- this.emit('score', this.score);
230
- }
231
- }
232
- exports.ObservedInboundVideoTrack = ObservedInboundVideoTrack;
@@ -1,87 +0,0 @@
1
- /// <reference types="node" />
2
- import { EventEmitter } from 'events';
3
- import { ObservedPeerConnection } from './ObservedPeerConnection';
4
- import { OutboundAudioTrack } from '@observertc/sample-schemas-js';
5
- import { ObservedInboundAudioTrack } from './ObservedInboundAudioTrack';
6
- import { CalculatedScore } from './common/CalculatedScore';
7
- import { ClientIssue } from './monitors/CallSummary';
8
- export type ObservedOutboundAudioTrackModel = {
9
- trackId: string;
10
- sfuStreamId?: string;
11
- };
12
- export type ObservedOutboundAudioTrackEvents = {
13
- qualitylimitationchanged: [string];
14
- update: [
15
- {
16
- elapsedTimeInMs: number;
17
- }
18
- ];
19
- score: [CalculatedScore];
20
- close: [];
21
- };
22
- export type ObservedOutboundAudioTrackStats = OutboundAudioTrack & {
23
- ssrc: number;
24
- bitrate: number;
25
- rttInMs?: number;
26
- deltaLostPackets: number;
27
- deltaSentPackets: number;
28
- deltaSentBytes: number;
29
- deltaSentFrames?: number;
30
- deltaEncodedFrames?: number;
31
- statsTimestamp: number;
32
- };
33
- export declare interface ObservedOutboundAudioTrack {
34
- on<U extends keyof ObservedOutboundAudioTrackEvents>(event: U, listener: (...args: ObservedOutboundAudioTrackEvents[U]) => void): this;
35
- off<U extends keyof ObservedOutboundAudioTrackEvents>(event: U, listener: (...args: ObservedOutboundAudioTrackEvents[U]) => void): this;
36
- once<U extends keyof ObservedOutboundAudioTrackEvents>(event: U, listener: (...args: ObservedOutboundAudioTrackEvents[U]) => void): this;
37
- emit<U extends keyof ObservedOutboundAudioTrackEvents>(event: U, ...args: ObservedOutboundAudioTrackEvents[U]): boolean;
38
- update(sample: OutboundAudioTrack, timestamp: number): void;
39
- }
40
- export declare class ObservedOutboundAudioTrack extends EventEmitter {
41
- private readonly _model;
42
- readonly peerConnection: ObservedPeerConnection;
43
- readonly created: number;
44
- visited: boolean;
45
- added?: number;
46
- removed?: number;
47
- bitrate: number;
48
- rttInMs?: number;
49
- jitter?: number;
50
- marker?: string;
51
- totalLostPackets: number;
52
- totalSentPackets: number;
53
- totalSentBytes: number;
54
- totalSentFrames: number;
55
- deltaLostPackets: number;
56
- deltaSentPackets: number;
57
- deltaSentBytes: number;
58
- deltaSentFrames: number;
59
- deltaEncodedFrames: number;
60
- sendingBitrate: number;
61
- private readonly _stats;
62
- private _lastMaxStatsTimestamp;
63
- private _closed;
64
- private _updated;
65
- private _lastUpdateMetrics?;
66
- score?: CalculatedScore;
67
- ωpendingIssuesForScores: ClientIssue[];
68
- readonly remoteInboundTracks: Map<string, ObservedInboundAudioTrack>;
69
- constructor(_model: ObservedOutboundAudioTrackModel, peerConnection: ObservedPeerConnection);
70
- get serviceId(): string;
71
- get roomId(): string;
72
- get callId(): string;
73
- get clientId(): string;
74
- get mediaUnitId(): string;
75
- get peerConnectionId(): string;
76
- get trackId(): string;
77
- get sfuStreamId(): string | undefined;
78
- get reports(): import("./ReportsCollector").ReportsCollector;
79
- get statsTimestamp(): number;
80
- get updated(): number;
81
- get stats(): ReadonlyMap<number, ObservedOutboundAudioTrackStats>;
82
- get closed(): boolean;
83
- close(): void;
84
- updateMetrics(): void;
85
- private _updateQualityScore;
86
- }
87
- //# sourceMappingURL=ObservedOutboundAudioTrack.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"ObservedOutboundAudioTrack.d.ts","sourceRoot":"","sources":["../src/ObservedOutboundAudioTrack.ts"],"names":[],"mappings":"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"}