livekit-client 1.13.3 → 1.14.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (36) hide show
  1. package/README.md +9 -4
  2. package/dist/livekit-client.e2ee.worker.js +1 -1
  3. package/dist/livekit-client.e2ee.worker.js.map +1 -1
  4. package/dist/livekit-client.e2ee.worker.mjs +86 -16
  5. package/dist/livekit-client.e2ee.worker.mjs.map +1 -1
  6. package/dist/livekit-client.esm.mjs +92 -12
  7. package/dist/livekit-client.esm.mjs.map +1 -1
  8. package/dist/livekit-client.umd.js +1 -1
  9. package/dist/livekit-client.umd.js.map +1 -1
  10. package/dist/src/e2ee/utils.d.ts +3 -0
  11. package/dist/src/e2ee/utils.d.ts.map +1 -1
  12. package/dist/src/e2ee/worker/FrameCryptor.d.ts.map +1 -1
  13. package/dist/src/room/RTCEngine.d.ts.map +1 -1
  14. package/dist/src/room/events.d.ts +1 -1
  15. package/dist/src/room/participant/LocalParticipant.d.ts.map +1 -1
  16. package/dist/src/room/track/LocalTrack.d.ts +7 -0
  17. package/dist/src/room/track/LocalTrack.d.ts.map +1 -1
  18. package/dist/src/room/track/RemoteTrack.d.ts +7 -0
  19. package/dist/src/room/track/RemoteTrack.d.ts.map +1 -1
  20. package/dist/src/room/track/options.d.ts +7 -3
  21. package/dist/src/room/track/options.d.ts.map +1 -1
  22. package/dist/ts4.2/src/e2ee/utils.d.ts +3 -0
  23. package/dist/ts4.2/src/room/events.d.ts +1 -1
  24. package/dist/ts4.2/src/room/track/LocalTrack.d.ts +7 -0
  25. package/dist/ts4.2/src/room/track/RemoteTrack.d.ts +7 -0
  26. package/dist/ts4.2/src/room/track/options.d.ts +7 -3
  27. package/package.json +1 -1
  28. package/src/e2ee/utils.ts +52 -0
  29. package/src/e2ee/worker/FrameCryptor.ts +45 -27
  30. package/src/room/RTCEngine.ts +3 -2
  31. package/src/room/Room.ts +3 -3
  32. package/src/room/events.ts +1 -1
  33. package/src/room/participant/LocalParticipant.ts +7 -6
  34. package/src/room/track/LocalTrack.ts +14 -0
  35. package/src/room/track/RemoteTrack.ts +14 -0
  36. package/src/room/track/options.ts +7 -3
@@ -11863,7 +11863,7 @@ function getMatch(exp, ua) {
11863
11863
  return match && match.length >= id && match[id] || '';
11864
11864
  }
11865
11865
 
11866
- var version$1 = "1.13.3";
11866
+ var version$1 = "1.14.0";
11867
11867
 
11868
11868
  const version = version$1;
11869
11869
  const protocolVersion = 9;
@@ -12168,7 +12168,7 @@ var RoomEvent;
12168
12168
  /**
12169
12169
  * LiveKit will attempt to autoplay all audio tracks when you attach them to
12170
12170
  * audio elements. However, if that fails, we'll notify you via AudioPlaybackStatusChanged.
12171
- * `Room.canPlayAudio` will indicate if audio playback is permitted.
12171
+ * `Room.canPlaybackAudio` will indicate if audio playback is permitted.
12172
12172
  */
12173
12173
  RoomEvent["AudioPlaybackStatusChanged"] = "audioPlaybackChanged";
