livekit-client 2.13.7 → 2.14.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 (62) hide show
  1. package/dist/livekit-client.e2ee.worker.js +1 -1
  2. package/dist/livekit-client.e2ee.worker.js.map +1 -1
  3. package/dist/livekit-client.e2ee.worker.mjs +13 -7
  4. package/dist/livekit-client.e2ee.worker.mjs.map +1 -1
  5. package/dist/livekit-client.esm.mjs +188 -90
  6. package/dist/livekit-client.esm.mjs.map +1 -1
  7. package/dist/livekit-client.umd.js +1 -1
  8. package/dist/livekit-client.umd.js.map +1 -1
  9. package/dist/src/e2ee/E2eeManager.d.ts.map +1 -1
  10. package/dist/src/e2ee/types.d.ts +7 -0
  11. package/dist/src/e2ee/types.d.ts.map +1 -1
  12. package/dist/src/e2ee/worker/FrameCryptor.d.ts +2 -1
  13. package/dist/src/e2ee/worker/FrameCryptor.d.ts.map +1 -1
  14. package/dist/src/room/PCTransport.d.ts +1 -0
  15. package/dist/src/room/PCTransport.d.ts.map +1 -1
  16. package/dist/src/room/events.d.ts +18 -0
  17. package/dist/src/room/events.d.ts.map +1 -1
  18. package/dist/src/room/participant/LocalParticipant.d.ts +1 -0
  19. package/dist/src/room/participant/LocalParticipant.d.ts.map +1 -1
  20. package/dist/src/room/participant/Participant.d.ts +3 -0
  21. package/dist/src/room/participant/Participant.d.ts.map +1 -1
  22. package/dist/src/room/track/LocalTrackPublication.d.ts +1 -0
  23. package/dist/src/room/track/LocalTrackPublication.d.ts.map +1 -1
  24. package/dist/src/room/track/LocalVideoTrack.d.ts +7 -0
  25. package/dist/src/room/track/LocalVideoTrack.d.ts.map +1 -1
  26. package/dist/src/room/track/Track.d.ts +1 -0
  27. package/dist/src/room/track/Track.d.ts.map +1 -1
  28. package/dist/src/room/track/TrackPublication.d.ts +1 -0
  29. package/dist/src/room/track/TrackPublication.d.ts.map +1 -1
  30. package/dist/src/room/track/options.d.ts +4 -0
  31. package/dist/src/room/track/options.d.ts.map +1 -1
  32. package/dist/src/room/utils.d.ts +1 -1
  33. package/dist/src/room/utils.d.ts.map +1 -1
  34. package/dist/ts4.2/src/e2ee/types.d.ts +7 -0
  35. package/dist/ts4.2/src/e2ee/worker/FrameCryptor.d.ts +2 -1
  36. package/dist/ts4.2/src/room/PCTransport.d.ts +1 -0
  37. package/dist/ts4.2/src/room/events.d.ts +18 -0
  38. package/dist/ts4.2/src/room/participant/LocalParticipant.d.ts +1 -0
  39. package/dist/ts4.2/src/room/participant/Participant.d.ts +3 -0
  40. package/dist/ts4.2/src/room/track/LocalTrackPublication.d.ts +1 -0
  41. package/dist/ts4.2/src/room/track/LocalVideoTrack.d.ts +7 -0
  42. package/dist/ts4.2/src/room/track/Track.d.ts +1 -0
  43. package/dist/ts4.2/src/room/track/TrackPublication.d.ts +1 -0
  44. package/dist/ts4.2/src/room/track/options.d.ts +4 -0
  45. package/dist/ts4.2/src/room/utils.d.ts +1 -1
  46. package/package.json +1 -1
  47. package/src/e2ee/E2eeManager.ts +8 -3
  48. package/src/e2ee/types.ts +8 -0
  49. package/src/e2ee/worker/FrameCryptor.ts +15 -0
  50. package/src/e2ee/worker/e2ee.worker.ts +8 -5
  51. package/src/room/PCTransport.ts +88 -77
  52. package/src/room/events.ts +21 -0
  53. package/src/room/participant/LocalParticipant.ts +14 -2
  54. package/src/room/participant/Participant.ts +3 -0
  55. package/src/room/participant/publishUtils.ts +2 -2
  56. package/src/room/track/LocalTrackPublication.ts +9 -1
  57. package/src/room/track/LocalVideoTrack.ts +68 -1
  58. package/src/room/track/Track.ts +1 -0
  59. package/src/room/track/TrackPublication.ts +1 -0
  60. package/src/room/track/create.ts +2 -2
  61. package/src/room/track/options.ts +5 -0
  62. package/src/room/utils.ts +19 -3
