livekit-client 0.15.0 → 0.15.4

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 (136) hide show
  1. package/.gitmodules +3 -0
  2. package/README.md +21 -4
  3. package/dist/api/SignalClient.d.ts +11 -2
  4. package/dist/api/SignalClient.js +92 -25
  5. package/dist/api/SignalClient.js.map +1 -1
  6. package/dist/connect.js +3 -0
  7. package/dist/connect.js.map +1 -1
  8. package/dist/index.d.ts +5 -2
  9. package/dist/index.js +6 -3
  10. package/dist/index.js.map +1 -1
  11. package/dist/logger.js +1 -0
  12. package/dist/logger.js.map +1 -1
  13. package/dist/options.d.ts +28 -14
  14. package/dist/proto/livekit_models.d.ts +48 -0
  15. package/dist/proto/livekit_models.js +367 -5
  16. package/dist/proto/livekit_models.js.map +1 -1
  17. package/dist/proto/livekit_rtc.d.ts +100 -1
  18. package/dist/proto/livekit_rtc.js +745 -3
  19. package/dist/proto/livekit_rtc.js.map +1 -1
  20. package/dist/room/PCTransport.js +4 -0
  21. package/dist/room/PCTransport.js.map +1 -1
  22. package/dist/room/RTCEngine.d.ts +4 -0
  23. package/dist/room/RTCEngine.js +73 -34
  24. package/dist/room/RTCEngine.js.map +1 -1
  25. package/dist/room/Room.d.ts +15 -0
  26. package/dist/room/Room.js +172 -59
  27. package/dist/room/Room.js.map +1 -1
  28. package/dist/room/events.d.ts +60 -24
  29. package/dist/room/events.js +58 -22
  30. package/dist/room/events.js.map +1 -1
  31. package/dist/room/participant/LocalParticipant.d.ts +26 -2
  32. package/dist/room/participant/LocalParticipant.js +69 -21
  33. package/dist/room/participant/LocalParticipant.js.map +1 -1
  34. package/dist/room/participant/Participant.d.ts +3 -1
  35. package/dist/room/participant/Participant.js +1 -0
  36. package/dist/room/participant/Participant.js.map +1 -1
  37. package/dist/room/participant/ParticipantTrackPermission.d.ts +19 -0
  38. package/dist/room/participant/ParticipantTrackPermission.js +16 -0
  39. package/dist/room/participant/ParticipantTrackPermission.js.map +1 -0
  40. package/dist/room/participant/RemoteParticipant.d.ts +2 -2
  41. package/dist/room/participant/RemoteParticipant.js +9 -15
  42. package/dist/room/participant/RemoteParticipant.js.map +1 -1
  43. package/dist/room/participant/publishUtils.d.ts +1 -1
  44. package/dist/room/participant/publishUtils.js +4 -4
  45. package/dist/room/participant/publishUtils.js.map +1 -1
  46. package/dist/room/participant/publishUtils.test.js +10 -1
  47. package/dist/room/participant/publishUtils.test.js.map +1 -1
  48. package/dist/room/stats.d.ts +21 -6
  49. package/dist/room/stats.js +22 -1
  50. package/dist/room/stats.js.map +1 -1
  51. package/dist/room/track/LocalAudioTrack.d.ts +5 -1
  52. package/dist/room/track/LocalAudioTrack.js +45 -1
  53. package/dist/room/track/LocalAudioTrack.js.map +1 -1
  54. package/dist/room/track/LocalTrack.js +1 -1
  55. package/dist/room/track/LocalTrack.js.map +1 -1
  56. package/dist/room/track/LocalTrackPublication.d.ts +3 -1
  57. package/dist/room/track/LocalTrackPublication.js +15 -5
  58. package/dist/room/track/LocalTrackPublication.js.map +1 -1
  59. package/dist/room/track/LocalVideoTrack.d.ts +8 -1
  60. package/dist/room/track/LocalVideoTrack.js +117 -52
  61. package/dist/room/track/LocalVideoTrack.js.map +1 -1
  62. package/dist/room/track/RemoteAudioTrack.d.ts +6 -8
  63. package/dist/room/track/RemoteAudioTrack.js +55 -19
  64. package/dist/room/track/RemoteAudioTrack.js.map +1 -1
  65. package/dist/room/track/RemoteTrack.d.ts +14 -0
  66. package/dist/room/track/RemoteTrack.js +47 -0
  67. package/dist/room/track/RemoteTrack.js.map +1 -0
  68. package/dist/room/track/RemoteTrackPublication.d.ts +10 -2
  69. package/dist/room/track/RemoteTrackPublication.js +49 -16
  70. package/dist/room/track/RemoteTrackPublication.js.map +1 -1
  71. package/dist/room/track/RemoteVideoTrack.d.ts +7 -7
  72. package/dist/room/track/RemoteVideoTrack.js +66 -22
  73. package/dist/room/track/RemoteVideoTrack.js.map +1 -1
  74. package/dist/room/track/Track.d.ts +12 -0
  75. package/dist/room/track/Track.js +33 -0
  76. package/dist/room/track/Track.js.map +1 -1
  77. package/dist/room/track/TrackPublication.d.ts +14 -1
  78. package/dist/room/track/TrackPublication.js +24 -7
  79. package/dist/room/track/TrackPublication.js.map +1 -1
  80. package/dist/room/track/create.d.ts +23 -0
  81. package/dist/room/track/create.js +130 -0
  82. package/dist/room/track/create.js.map +1 -0
  83. package/dist/room/track/defaults.d.ts +4 -0
  84. package/dist/room/track/defaults.js +21 -0
  85. package/dist/room/track/defaults.js.map +1 -0
  86. package/dist/room/utils.d.ts +3 -1
  87. package/dist/room/utils.js +36 -6
  88. package/dist/room/utils.js.map +1 -1
  89. package/dist/version.d.ts +1 -1
  90. package/dist/version.js +1 -1
  91. package/package.json +5 -3
  92. package/src/api/SignalClient.ts +434 -0
  93. package/src/connect.ts +100 -0
  94. package/src/index.ts +47 -0
  95. package/src/logger.ts +22 -0
  96. package/src/options.ts +152 -0
  97. package/src/proto/livekit_models.ts +1863 -0
  98. package/src/proto/livekit_rtc.ts +3401 -0
  99. package/src/room/DeviceManager.ts +57 -0
  100. package/src/room/PCTransport.ts +86 -0
  101. package/src/room/RTCEngine.ts +484 -0
  102. package/src/room/Room.ts +785 -0
  103. package/src/room/errors.ts +65 -0
  104. package/src/room/events.ts +396 -0
  105. package/src/room/participant/LocalParticipant.ts +685 -0
  106. package/src/room/participant/Participant.ts +214 -0
  107. package/src/room/participant/ParticipantTrackPermission.ts +32 -0
  108. package/src/room/participant/RemoteParticipant.ts +238 -0
  109. package/src/room/participant/publishUtils.test.ts +105 -0
  110. package/src/room/participant/publishUtils.ts +180 -0
  111. package/src/room/stats.ts +130 -0
  112. package/src/room/track/LocalAudioTrack.ts +112 -0
  113. package/src/room/track/LocalTrack.ts +124 -0
  114. package/src/room/track/LocalTrackPublication.ts +63 -0
  115. package/src/room/track/LocalVideoTrack.test.ts +70 -0
  116. package/src/room/track/LocalVideoTrack.ts +416 -0
  117. package/src/room/track/RemoteAudioTrack.ts +58 -0
  118. package/src/room/track/RemoteTrack.ts +59 -0
  119. package/src/room/track/RemoteTrackPublication.ts +192 -0
  120. package/src/room/track/RemoteVideoTrack.ts +213 -0
  121. package/src/room/track/Track.ts +301 -0
  122. package/src/room/track/TrackPublication.ts +120 -0
  123. package/src/room/track/create.ts +120 -0
  124. package/src/room/track/defaults.ts +23 -0
  125. package/src/room/track/options.ts +229 -0
  126. package/src/room/track/types.ts +8 -0
  127. package/src/room/track/utils.test.ts +93 -0
  128. package/src/room/track/utils.ts +76 -0
  129. package/src/room/utils.ts +74 -0
  130. package/src/version.ts +2 -0
  131. package/.github/workflows/publish.yaml +0 -55
  132. package/.github/workflows/test.yaml +0 -36
  133. package/example/index.html +0 -237
  134. package/example/sample.ts +0 -575
  135. package/example/styles.css +0 -144
  136. package/example/webpack.config.js +0 -33