12174
12174
  /**
@@ -14062,6 +14062,54 @@ function ratchet(material, salt) {
14062
14062
  return crypto.subtle.deriveBits(algorithmOptions, material, 256);
14063
14063
  });
14064
14064
  }
14065
+ function needsRbspUnescaping(frameData) {
14066
+ for (var i = 0; i < frameData.length - 3; i++) {
14067
+ if (frameData[i] == 0 && frameData[i + 1] == 0 && frameData[i + 2] == 3) return true;
14068
+ }
14069
+ return false;
14070
+ }
14071
+ function parseRbsp(stream) {
14072
+ const dataOut = [];
14073
+ var length = stream.length;
14074
+ for (var i = 0; i < stream.length;) {
14075
+ // Be careful about over/underflow here. byte_length_ - 3 can underflow, and
14076
+ // i + 3 can overflow, but byte_length_ - i can't, because i < byte_length_
14077
+ // above, and that expression will produce the number of bytes left in
14078
+ // the stream including the byte at i.
14079
+ if (length - i >= 3 && !stream[i] && !stream[i + 1] && stream[i + 2] == 3) {
14080
+ // Two rbsp bytes.
14081
+ dataOut.push(stream[i++]);
14082
+ dataOut.push(stream[i++]);
14083
+ // Skip the emulation byte.
14084
+ i++;
14085
+ } else {
14086
+ // Single rbsp byte.
14087
+ dataOut.push(stream[i++]);
14088
+ }
14089
+ }
14090
+ return new Uint8Array(dataOut);
14091
+ }
14092
+ const kZerosInStartSequence = 2;
14093
+ const kEmulationByte = 3;
14094
+ function writeRbsp(data_in) {
14095
+ const dataOut = [];
14096
+ var numConsecutiveZeros = 0;
14097
+ for (var i = 0; i < data_in.length; ++i) {
14098
+ var byte = data_in[i];
14099
+ if (byte <= kEmulationByte && numConsecutiveZeros >= kZerosInStartSequence) {
14100
+ // Need to escape.
14101
+ dataOut.push(kEmulationByte);
14102
+ numConsecutiveZeros = 0;
14103
+ }
14104
+ dataOut.push(byte);
14105
+ if (byte == 0) {
14106
+ ++numConsecutiveZeros;
14107
+ } else {
14108
+ numConsecutiveZeros = 0;
14109
+ }
14110
+ }
14111
+ return new Uint8Array(dataOut);
14112
+ }
14065
14113
 
14066
14114
  /**
14067
14115
  * @experimental
@@ -14575,6 +14623,22 @@ class LocalTrack extends Track {
14575
14623
  }
14576
14624
  });
14577
14625
  }
14626
+ /**
14627
+ * Gets the RTCStatsReport for the LocalTrack's underlying RTCRtpSender
14628
+ * See https://developer.mozilla.org/en-US/docs/Web/API/RTCStatsReport
14629
+ *
14630
+ * @returns Promise<RTCStatsReport> | undefined
14631
+ */
14632
+ getRTCStatsReport() {
14633
+ var _a;
14634
+ return __awaiter(this, void 0, void 0, function* () {
14635
+ if (!((_a = this.sender) === null || _a === void 0 ? void 0 : _a.getStats)) {
14636
+ return;
14637
+ }
14638
+ const statsReport = yield this.sender.getStats();
14639
+ return statsReport;
14640
+ });
14641
+ }
14578
14642
  /**
14579
14643
  * Sets a processor on this track.
14580
14644
  * See https://github.com/livekit/track-processors-js for example usage
@@ -16359,6 +16423,7 @@ class RTCEngine extends eventsExports.EventEmitter {
16359
16423
  this.subscriber.close();
16360
16424
  this.subscriber = undefined;
16361
16425
  }
16426
+ this.hasPublished = false;
16362
16427
  this.primaryPC = undefined;
16363
16428
  const dcCleanup = dc => {
16364
16429
  if (!dc) return;
@@ -16980,7 +17045,7 @@ class RTCEngine extends eventsExports.EventEmitter {
16980
17045
  });
16981
17046
  }
16982
17047
  waitForPCReconnected() {
16983
- var _a;
17048
+ var _a, _b;
16984
17049
  return __awaiter(this, void 0, void 0, function* () {
16985
17050
  const startTime = Date.now();
16986
17051
  let now = startTime;
@@ -16994,7 +17059,7 @@ class RTCEngine extends eventsExports.EventEmitter {
16994
17059
  // on Safari, we don't get a connectionstatechanged event during ICE restart
16995
17060
  // this means we'd have to check its status manually and update address
16996
17061
  // manually
16997
- now - startTime > minReconnectWait && ((_a = this.primaryPC) === null || _a === void 0 ? void 0 : _a.connectionState) === 'connected') {
17062
+ now - startTime > minReconnectWait && ((_a = this.primaryPC) === null || _a === void 0 ? void 0 : _a.connectionState) === 'connected' && (!this.hasPublished || ((_b = this.publisher) === null || _b === void 0 ? void 0 : _b.pc.connectionState) === 'connected')) {
16998
17063
  this.pcState = PCState.Connected;
16999
17064
  }
17000
17065
  if (this.pcState === PCState.Connected) {
@@ -18387,6 +18452,22 @@ class RemoteTrack extends Track {
18387
18452
  // use `enabled` of track to enable re-use of transceiver
18388
18453
  super.disable();
18389
18454
  }
18455
+ /**
18456
+ * Gets the RTCStatsReport for the RemoteTrack's underlying RTCRtpReceiver
18457
+ * See https://developer.mozilla.org/en-US/docs/Web/API/RTCStatsReport
18458
+ *
18459
+ * @returns Promise<RTCStatsReport> | undefined
18460
+ */
18461
+ getRTCStatsReport() {
18462
+ var _a;
18463
+ return __awaiter(this, void 0, void 0, function* () {
18464
+ if (!((_a = this.receiver) === null || _a === void 0 ? void 0 : _a.getStats)) {
18465
+ return;
18466
+ }
18467
+ const statsReport = yield this.receiver.getStats();
18468
+ return statsReport;
18469
+ });
18470
+ }
18390
18471
  /* @internal */