@@ -529,4 +529,5 @@ export type TrackEventCallbacks = {
529
529
  audioTrackFeatureUpdate: (track: any, feature: AudioTrackFeature, enabled: boolean) => void;
530
530
  timeSyncUpdate: (update: { timestamp: number; rtpTimestamp: number }) => void;
531
531
  preConnectBufferFlushed: (buffer: Uint8Array[]) => void;
532
+ cpuConstrained: () => void;
532
533
  };
@@ -179,4 +179,5 @@ export type PublicationEventCallbacks = {
179
179
  subscriptionFailed: (error: SubscriptionError) => void;
180
180
  transcriptionReceived: (transcription: TranscriptionSegment[]) => void;
181
181
  timeSyncUpdate: (timestamp: number) => void;
182
+ cpuConstrained: (track: LocalVideoTrack) => void;
182
183
  };
@@ -3,7 +3,7 @@ import { audioDefaults, videoDefaults } from '../defaults';
3
3
  import { DeviceUnsupportedError, TrackInvalidError } from '../errors';
4
4
  import { mediaTrackToLocalTrack } from '../participant/publishUtils';
5
5
  import type { LoggerOptions } from '../types';
6
- import { isAudioTrack, isSafari17, isVideoTrack, unwrapConstraint } from '../utils';
6
+ import { isAudioTrack, isSafari17Based, isVideoTrack, unwrapConstraint } from '../utils';
7
7
  import LocalAudioTrack from './LocalAudioTrack';
8
8
  import type LocalTrack from './LocalTrack';
9
9
  import LocalVideoTrack from './LocalVideoTrack';
@@ -198,7 +198,7 @@ export async function createLocalScreenTracks(
198
198
  if (options === undefined) {
199
199
  options = {};
200
200
  }
201
- if (options.resolution === undefined && !isSafari17()) {
201
+ if (options.resolution === undefined && !isSafari17Based()) {
202
202
  options.resolution = ScreenSharePresets.h1080fps30.resolution;
203
203
  }
204
204
 
@@ -173,6 +173,11 @@ export interface VideoCaptureOptions {
173
173
  */
174
174
  deviceId?: ConstrainDOMString;
175
175
 
176
+ /**
177
+ * A ConstrainDouble specifying the frame rate or range of frame rates which are acceptable and/or required.
178
+ */
179
+ frameRate?: ConstrainDouble;
180
+
176
181
  /**
177
182
  * a facing or an array of facings which are acceptable and/or required.
178
183
  */
package/src/room/utils.ts CHANGED
@@ -96,6 +96,14 @@ export function supportsVP9(): boolean {
96
96
  // Safari 16 and below does not support VP9
97
97
  return false;
98
98
  }
99
+ if (
100
+ browser?.os === 'iOS' &&
101
+ browser?.osVersion &&
102
+ compareVersions(browser.osVersion, '16') < 0
103
+ ) {
104
+ // Safari 16 and below on iOS does not support VP9 we need the iOS check to account for other browsers running webkit under the hood
105
+ return false;
106
+ }
99
107
  }
100
108
  const capabilities = RTCRtpSender.getCapabilities('video');
101
109
  let hasVP9 = false;
@@ -148,9 +156,12 @@ export function isSafariBased(): boolean {
148
156
  return b?.name === 'Safari' || b?.os === 'iOS';
149
157
  }
150
158
 
151
- export function isSafari17(): boolean {
159
+ export function isSafari17Based(): boolean {
152
160
  const b = getBrowser();
153
- return b?.name === 'Safari' && b.version.startsWith('17.');
161
+ return (
162
+ (b?.name === 'Safari' && b.version.startsWith('17.')) ||
163
+ (b?.os === 'iOS' && !!b?.osVersion && compareVersions(b.osVersion, '17') >= 0)
164
+ );
154
165
  }
155
166
 
156
167
  export function isSafariSvcApi(browser?: BrowserDetails): boolean {
@@ -158,7 +169,12 @@ export function isSafariSvcApi(browser?: BrowserDetails): boolean {
158
169
  browser = getBrowser();
159
170
  }
160
171
  // Safari 18.4 requires legacy svc api and scaleResolutionDown to be set
161
- return browser?.name === 'Safari' && compareVersions(browser.version, '18.3') > 0;
172
+ return (
173
+ (browser?.name === 'Safari' && compareVersions(browser.version, '18.3') > 0) ||
174
+ (browser?.os === 'iOS' &&
175
+ !!browser?.osVersion &&
176
+ compareVersions(browser.osVersion, '18.3') > 0)
177
+ );
162
178
  }
163
179
 
164
180
  export function isMobile(): boolean {