@@ -3,10 +3,11 @@ import LocalAudioTrack from './LocalAudioTrack';
3
3
  import LocalTrack from './LocalTrack';
4
4
  import LocalVideoTrack from './LocalVideoTrack';
5
5
  import { Track } from './Track';
6
- import TrackPublication from './TrackPublication';
6
+ import { TrackPublication } from './TrackPublication';
7
7
  export default class LocalTrackPublication extends TrackPublication {
8
8
  track?: LocalTrack;
9
9
  constructor(kind: Track.Kind, ti: TrackInfo, track?: LocalTrack);
10
+ setTrack(track?: Track): void;
10
11
  get isMuted(): boolean;
11
12
  get audioTrack(): LocalAudioTrack | undefined;
12
13
  get videoTrack(): LocalVideoTrack | undefined;
@@ -18,4 +19,5 @@ export default class LocalTrackPublication extends TrackPublication {
18
19
  * Unmute track associated with this publication
19
20
  */
20
21
  unmute(): Promise<LocalTrack | undefined>;
22
+ handleTrackEnded: (track: LocalTrack) => void;
21
23
  }
@@ -8,17 +8,27 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
8
8
  step((generator = generator.apply(thisArg, _arguments || [])).next());
9
9
  });
10
10
  };
11
- var __importDefault = (this && this.__importDefault) || function (mod) {
12
- return (mod && mod.__esModule) ? mod : { "default": mod };
13
- };
14
11
  Object.defineProperty(exports, "__esModule", { value: true });