18391
18472
  startMonitor() {
18392
18473
  if (!this.monitorInterval) {
@@ -19994,7 +20075,7 @@ class LocalParticipant extends Participant {
19994
20075
  };
19995
20076
  this.engine.client.onSubscribedQualityUpdate = this.handleSubscribedQualityUpdate;
19996
20077
  this.engine.client.onLocalTrackUnpublished = this.handleLocalTrackUnpublished;
19997
- this.engine.on(EngineEvent.Connected, this.handleReconnected).on(EngineEvent.Restarted, this.handleReconnected).on(EngineEvent.Resumed, this.handleReconnected).on(EngineEvent.Restarting, this.handleReconnecting).on(EngineEvent.Resuming, this.handleReconnecting).on(EngineEvent.Disconnected, this.handleDisconnected);
20078
+ this.engine.on(EngineEvent.Connected, this.handleReconnected).on(EngineEvent.SignalRestarted, this.handleReconnected).on(EngineEvent.SignalResumed, this.handleReconnected).on(EngineEvent.Restarting, this.handleReconnecting).on(EngineEvent.Resuming, this.handleReconnecting).on(EngineEvent.Disconnected, this.handleDisconnected);
19998
20079
  }
19999
20080
  /**
20000
20081
  * Sets and updates the metadata of the local participant.
@@ -20219,9 +20300,6 @@ class LocalParticipant extends Participant {
20219
20300
  if (options === undefined) {
20220
20301
  options = {};
20221
20302
  }
20222
- if (options.resolution === undefined) {
20223
- options.resolution = ScreenSharePresets.h1080fps15.resolution;
20224
- }
20225
20303
  if (navigator.mediaDevices.getDisplayMedia === undefined) {
20226
20304
  throw new DeviceUnsupportedError('getDisplayMedia not supported');
20227
20305
  }
@@ -20423,6 +20501,10 @@ class LocalParticipant extends Participant {
20423
20501
  // for svc codecs, disable simulcast and use vp8 for backup codec
20424
20502
  if (track instanceof LocalVideoTrack) {
20425
20503
  if (isSVCCodec(opts.videoCodec)) {
20504
+ // vp9 svc with screenshare has problem to encode, always use L1T3 here
20505
+ if (track.source === Track.Source.ScreenShare && opts.videoCodec === 'vp9') {
20506
+ opts.scalabilityMode = 'L1T3';
20507
+ }
20426
20508
  // set scalabilityMode to 'L3T3_KEY' by default
20427
20509
  opts.scalabilityMode = (_e = opts.scalabilityMode) !== null && _e !== void 0 ? _e : 'L3T3_KEY';
20428
20510
  }
@@ -20950,9 +21032,7 @@ class Room extends eventsExports.EventEmitter {
20950
21032
  }
20951
21033
  }
20952
21034
  if (nextUrl) {
20953
- livekitLogger.info('initial connection failed, retrying with another region', {
20954
- nextUrl
20955
- });
21035
+ livekitLogger.info("Initial connection failed with ConnectionError: ".concat(e.message, ". Retrying with another region: ").concat(nextUrl));
20956
21036
  yield connectFn(resolve, reject, nextUrl);
20957
21037
  } else {
20958
21038
  reject(e);
@@ -22903,5 +22983,5 @@ function isFacingModeValue(item) {
22903
22983
  return item === undefined || allowedValues.includes(item);
22904
22984
  }
22905
22985
 
22906
- export { AudioPresets, BaseKeyProvider, ConnectionCheck, ConnectionError, ConnectionQuality, ConnectionState, CriticalTimers, CryptorEvent, DataPacket_Kind, DefaultReconnectPolicy, DeviceUnsupportedError, DisconnectReason, EncryptionEvent, EngineEvent, ExternalE2EEKeyProvider, KeyHandlerEvent, KeyProviderEvent, LivekitError, LocalAudioTrack, LocalParticipant, LocalTrack, LocalTrackPublication, LocalVideoTrack, LogLevel, MediaDeviceFailure, NegotiationError, Participant, ParticipantEvent, PublishDataError, RemoteAudioTrack, RemoteParticipant, RemoteTrack, RemoteTrackPublication, RemoteVideoTrack, Room, RoomEvent, RoomState, ScreenSharePresets, Track, TrackEvent, TrackInvalidError, TrackPublication, UnexpectedConnectionState, UnsupportedServer, VideoPreset, VideoPresets, VideoPresets43, VideoQuality, attachToElement, createAudioAnalyser, createE2EEKey, createKeyMaterialFromBuffer, createKeyMaterialFromString, createLocalAudioTrack, createLocalScreenTracks, createLocalTracks, createLocalVideoTrack, deriveKeys, detachTrack, facingModeFromDeviceLabel, facingModeFromLocalTrack, getEmptyAudioStreamTrack, getEmptyVideoStreamTrack, importKey, isBackupCodec, isBrowserSupported, isCodecEqual, isE2EESupported, isInsertableStreamSupported, isScriptTransformSupported, isVideoFrame, mimeTypeToVideoCodecString, protocolVersion, ratchet, setLogExtension, setLogLevel, supportsAV1, supportsAdaptiveStream, supportsDynacast, supportsVP9, version, videoCodecs };
22986
+ export { AudioPresets, BaseKeyProvider, ConnectionCheck, ConnectionError, ConnectionQuality, ConnectionState, CriticalTimers, CryptorEvent, DataPacket_Kind, DefaultReconnectPolicy, DeviceUnsupportedError, DisconnectReason, EncryptionEvent, EngineEvent, ExternalE2EEKeyProvider, KeyHandlerEvent, KeyProviderEvent, LivekitError, LocalAudioTrack, LocalParticipant, LocalTrack, LocalTrackPublication, LocalVideoTrack, LogLevel, MediaDeviceFailure, NegotiationError, Participant, ParticipantEvent, PublishDataError, RemoteAudioTrack, RemoteParticipant, RemoteTrack, RemoteTrackPublication, RemoteVideoTrack, Room, RoomEvent, RoomState, ScreenSharePresets, Track, TrackEvent, TrackInvalidError, TrackPublication, UnexpectedConnectionState, UnsupportedServer, VideoPreset, VideoPresets, VideoPresets43, VideoQuality, attachToElement, createAudioAnalyser, createE2EEKey, createKeyMaterialFromBuffer, createKeyMaterialFromString, createLocalAudioTrack, createLocalScreenTracks, createLocalTracks, createLocalVideoTrack, deriveKeys, detachTrack, facingModeFromDeviceLabel, facingModeFromLocalTrack, getEmptyAudioStreamTrack, getEmptyVideoStreamTrack, importKey, isBackupCodec, isBrowserSupported, isCodecEqual, isE2EESupported, isInsertableStreamSupported, isScriptTransformSupported, isVideoFrame, mimeTypeToVideoCodecString, needsRbspUnescaping, parseRbsp, protocolVersion, ratchet, setLogExtension, setLogLevel, supportsAV1, supportsAdaptiveStream, supportsDynacast, supportsVP9, version, videoCodecs, writeRbsp };
22907
22987
  //# sourceMappingURL=livekit-client.esm.mjs.map