15
- const TrackPublication_1 = __importDefault(require("./TrackPublication"));
16
- class LocalTrackPublication extends TrackPublication_1.default {
12
+ const events_1 = require("../events");
13
+ const TrackPublication_1 = require("./TrackPublication");
14
+ class LocalTrackPublication extends TrackPublication_1.TrackPublication {
17
15
  constructor(kind, ti, track) {
18
16
  super(kind, ti.sid, ti.name);
17
+ this.handleTrackEnded = (track) => {
18
+ this.emit(events_1.TrackEvent.Ended, track);
19
+ };
19
20
  this.updateInfo(ti);
20
21
  this.setTrack(track);
21
22
  }
23
+ setTrack(track) {
24
+ if (this.track) {
25
+ this.track.off(events_1.TrackEvent.Ended, this.handleTrackEnded);
26
+ }
27
+ super.setTrack(track);
28
+ if (track) {
29
+ track.on(events_1.TrackEvent.Ended, this.handleTrackEnded);
30
+ }
31
+ }
22
32
  get isMuted() {
23
33
  if (this.track) {
24
34
  return this.track.isMuted;
@@ -1 +1 @@
1
- {"version":3,"file":"LocalTrackPublication.js","sourceRoot":"","sources":["../../../src/room/track/LocalTrackPublication.ts"],"names":[],"mappings":";;;;;;;;;;;;;;AAKA,0EAAkD;AAElD,MAAqB,qBAAsB,SAAQ,0BAAgB;IAGjE,YAAY,IAAgB,EAAE,EAAa,EAAE,KAAkB;QAC7D,KAAK,CAAC,IAAI,EAAE,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,IAAI,CAAC,CAAC;QAE7B,IAAI,CAAC,UAAU,CAAC,EAAE,CAAC,CAAC;QACpB,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;IACvB,CAAC;IAED,IAAI,OAAO;QACT,IAAI,IAAI,CAAC,KAAK,EAAE;YACd,OAAO,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC;SAC3B;QACD,OAAO,KAAK,CAAC,OAAO,CAAC;IACvB,CAAC;IAED,IAAI,UAAU;QACZ,OAAO,KAAK,CAAC,UAAyC,CAAC;IACzD,CAAC;IAED,IAAI,UAAU;QACZ,OAAO,KAAK,CAAC,UAAyC,CAAC;IACzD,CAAC;IAED;;OAEG;IACG,IAAI;;;YACR,OAAO,MAAA,IAAI,CAAC,KAAK,0CAAE,IAAI,EAAE,CAAC;;KAC3B;IAED;;OAEG;IACG,MAAM;;;YACV,OAAO,MAAA,IAAI,CAAC,KAAK,0CAAE,MAAM,EAAE,CAAC;;KAC7B;CACF;AAtCD,wCAsCC"}
1
+ {"version":3,"file":"LocalTrackPublication.js","sourceRoot":"","sources":["../../../src/room/track/LocalTrackPublication.ts"],"names":[],"mappings":";;;;;;;;;;;AACA,sCAAuC;AAKvC,yDAAsD;AAEtD,MAAqB,qBAAsB,SAAQ,mCAAgB;IAGjE,YAAY,IAAgB,EAAE,EAAa,EAAE,KAAkB;QAC7D,KAAK,CAAC,IAAI,EAAE,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,IAAI,CAAC,CAAC;QA+C/B,qBAAgB,GAAG,CAAC,KAAiB,EAAE,EAAE;YACvC,IAAI,CAAC,IAAI,CAAC,mBAAU,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;QACrC,CAAC,CAAC;QA/CA,IAAI,CAAC,UAAU,CAAC,EAAE,CAAC,CAAC;QACpB,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;IACvB,CAAC;IAED,QAAQ,CAAC,KAAa;QACpB,IAAI,IAAI,CAAC,KAAK,EAAE;YACd,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,mBAAU,CAAC,KAAK,EAAE,IAAI,CAAC,gBAAgB,CAAC,CAAC;SACzD;QAED,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;QAEtB,IAAI,KAAK,EAAE;YACT,KAAK,CAAC,EAAE,CAAC,mBAAU,CAAC,KAAK,EAAE,IAAI,CAAC,gBAAgB,CAAC,CAAC;SACnD;IACH,CAAC;IAED,IAAI,OAAO;QACT,IAAI,IAAI,CAAC,KAAK,EAAE;YACd,OAAO,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC;SAC3B;QACD,OAAO,KAAK,CAAC,OAAO,CAAC;IACvB,CAAC;IAED,IAAI,UAAU;QACZ,OAAO,KAAK,CAAC,UAAyC,CAAC;IACzD,CAAC;IAED,IAAI,UAAU;QACZ,OAAO,KAAK,CAAC,UAAyC,CAAC;IACzD,CAAC;IAED;;OAEG;IACG,IAAI;;;YACR,OAAO,MAAA,IAAI,CAAC,KAAK,0CAAE,IAAI,EAAE,CAAC;;KAC3B;IAED;;OAEG;IACG,MAAM;;;YACV,OAAO,MAAA,IAAI,CAAC,KAAK,0CAAE,MAAM,EAAE,CAAC;;KAC7B;CAKF;AAtDD,wCAsDC"}
@@ -1,5 +1,6 @@
1
1
  import { SignalClient } from '../../api/SignalClient';
2
2
  import { VideoLayer, VideoQuality } from '../../proto/livekit_models';
3
+ import { SubscribedQuality } from '../../proto/livekit_rtc';
3
4
  import { VideoSenderStats } from '../stats';
4
5
  import LocalTrack from './LocalTrack';
5
6
  import { VideoCaptureOptions } from './options';
@@ -9,9 +10,10 @@ export default class LocalVideoTrack extends LocalTrack {
9
10
  private lastQualityChange?;
10
11
  private lastExplicitQualityChange?;
11
12
  private encodings?;
13
+ private activeQualities?;
12
14
  constructor(mediaTrack: MediaStreamTrack, constraints?: MediaTrackConstraints);
13
15
  get isSimulcast(): boolean;
14
- startMonitor(signalClient: SignalClient): void;
16
+ startMonitor(signalClient: SignalClient, disableLayerPause: boolean): void;
15
17
  stop(): void;
16
18
  mute(): Promise<LocalVideoTrack>;
17
19
  unmute(): Promise<LocalVideoTrack>;
@@ -19,6 +21,11 @@ export default class LocalVideoTrack extends LocalTrack {
19
21
  setPublishingQuality(maxQuality: VideoQuality): void;
20
22
  setDeviceId(deviceId: string): Promise<void>;
21
23
  restartTrack(options?: VideoCaptureOptions): Promise<void>;
24
+ /**
25
+ * @internal
26
+ * Sets layers that should be publishing
27
+ */
28
+ setPublishingLayers(qualities: SubscribedQuality[]): Promise<void>;
22
29
  private monitorSender;
23
30
  private checkAndUpdateSimulcast;
24
31
  }
@@ -16,9 +16,10 @@ exports.videoLayersFromEncodings = exports.videoQualityForRid = void 0;
16
16
  const logger_1 = __importDefault(require("../../logger"));
17
17
  const livekit_models_1 = require("../../proto/livekit_models");
18
18
  const stats_1 = require("../stats");
19
+ const utils_1 = require("../utils");
19
20
  const LocalTrack_1 = __importDefault(require("./LocalTrack"));
20
21
  const Track_1 = require("./Track");
21
- const utils_1 = require("./utils");
22
+ const utils_2 = require("./utils");
22
23
  // delay before attempting to upgrade
23
24
  const QUALITY_UPGRADE_DELAY = 60 * 1000;
24
25
  // avoid downgrading too quickly
@@ -27,18 +28,28 @@ const ridOrder = ['q', 'h', 'f'];
27
28
  class LocalVideoTrack extends LocalTrack_1.default {
28
29
  constructor(mediaTrack, constraints) {
29
30
  super(mediaTrack, Track_1.Track.Kind.Video, constraints);
30
- this.monitorSender = () => __awaiter(this, void 0, void 0, function* () {
31
+ this.monitorSender = (disableLayerPause) => __awaiter(this, void 0, void 0, function* () {
31
32
  if (!this.sender) {
33
+ this._currentBitrate = 0;
32
34
  return;
33
35
  }
34
36
  const stats = yield this.getSenderStats();
35
37
  const statsMap = new Map(stats.map((s) => [s.rid, s]));
36
- if (this.prevStats && this.isSimulcast) {
38
+ if (!disableLayerPause && this.prevStats && this.isSimulcast) {
37
39
  this.checkAndUpdateSimulcast(statsMap);
38
40
  }
41
+ if (this.prevStats) {
42
+ let totalBitrate = 0;
43
+ statsMap.forEach((s, key) => {
44
+ var _a;
45
+ const prev = (_a = this.prevStats) === null || _a === void 0 ? void 0 : _a.get(key);
46
+ totalBitrate += stats_1.computeBitrate(s, prev);
47
+ });
48
+ this._currentBitrate = totalBitrate;
49
+ }
39
50
  this.prevStats = statsMap;
40
51
  setTimeout(() => {
41
- this.monitorSender();
52
+ this.monitorSender(disableLayerPause);
42
53
  }, stats_1.monitorFrequency);
43
54
  });
44
55
  }
@@ -49,14 +60,16 @@ class LocalVideoTrack extends LocalTrack_1.default {
49
60
  return false;
50
61
  }
51
62
  /* @internal */
52
- startMonitor(signalClient) {
53
- // only monitor simulcast streams
54
- if (!this.isSimulcast) {
55
- return;
56
- }
63
+ startMonitor(signalClient, disableLayerPause) {
64
+ var _a;
57
65
  this.signalClient = signalClient;
66
+ // save original encodings
67
+ const params = (_a = this.sender) === null || _a === void 0 ? void 0 : _a.getParameters();
68
+ if (params) {
69
+ this.encodings = params.encodings;
70
+ }
58
71
  setTimeout(() => {
59
- this.monitorSender();
72
+ this.monitorSender(disableLayerPause);
60
73
  }, stats_1.monitorFrequency);
61
74
  }
62
75
  stop() {
@@ -98,19 +111,9 @@ class LocalVideoTrack extends LocalTrack_1.default {
98
111
  }
99
112
  const items = [];
100
113
  const stats = yield this.sender.getStats();
101
- let sender;
102
114
  stats.forEach((v) => {
103
- if (v.type === 'track'
104
- && v.trackIdentifier === this.mediaStreamTrack.id) {
105
- sender = v;
106
- }
107
- });
108
- if (!sender) {
109
- return items;
110
- }
111
- // match the outbound-rtp items
112
- stats.forEach((v) => {
113
- if (v.type === 'outbound-rtp' && v.trackId === sender.id) {
115
+ var _a;
116
+ if (v.type === 'outbound-rtp') {
114
117
  const vs = {
115
118
  type: 'video',
116
119
  streamId: v.id,
@@ -120,9 +123,10 @@ class LocalVideoTrack extends LocalTrack_1.default {
120
123
  pliCount: v.pliCount,
121
124
  nackCount: v.nackCount,
122
125
  packetsSent: v.packetsSent,
126
+ bytesSent: v.bytesSent,
123
127
  framesSent: v.framesSent,
124
128
  timestamp: v.timestamp,
125
- rid: v.rid,
129
+ rid: (_a = v.rid) !== null && _a !== void 0 ? _a : '',
126
130
  retransmittedPacketsSent: v.retransmittedPacketsSent,
127
131
  qualityLimitationReason: v.qualityLimitationReason,
128
132
  qualityLimitationResolutionChanges: v.qualityLimitationResolutionChanges,
@@ -141,32 +145,15 @@ class LocalVideoTrack extends LocalTrack_1.default {
141
145
  });
142
146
  }
143
147
  setPublishingQuality(maxQuality) {
144
- if (!this.isSimulcast || !this.encodings) {
145
- return;
146
- }
147
- let hasChanged = false;
148
- const layers = [];
149
- this.encodings.forEach((encoding) => {
150
- var _a;
151
- const quality = videoQualityForRid((_a = encoding.rid) !== null && _a !== void 0 ? _a : '');
152
- const active = quality <= maxQuality;
153
- if (active !== encoding.active) {
154
- hasChanged = true;
155
- encoding.active = active;
156
- }
157
- if (active) {
158
- layers.push(quality);
159
- }
160
- });
161
- if (!hasChanged || !this.sender || !this.sid) {
162
- return;
148
+ const qualities = [];
149
+ for (let q = livekit_models_1.VideoQuality.LOW; q <= livekit_models_1.VideoQuality.HIGH; q += 1) {
150
+ qualities.push({
151
+ quality: q,
152
+ enabled: q <= maxQuality,
153
+ });
163
154
  }
164
- this.lastQualityChange = new Date().getTime();
165
- this.lastExplicitQualityChange = new Date().getTime();
166
- const params = this.sender.getParameters();
167
- params.encodings = this.encodings;
168
155
  logger_1.default.debug('setting publishing quality. max quality', maxQuality);
169
- this.sender.setParameters(params);
156
+ this.setPublishingLayers(qualities);
170
157
  }
171
158
  setDeviceId(deviceId) {
172
159
  return __awaiter(this, void 0, void 0, function* () {
@@ -185,7 +172,7 @@ class LocalVideoTrack extends LocalTrack_1.default {
185
172
  return __awaiter(this, void 0, void 0, function* () {
186
173
  let constraints;
187
174
  if (options) {
188
- const streamConstraints = utils_1.constraintsForOptions({ video: options });
175
+ const streamConstraints = utils_2.constraintsForOptions({ video: options });
189
176
  if (typeof streamConstraints.video !== 'boolean') {
190
177
  constraints = streamConstraints.video;
191
178
  }
@@ -193,15 +180,74 @@ class LocalVideoTrack extends LocalTrack_1.default {
193
180
  yield this.restart(constraints);
194
181
  });
195
182
  }
183
+ /**
184
+ * @internal
185
+ * Sets layers that should be publishing
186
+ */
187
+ setPublishingLayers(qualities) {
188
+ return __awaiter(this, void 0, void 0, function* () {
189
+ logger_1.default.debug('setting publishing layers', qualities);
190
+ if (!this.sender || !this.encodings) {
191
+ return;
192
+ }
193
+ const params = this.sender.getParameters();
194
+ const { encodings } = params;
195
+ if (!encodings) {
196
+ return;
197
+ }
198
+ if (encodings.length !== this.encodings.length) {
199
+ logger_1.default.warn('cannot set publishing layers, encodings mismatch');
200
+ return;
201
+ }
202
+ this.activeQualities = qualities;
203
+ let hasChanged = false;
204
+ encodings.forEach((encoding, idx) => {
205
+ var _a;
206
+ let rid = (_a = encoding.rid) !== null && _a !== void 0 ? _a : '';
207
+ if (rid === '') {
208
+ rid = 'q';
209
+ }
210
+ const quality = videoQualityForRid(rid);
211
+ const subscribedQuality = qualities.find((q) => q.quality === quality);
212
+ if (!subscribedQuality) {
213
+ return;
214
+ }
215
+ if (encoding.active !== subscribedQuality.enabled) {
216
+ hasChanged = true;
217
+ encoding.active = subscribedQuality.enabled;
218
+ logger_1.default.debug(`setting layer ${subscribedQuality.quality} to ${encoding.active ? 'enabled' : 'disabled'}`);
219
+ // FireFox does not support setting encoding.active to false, so we
220
+ // have a workaround of lowering its bitrate and resolution to the min.
221
+ if (utils_1.isFireFox()) {
222
+ if (subscribedQuality.enabled) {
223
+ encoding.scaleResolutionDownBy = this.encodings[idx].scaleResolutionDownBy;
224
+ encoding.maxBitrate = this.encodings[idx].maxBitrate;
225
+ /* @ts-ignore */
226
+ encoding.maxFrameRate = this.encodings[idx].maxFrameRate;
227
+ }
228
+ else {
229
+ encoding.scaleResolutionDownBy = 4;
230
+ encoding.maxBitrate = 10;
231
+ /* @ts-ignore */
232
+ encoding.maxFrameRate = 2;
233
+ }
234
+ }
235
+ }
236
+ });
237
+ if (hasChanged) {
238
+ params.encodings = encodings;
239
+ yield this.sender.setParameters(params);
240
+ }
241
+ });
242
+ }
196
243
  checkAndUpdateSimulcast(statsMap) {
197
244
  var _a, _b;
198
- if (!this.sender || this.isMuted) {
245
+ if (!this.sender || this.isMuted || !this.encodings) {
199
246
  return;
200
247
  }
201
- const params = this.sender.getParameters();
202
- this.encodings = params.encodings;
203
248
  let bestEncoding;
204
- this.encodings.forEach((encoding) => {
249
+ const { encodings } = this.sender.getParameters();
250
+ encodings.forEach((encoding) => {
205
251
  // skip inactive encodings
206
252
  if (!encoding.active)
207
253
  return;
@@ -254,6 +300,23 @@ class LocalVideoTrack extends LocalTrack_1.default {
254
300
  if ((new Date()).getTime() - this.lastQualityChange < QUALITY_UPGRADE_DELAY) {
255
301
  return;
256
302
  }
303
+ if (this.activeQualities
304
+ && this.activeQualities.some((q) => q.quality === nextQuality && !q.enabled)) {
305
+ // quality has been disabled by the server, so we should skip
306
+ return;
307
+ }
308
+ // we are already at the highest layer
309
+ let bestQuality = livekit_models_1.VideoQuality.LOW;
310
+ encodings.forEach((encoding) => {
311
+ var _a;
312
+ const quality = videoQualityForRid((_a = encoding.rid) !== null && _a !== void 0 ? _a : '');
313
+ if (quality > bestQuality) {
314
+ bestQuality = quality;
315
+ }
316
+ });
317
+ if (nextQuality > bestQuality) {
318
+ return;
319
+ }
257
320
  logger_1.default.debug('upgrading video quality to', nextQuality);
258
321
  this.setPublishingQuality(nextQuality);
259
322
  return;
@@ -303,6 +366,7 @@ function videoLayersFromEncodings(width, height, encodings) {
303
366
  width,
304
367
  height,
305
368
  bitrate: 0,
369
+ ssrc: 0,
306
370
  }];
307
371
  }
308
372
  return encodings.map((encoding) => {
@@ -317,6 +381,7 @@ function videoLayersFromEncodings(width, height, encodings) {
317
381
  width: width / scale,
318
382
  height: height / scale,
319
383
  bitrate: (_c = encoding.maxBitrate) !== null && _c !== void 0 ? _c : 0,
384
+ ssrc: 0,
320
385
  };
321
386
  });
322
387
  }
@@ -1 +1 @@
1
- {"version":3,"file":"LocalVideoTrack.js","sourceRoot":"","sources":["../../../src/room/track/LocalVideoTrack.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"LocalVideoTrack.js","sourceRoot":"","sources":["../../../src/room/track/LocalVideoTrack.ts"],"names":[],"mappings":"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"}
@@ -1,10 +1,8 @@
1
- import { Track } from './Track';
2
- export default class RemoteAudioTrack extends Track {
3
- /** @internal */
4
- receiver?: RTCRtpReceiver;
1
+ import { AudioReceiverStats } from '../stats';
2
+ import RemoteTrack from './RemoteTrack';
3
+ export default class RemoteAudioTrack extends RemoteTrack {
4
+ private prevStats?;
5
5
  constructor(mediaTrack: MediaStreamTrack, sid: string, receiver?: RTCRtpReceiver);
6
- /** @internal */
7
- setMuted(muted: boolean): void;
8
- start(): void;
9
- stop(): void;
6
+ protected monitorReceiver: () => Promise<void>;
7
+ protected getReceiverStats(): Promise<AudioReceiverStats | undefined>;
10
8
  }
@@ -1,27 +1,63 @@
1
1
  "use strict";
2
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
3
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
4
+ return new (P || (P = Promise))(function (resolve, reject) {
5
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
6
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
7
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
8
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
9
+ });
10
+ };
11
+ var __importDefault = (this && this.__importDefault) || function (mod) {
12
+ return (mod && mod.__esModule) ? mod : { "default": mod };
13
+ };
2
14
  Object.defineProperty(exports, "__esModule", { value: true });
3
- const events_1 = require("../events");
15
+ const stats_1 = require("../stats");
16
+ const RemoteTrack_1 = __importDefault(require("./RemoteTrack"));
4
17
  const Track_1 = require("./Track");
5
- class RemoteAudioTrack extends Track_1.Track {
18
+ class RemoteAudioTrack extends RemoteTrack_1.default {
6
19
  constructor(mediaTrack, sid, receiver) {
7
- super(mediaTrack, Track_1.Track.Kind.Audio);
8
- this.sid = sid;
9
- this.receiver = receiver;
20
+ super(mediaTrack, sid, Track_1.Track.Kind.Audio, receiver);
21
+ this.monitorReceiver = () => __awaiter(this, void 0, void 0, function* () {
22
+ if (!this.receiver) {
23
+ this._currentBitrate = 0;
24
+ return;
25
+ }
26
+ const stats = yield this.getReceiverStats();
27
+ if (stats && this.prevStats && this.receiver) {
28
+ this._currentBitrate = stats_1.computeBitrate(stats, this.prevStats);
29
+ }
30
+ this.prevStats = stats;
31
+ setTimeout(() => {
32
+ this.monitorReceiver();
33
+ }, stats_1.monitorFrequency);
34
+ });
10
35
  }
11
- /** @internal */
12
- setMuted(muted) {
13
- if (this.isMuted !== muted) {
14
- this.isMuted = muted;
15
- this.emit(muted ? events_1.TrackEvent.Muted : events_1.TrackEvent.Unmuted, this);
16
- }
17
- }
18
- start() {
19
- // use `enabled` of track to enable re-use of transceiver
20
- super.enable();
21
- }
22
- stop() {
23
- // use `enabled` of track to enable re-use of transceiver
24
- super.disable();
36
+ getReceiverStats() {
37
+ return __awaiter(this, void 0, void 0, function* () {
38
+ if (!this.receiver) {
39
+ return;
40
+ }
41
+ const stats = yield this.receiver.getStats();
42
+ let receiverStats;
43
+ stats.forEach((v) => {
44
+ if (v.type === 'inbound-rtp') {
45
+ receiverStats = {
46
+ type: 'audio',
47
+ timestamp: v.timestamp,
48
+ jitter: v.jitter,
49
+ bytesReceived: v.bytesReceived,
50
+ concealedSamples: v.concealedSamples,
51
+ concealmentEvents: v.concealmentEvents,
52
+ silentConcealedSamples: v.silentConcealedSamples,
53
+ silentConcealmentEvents: v.silentConcealmentEvents,
54
+ totalAudioEnergy: v.totalAudioEnergy,
55
+ totalSamplesDuration: v.totalSamplesDuration,
56
+ };
57
+ }
58
+ });
59
+ return receiverStats;
60
+ });
25
61
  }
26
62
  }
27
63
  exports.default = RemoteAudioTrack;
@@ -1 +1 @@
1
- {"version":3,"file":"RemoteAudioTrack.js","sourceRoot":"","sources":["../../../src/room/track/RemoteAudioTrack.ts"],"names":[],"mappings":";;AAAA,sCAAuC;AACvC,mCAAgC;AAEhC,MAAqB,gBAAiB,SAAQ,aAAK;IAIjD,YACE,UAA4B,EAC5B,GAAW,EACX,QAAyB;QAEzB,KAAK,CAAC,UAAU,EAAE,aAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACpC,IAAI,CAAC,GAAG,GAAG,GAAG,CAAC;QACf,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;IAC3B,CAAC;IAED,gBAAgB;IAChB,QAAQ,CAAC,KAAc;QACrB,IAAI,IAAI,CAAC,OAAO,KAAK,KAAK,EAAE;YAC1B,IAAI,CAAC,OAAO,GAAG,KAAK,CAAC;YACrB,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,mBAAU,CAAC,KAAK,CAAC,CAAC,CAAC,mBAAU,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;SAChE;IACH,CAAC;IAED,KAAK;QACH,yDAAyD;QACzD,KAAK,CAAC,MAAM,EAAE,CAAC;IACjB,CAAC;IAED,IAAI;QACF,yDAAyD;QACzD,KAAK,CAAC,OAAO,EAAE,CAAC;IAClB,CAAC;CACF;AA/BD,mCA+BC"}
1
+ {"version":3,"file":"RemoteAudioTrack.js","sourceRoot":"","sources":["../../../src/room/track/RemoteAudioTrack.ts"],"names":[],"mappings":";;;;;;;;;;;;;;AAAA,oCAAgF;AAChF,gEAAwC;AACxC,mCAAgC;AAEhC,MAAqB,gBAAiB,SAAQ,qBAAW;IAGvD,YACE,UAA4B,EAC5B,GAAW,EACX,QAAyB;QAEzB,KAAK,CAAC,UAAU,EAAE,GAAG,EAAE,aAAK,CAAC,IAAI,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC;QAG3C,oBAAe,GAAG,GAAS,EAAE;YACrC,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE;gBAClB,IAAI,CAAC,eAAe,GAAG,CAAC,CAAC;gBACzB,OAAO;aACR;YACD,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,gBAAgB,EAAE,CAAC;YAE5C,IAAI,KAAK,IAAI,IAAI,CAAC,SAAS,IAAI,IAAI,CAAC,QAAQ,EAAE;gBAC5C,IAAI,CAAC,eAAe,GAAG,sBAAc,CAAC,KAAK,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC;aAC9D;YAED,IAAI,CAAC,SAAS,GAAG,KAAK,CAAC;YACvB,UAAU,CAAC,GAAG,EAAE;gBACd,IAAI,CAAC,eAAe,EAAE,CAAC;YACzB,CAAC,EAAE,wBAAgB,CAAC,CAAC;QACvB,CAAC,CAAA,CAAC;IAjBF,CAAC;IAmBe,gBAAgB;;YAC9B,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE;gBAClB,OAAO;aACR;YAED,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,QAAQ,EAAE,CAAC;YAC7C,IAAI,aAA6C,CAAC;YAClD,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE;gBAClB,IAAI,CAAC,CAAC,IAAI,KAAK,aAAa,EAAE;oBAC5B,aAAa,GAAG;wBACd,IAAI,EAAE,OAAO;wBACb,SAAS,EAAE,CAAC,CAAC,SAAS;wBACtB,MAAM,EAAE,CAAC,CAAC,MAAM;wBAChB,aAAa,EAAE,CAAC,CAAC,aAAa;wBAC9B,gBAAgB,EAAE,CAAC,CAAC,gBAAgB;wBACpC,iBAAiB,EAAE,CAAC,CAAC,iBAAiB;wBACtC,sBAAsB,EAAE,CAAC,CAAC,sBAAsB;wBAChD,uBAAuB,EAAE,CAAC,CAAC,uBAAuB;wBAClD,gBAAgB,EAAE,CAAC,CAAC,gBAAgB;wBACpC,oBAAoB,EAAE,CAAC,CAAC,oBAAoB;qBAC7C,CAAC;iBACH;YACH,CAAC,CAAC,CAAC;YACH,OAAO,aAAa,CAAC;QACvB,CAAC;KAAA;CACF;AArDD,mCAqDC"}
@@ -0,0 +1,14 @@
1
+ import { Track } from './Track';
2
+ export default abstract class RemoteTrack extends Track {
3
+ /** @internal */
4
+ receiver?: RTCRtpReceiver;
5
+ constructor(mediaTrack: MediaStreamTrack, sid: string, kind: Track.Kind, receiver?: RTCRtpReceiver);
6
+ /** @internal */
7
+ setMuted(muted: boolean): void;
8
+ /** @internal */
9
+ setMediaStream(stream: MediaStream): void;
10
+ start(): void;
11
+ stop(): void;
12
+ startMonitor(): void;
13
+ protected abstract monitorReceiver(): void;
14
+ }
@@ -0,0 +1,47 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const events_1 = require("../events");
4
+ const stats_1 = require("../stats");
5
+ const Track_1 = require("./Track");
6
+ class RemoteTrack extends Track_1.Track {
7
+ constructor(mediaTrack, sid, kind, receiver) {
8
+ super(mediaTrack, kind);
9
+ this.sid = sid;
10
+ this.receiver = receiver;
11
+ }
12
+ /** @internal */
13
+ setMuted(muted) {
14
+ if (this.isMuted !== muted) {
15
+ this.isMuted = muted;
16
+ this.emit(muted ? events_1.TrackEvent.Muted : events_1.TrackEvent.Unmuted, this);
17
+ }
18
+ }
19
+ /** @internal */
20
+ setMediaStream(stream) {
21
+ // this is needed to determine when the track is finished
22
+ // we send each track down in its own MediaStream, so we can assume the
23
+ // current track is the only one that can be removed.
24
+ stream.onremovetrack = () => {
25
+ this.receiver = undefined;
26
+ this._currentBitrate = 0;
27
+ this.emit(events_1.TrackEvent.Ended, this);
28
+ };
29
+ }
30
+ start() {
31
+ this.startMonitor();
32
+ // use `enabled` of track to enable re-use of transceiver
33
+ super.enable();
34
+ }
35
+ stop() {
36
+ // use `enabled` of track to enable re-use of transceiver
37
+ super.disable();
38
+ }
39
+ /* @internal */
40
+ startMonitor() {
41
+ setTimeout(() => {
42
+ this.monitorReceiver();
43
+ }, stats_1.monitorFrequency);
44
+ }
45
+ }
46
+ exports.default = RemoteTrack;
47
+ //# sourceMappingURL=RemoteTrack.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"RemoteTrack.js","sourceRoot":"","sources":["../../../src/room/track/RemoteTrack.ts"],"names":[],"mappings":";;AAAA,sCAAuC;AACvC,oCAA4C;AAC5C,mCAAgC;AAEhC,MAA8B,WAAY,SAAQ,aAAK;IAIrD,YACE,UAA4B,EAC5B,GAAW,EACX,IAAgB,EAChB,QAAyB;QAEzB,KAAK,CAAC,UAAU,EAAE,IAAI,CAAC,CAAC;QACxB,IAAI,CAAC,GAAG,GAAG,GAAG,CAAC;QACf,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;IAC3B,CAAC;IAED,gBAAgB;IAChB,QAAQ,CAAC,KAAc;QACrB,IAAI,IAAI,CAAC,OAAO,KAAK,KAAK,EAAE;YAC1B,IAAI,CAAC,OAAO,GAAG,KAAK,CAAC;YACrB,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,mBAAU,CAAC,KAAK,CAAC,CAAC,CAAC,mBAAU,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;SAChE;IACH,CAAC;IAED,gBAAgB;IAChB,cAAc,CAAC,MAAmB;QAChC,yDAAyD;QACzD,uEAAuE;QACvE,qDAAqD;QACrD,MAAM,CAAC,aAAa,GAAG,GAAG,EAAE;YAC1B,IAAI,CAAC,QAAQ,GAAG,SAAS,CAAC;YAC1B,IAAI,CAAC,eAAe,GAAG,CAAC,CAAC;YACzB,IAAI,CAAC,IAAI,CAAC,mBAAU,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;QACpC,CAAC,CAAC;IACJ,CAAC;IAED,KAAK;QACH,IAAI,CAAC,YAAY,EAAE,CAAC;QACpB,yDAAyD;QACzD,KAAK,CAAC,MAAM,EAAE,CAAC;IACjB,CAAC;IAED,IAAI;QACF,yDAAyD;QACzD,KAAK,CAAC,OAAO,EAAE,CAAC;IAClB,CAAC;IAED,eAAe;IACf,YAAY;QACV,UAAU,CAAC,GAAG,EAAE;YACd,IAAI,CAAC,eAAe,EAAE,CAAC;QACzB,CAAC,EAAE,wBAAgB,CAAC,CAAC;IACvB,CAAC;CAGF;AAtDD,8BAsDC"}
@@ -1,9 +1,11 @@
1
1
  import { TrackInfo, VideoQuality } from '../../proto/livekit_models';
2
2
  import { Track } from './Track';
3
- import TrackPublication from './TrackPublication';
3
+ import { TrackPublication } from './TrackPublication';
4
4
  import { RemoteTrack } from './types';
5
5
  export default class RemoteTrackPublication extends TrackPublication {
6
6
  track?: RemoteTrack;
7
+ /** @internal */
8
+ _allowed: boolean;
7
9
  protected subscribed?: boolean;
8
10
  protected disabled: boolean;
9
11
  protected currentVideoQuality?: VideoQuality;
@@ -13,6 +15,10 @@ export default class RemoteTrackPublication extends TrackPublication {
13
15
  * @param subscribed true to subscribe to a track, false to unsubscribe
14
16
  */
15
17
  setSubscribed(subscribed: boolean): void;
18
+ get subscriptionStatus(): TrackPublication.SubscriptionStatus;
19
+ /**
20
+ * Returns true if track is subscribed, and ready for playback
21
+ */
16
22
  get isSubscribed(): boolean;
17
23
  get isEnabled(): boolean;
18
24
  /**
@@ -35,7 +41,9 @@ export default class RemoteTrackPublication extends TrackPublication {
35
41
  setTrack(track?: Track): void;
36
42
  /** @internal */
37
43
  updateInfo(info: TrackInfo): void;
38
- protected get isAutoManageVideo(): boolean;
44
+ private isManualOperationAllowed;
45
+ protected handleEnded: (track: RemoteTrack) => void;
46
+ protected get isAdaptiveStream(): boolean;
39
47
  protected handleVisibilityChange: (visible: boolean) => void;
40
48
  protected handleVideoDimensionsChange: (dimensions: Track.Dimensions) => void;
41
49
  protected emitTrackUpdate(): void;