livekit-client 2.19.2 → 2.20.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 (123) 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 +23 -23
  4. package/dist/livekit-client.e2ee.worker.mjs.map +1 -1
  5. package/dist/livekit-client.esm.mjs +179 -111
  6. package/dist/livekit-client.esm.mjs.map +1 -1
  7. package/dist/livekit-client.fm.worker.js +2 -0
  8. package/dist/{livekit-client.pt.worker.js.map → livekit-client.fm.worker.js.map} +1 -1
  9. package/dist/{livekit-client.pt.worker.mjs → livekit-client.fm.worker.mjs} +4 -4
  10. package/dist/livekit-client.fm.worker.mjs.map +1 -0
  11. package/dist/livekit-client.umd.js +1 -1
  12. package/dist/livekit-client.umd.js.map +1 -1
  13. package/dist/src/api/SignalClient.d.ts.map +1 -1
  14. package/dist/src/e2ee/E2eeManager.d.ts +1 -1
  15. package/dist/src/e2ee/E2eeManager.d.ts.map +1 -1
  16. package/dist/src/e2ee/types.d.ts +5 -5
  17. package/dist/src/e2ee/types.d.ts.map +1 -1
  18. package/dist/src/e2ee/worker/FrameCryptor.d.ts +8 -8
  19. package/dist/src/e2ee/worker/FrameCryptor.d.ts.map +1 -1
  20. package/dist/src/{packetTrailer/PacketTrailerManager.d.ts → frameMetadata/FrameMetadataManager.d.ts} +8 -4
  21. package/dist/src/{packetTrailer/PacketTrailerManager.d.ts.map → frameMetadata/FrameMetadataManager.d.ts.map} +1 -1
  22. package/dist/src/{packetTrailer/packetTrailer.d.ts → frameMetadata/frameMetadata.d.ts} +7 -7
  23. package/dist/src/frameMetadata/frameMetadata.d.ts.map +1 -0
  24. package/dist/src/{packetTrailer → frameMetadata}/types.d.ts +10 -6
  25. package/dist/src/frameMetadata/types.d.ts.map +1 -0
  26. package/dist/src/frameMetadata/utils.d.ts +9 -0
  27. package/dist/src/{packetTrailer → frameMetadata}/utils.d.ts.map +1 -1
  28. package/dist/src/frameMetadata/worker/frameMetadata.worker.d.ts +2 -0
  29. package/dist/src/frameMetadata/worker/frameMetadata.worker.d.ts.map +1 -0
  30. package/dist/src/index.d.ts +10 -2
  31. package/dist/src/index.d.ts.map +1 -1
  32. package/dist/src/options.d.ts +8 -4
  33. package/dist/src/options.d.ts.map +1 -1
  34. package/dist/src/room/PCTransport.d.ts +1 -0
  35. package/dist/src/room/PCTransport.d.ts.map +1 -1
  36. package/dist/src/room/PCTransportManager.d.ts +1 -0
  37. package/dist/src/room/PCTransportManager.d.ts.map +1 -1
  38. package/dist/src/room/RTCEngine.d.ts +3 -1
  39. package/dist/src/room/RTCEngine.d.ts.map +1 -1
  40. package/dist/src/room/Room.d.ts +2 -2
  41. package/dist/src/room/Room.d.ts.map +1 -1
  42. package/dist/src/room/participant/LocalParticipant.d.ts +2 -2
  43. package/dist/src/room/participant/LocalParticipant.d.ts.map +1 -1
  44. package/dist/src/room/participant/publishUtils.d.ts.map +1 -1
  45. package/dist/src/room/token-source/TokenSource.d.ts.map +1 -1
  46. package/dist/src/room/token-source/types.d.ts +1 -0
  47. package/dist/src/room/token-source/types.d.ts.map +1 -1
  48. package/dist/src/room/token-source/utils.d.ts.map +1 -1
  49. package/dist/src/room/track/FrameMetadataExtractor.d.ts +19 -0
  50. package/dist/src/room/track/FrameMetadataExtractor.d.ts.map +1 -0
  51. package/dist/src/room/track/RemoteVideoTrack.d.ts +7 -7
  52. package/dist/src/room/track/RemoteVideoTrack.d.ts.map +1 -1
  53. package/dist/src/room/track/options.d.ts +17 -5
  54. package/dist/src/room/track/options.d.ts.map +1 -1
  55. package/dist/ts4.2/e2ee/E2eeManager.d.ts +1 -1
  56. package/dist/ts4.2/e2ee/types.d.ts +5 -5
  57. package/dist/ts4.2/e2ee/worker/FrameCryptor.d.ts +8 -8
  58. package/dist/ts4.2/{packetTrailer/PacketTrailerManager.d.ts → frameMetadata/FrameMetadataManager.d.ts} +8 -4
  59. package/dist/ts4.2/{packetTrailer/packetTrailer.d.ts → frameMetadata/frameMetadata.d.ts} +7 -7
  60. package/dist/ts4.2/{packetTrailer → frameMetadata}/types.d.ts +10 -6
  61. package/dist/ts4.2/frameMetadata/utils.d.ts +9 -0
  62. package/dist/ts4.2/frameMetadata/worker/frameMetadata.worker.d.ts +2 -0
  63. package/dist/ts4.2/index.d.ts +9 -3
  64. package/dist/ts4.2/options.d.ts +8 -4
  65. package/dist/ts4.2/room/PCTransport.d.ts +1 -0
  66. package/dist/ts4.2/room/PCTransportManager.d.ts +1 -0
  67. package/dist/ts4.2/room/RTCEngine.d.ts +3 -1
  68. package/dist/ts4.2/room/Room.d.ts +2 -2
  69. package/dist/ts4.2/room/participant/LocalParticipant.d.ts +2 -2
  70. package/dist/ts4.2/room/token-source/types.d.ts +1 -0
  71. package/dist/ts4.2/room/track/FrameMetadataExtractor.d.ts +19 -0
  72. package/dist/ts4.2/room/track/RemoteVideoTrack.d.ts +7 -7
  73. package/dist/ts4.2/room/track/options.d.ts +17 -5
  74. package/package.json +23 -18
  75. package/src/api/SignalClient.test.ts +4 -4
  76. package/src/api/SignalClient.ts +7 -3
  77. package/src/api/WebSocketStream.test.ts +7 -7
  78. package/src/e2ee/E2eeManager.ts +13 -11
  79. package/src/e2ee/types.ts +5 -5
  80. package/src/e2ee/worker/FrameCryptor.test.ts +5 -5
  81. package/src/e2ee/worker/FrameCryptor.ts +27 -23
  82. package/src/e2ee/worker/e2ee.worker.ts +5 -5
  83. package/src/e2ee/worker/tsconfig.json +4 -1
  84. package/src/{packetTrailer/PacketTrailerManager.test.ts → frameMetadata/FrameMetadataManager.test.ts} +10 -8
  85. package/src/{packetTrailer/PacketTrailerManager.ts → frameMetadata/FrameMetadataManager.ts} +21 -15
  86. package/src/{packetTrailer/packetTrailer.test.ts → frameMetadata/frameMetadata.test.ts} +1 -1
  87. package/src/{packetTrailer/packetTrailer.ts → frameMetadata/frameMetadata.ts} +9 -9
  88. package/src/{packetTrailer → frameMetadata}/types.ts +12 -6
  89. package/src/{packetTrailer → frameMetadata}/utils.test.ts +19 -19
  90. package/src/{packetTrailer → frameMetadata}/utils.ts +11 -11
  91. package/src/{packetTrailer/worker/packetTrailer.worker.ts → frameMetadata/worker/frameMetadata.worker.ts} +5 -5
  92. package/src/{packetTrailer → frameMetadata}/worker/tsconfig.json +4 -1
  93. package/src/index.ts +13 -2
  94. package/src/options.ts +9 -4
  95. package/src/room/PCTransport.ts +4 -0
  96. package/src/room/PCTransportManager.ts +4 -0
  97. package/src/room/RTCEngine.test.ts +143 -9
  98. package/src/room/RTCEngine.ts +111 -31
  99. package/src/room/Room.ts +10 -10
  100. package/src/room/participant/LocalParticipant.test.ts +19 -19
  101. package/src/room/participant/LocalParticipant.ts +21 -16
  102. package/src/room/participant/publishUtils.test.ts +6 -0
  103. package/src/room/participant/publishUtils.ts +4 -1
  104. package/src/room/rpc/client/RpcClientManager.ts +1 -1
  105. package/src/room/rpc/server/RpcServerManager.ts +1 -1
  106. package/src/room/token-source/TokenSource.ts +9 -23
  107. package/src/room/token-source/types.ts +1 -0
  108. package/src/room/token-source/utils.ts +1 -0
  109. package/src/room/track/{PacketTrailerExtractor.ts → FrameMetadataExtractor.ts} +8 -8
  110. package/src/room/track/RemoteVideoTrack.ts +7 -11
  111. package/src/room/track/options.ts +19 -5
  112. package/dist/livekit-client.pt.worker.js +0 -2
  113. package/dist/livekit-client.pt.worker.mjs.map +0 -1
  114. package/dist/src/packetTrailer/packetTrailer.d.ts.map +0 -1
  115. package/dist/src/packetTrailer/types.d.ts.map +0 -1
  116. package/dist/src/packetTrailer/utils.d.ts +0 -9
  117. package/dist/src/packetTrailer/worker/packetTrailer.worker.d.ts +0 -2
  118. package/dist/src/packetTrailer/worker/packetTrailer.worker.d.ts.map +0 -1
  119. package/dist/src/room/track/PacketTrailerExtractor.d.ts +0 -19
  120. package/dist/src/room/track/PacketTrailerExtractor.d.ts.map +0 -1
  121. package/dist/ts4.2/packetTrailer/utils.d.ts +0 -9
  122. package/dist/ts4.2/packetTrailer/worker/packetTrailer.worker.d.ts +0 -2
  123. package/dist/ts4.2/room/track/PacketTrailerExtractor.d.ts +0 -19
@@ -2,13 +2,13 @@ import type { TrackInfo } from '@livekit/protocol';
2
2
  import log from '../logger';
3
3
  import type Room from '../room/Room';
4
4
  import { RoomEvent } from '../room/events';
5
- import { PacketTrailerExtractor } from '../room/track/PacketTrailerExtractor';
5
+ import { FrameMetadataExtractor } from '../room/track/FrameMetadataExtractor';
6
6
  import type RemoteTrack from '../room/track/RemoteTrack';
7
7
  import RemoteVideoTrack from '../room/track/RemoteVideoTrack';
8
8
  import type { PTDecodeMessage, PTUpdateTrackIdMessage, PTWorkerMessage } from './types';
9
- import { isPacketTrailerSupported, shouldUsePacketTrailerScriptTransform } from './utils';
9
+ import { isFrameMetadataSupported, shouldUseFrameMetadataScriptTransform } from './utils';
10
10
 
11
- export interface PacketTrailerOptions {
11
+ export interface FrameMetadataOptions {
12
12
  /**
13
13
  * Dedicated worker for extracting packet trailers off the main thread.
14
14
  *
@@ -34,12 +34,12 @@ export interface PacketTrailerOptions {
34
34
  *
35
35
  * @experimental
36
36
  */
37
- export class PacketTrailerManager {
37
+ export class FrameMetadataManager {
38
38
  private worker?: Worker;
39
39
 
40
40
  private room?: Room;
41
41
 
42
- private extractors = new Map<string, PacketTrailerExtractor>();
42
+ private extractors = new Map<string, FrameMetadataExtractor>();
43
43
 
44
44
  /**
45
45
  * Tracks the trackId associated with each receiver that has had its
@@ -49,7 +49,7 @@ export class PacketTrailerManager {
49
49
  */
50
50
  private workerPipelines = new Map<RTCRtpReceiver, string>();
51
51
 
52
- constructor(options?: PacketTrailerOptions) {
52
+ constructor(options?: FrameMetadataOptions) {
53
53
  this.worker = options?.worker;
54
54
  }
55
55
 
@@ -100,18 +100,18 @@ export class PacketTrailerManager {
100
100
  }
101
101
 
102
102
  if (
103
- !isPacketTrailerSupported(this.worker ? { worker: this.worker } : undefined) &&
103
+ !isFrameMetadataSupported(this.worker ? { worker: this.worker } : undefined) &&
104
104
  !this.room?.hasE2EESetup
105
105
  ) {
106
- log.warn('packet trailer transform not supported; skipping extraction');
106
+ log.warn('frame metadata transform not supported; skipping extraction');
107
107
  return;
108
108
  }
109
109
 
110
- const extractor = new PacketTrailerExtractor();
110
+ const extractor = new FrameMetadataExtractor();
111
111
  const trackId = track.mediaStreamID;
112
112
 
113
113
  this.extractors.set(trackId, extractor);
114
- track.packetTrailerExtractor = extractor;
114
+ track.frameMetadataExtractor = extractor;
115
115
 
116
116
  if (this.room?.hasE2EESetup) {
117
117
  // E2EE worker strips the trailer and injects metadata directly into
@@ -123,7 +123,7 @@ export class PacketTrailerManager {
123
123
  }
124
124
 
125
125
  private setupPassthroughReceiver(receiver: RTCRtpReceiver, trackId: string) {
126
- if (shouldUsePacketTrailerScriptTransform()) {
126
+ if (shouldUseFrameMetadataScriptTransform()) {
127
127
  if ('transform' in receiver) {
128
128
  // @ts-ignore
129
129
  receiver.transform = null;
@@ -133,7 +133,7 @@ export class PacketTrailerManager {
133
133
 
134
134
  if (
135
135
  this.worker &&
136
- isPacketTrailerSupported({ worker: this.worker }) &&
136
+ isFrameMetadataSupported({ worker: this.worker }) &&
137
137
  !this.workerPipelines.has(receiver)
138
138
  ) {
139
139
  this.setupWorkerReceiver(receiver, trackId, false);
@@ -155,7 +155,7 @@ export class PacketTrailerManager {
155
155
  return;
156
156
  }
157
157
 
158
- if (shouldUsePacketTrailerScriptTransform()) {
158
+ if (shouldUseFrameMetadataScriptTransform()) {
159
159
  // @ts-ignore
160
160
  receiver.transform = new RTCRtpScriptTransform(worker, {
161
161
  kind: 'decode',
@@ -215,7 +215,7 @@ export class PacketTrailerManager {
215
215
  }
216
216
 
217
217
  if (track instanceof RemoteVideoTrack) {
218
- track.packetTrailerExtractor = undefined;
218
+ track.frameMetadataExtractor = undefined;
219
219
  }
220
220
 
221
221
  // The receiver pipeline is intentionally left running. If the receiver is
@@ -245,6 +245,12 @@ export class PacketTrailerManager {
245
245
  };
246
246
 
247
247
  private onWorkerError = (ev: ErrorEvent) => {
248
- log.error('packet trailer worker encountered an error:', { error: ev.error });
248
+ log.error('frame metadata worker encountered an error:', { error: ev.error });
249
249
  };
250
250
  }
251
+
252
+ /** @deprecated Use {@link FrameMetadataManager} instead. */
253
+ export const PacketTrailerManager = FrameMetadataManager;
254
+
255
+ /** @deprecated Use {@link FrameMetadataOptions} instead. */
256
+ export type PacketTrailerOptions = FrameMetadataOptions;
@@ -4,7 +4,7 @@ import {
4
4
  appendPacketTrailerToEncodedFrame,
5
5
  extractPacketTrailer,
6
6
  processPacketTrailer,
7
- } from './packetTrailer';
7
+ } from './frameMetadata';
8
8
 
9
9
  describe('packetTrailer', () => {
10
10
  afterEach(() => {
@@ -1,5 +1,5 @@
1
- import type { PacketTrailerMetadata, PacketTrailerPublishOptions } from './types';
2
- import { hasPacketTrailerPublishOptions } from './utils';
1
+ import type { FrameMetadata, FrameMetadataPublishOptions } from './types';
2
+ import { hasFrameMetadataPublishOptions } from './utils';
3
3
 
4
4
  export const PACKET_TRAILER_MAGIC = Uint8Array.from([
5
5
  'L'.charCodeAt(0),
@@ -17,7 +17,7 @@ const FRAME_ID_TLV_SIZE = 6;
17
17
 
18
18
  export interface ExtractPacketTrailerResult {
19
19
  data: Uint8Array;
20
- metadata?: PacketTrailerMetadata;
20
+ metadata?: FrameMetadata;
21
21
  }
22
22
 
23
23
  export function appendPacketTrailer(
@@ -64,10 +64,10 @@ export function appendPacketTrailer(
64
64
 
65
65
  export function appendPacketTrailerToEncodedFrame(
66
66
  frame: RTCEncodedVideoFrame,
67
- options: PacketTrailerPublishOptions | undefined,
67
+ options: FrameMetadataPublishOptions | undefined,
68
68
  frameId: number,
69
69
  ): boolean {
70
- if (!hasPacketTrailerPublishOptions(options) || frame.data.byteLength === 0) {
70
+ if (!hasFrameMetadataPublishOptions(options) || frame.data.byteLength === 0) {
71
71
  return false;
72
72
  }
73
73
 
@@ -108,7 +108,7 @@ export function extractPacketTrailer(data: ArrayBuffer | Uint8Array): ExtractPac
108
108
  const strippedData = bytes.subarray(0, trailerStart);
109
109
  let offset = trailerStart;
110
110
  let foundAny = false;
111
- const metadata: PacketTrailerMetadata = {
111
+ const metadata: FrameMetadata = {
112
112
  userTimestamp: BigInt(0),
113
113
  frameId: 0,
114
114
  };
@@ -223,16 +223,16 @@ export function getFrameSsrc(frame: RTCEncodedVideoFrame | RTCEncodedAudioFrame)
223
223
  return 0;
224
224
  }
225
225
 
226
- export interface PacketTrailerFramePayload {
226
+ export interface FrameMetadataPayload {
227
227
  trackId: string;
228
228
  rtpTimestamp: number;
229
229
  ssrc: number;
230
- metadata: PacketTrailerMetadata;
230
+ metadata: FrameMetadata;
231
231
  }
232
232
 
233
233
  export interface ProcessPacketTrailerResult {
234
234
  data?: ArrayBuffer;
235
- payload?: PacketTrailerFramePayload;
235
+ payload?: FrameMetadataPayload;
236
236
  }
237
237
 
238
238
  /**
@@ -1,15 +1,21 @@
1
- import type { PacketTrailerFramePayload } from './packetTrailer';
1
+ import type { FrameMetadataPayload } from './frameMetadata';
2
2
 
3
- export interface PacketTrailerMetadata {
3
+ export interface FrameMetadata {
4
4
  userTimestamp: bigint;
5
5
  frameId: number;
6
6
  }
7
7
 
8
- export interface PacketTrailerPublishOptions {
8
+ /** @deprecated Use {@link FrameMetadata} instead. */
9
+ export type PacketTrailerMetadata = FrameMetadata;
10
+
11
+ export interface FrameMetadataPublishOptions {
9
12
  timestamp?: boolean;
10
13
  frameId?: boolean;
11
14
  }
12
15
 
16
+ /** @deprecated Use {@link FrameMetadataPublishOptions} instead. */
17
+ export type PacketTrailerPublishOptions = FrameMetadataPublishOptions;
18
+
13
19
  export interface PTBaseMessage {
14
20
  kind: string;
15
21
  data?: unknown;
@@ -38,7 +44,7 @@ export interface PTEncodeMessage extends PTBaseMessage {
38
44
  data: {
39
45
  readableStream: ReadableStream;
40
46
  writableStream: WritableStream;
41
- packetTrailer?: PacketTrailerPublishOptions;
47
+ packetTrailer?: FrameMetadataPublishOptions;
42
48
  };
43
49
  }
44
50
 
@@ -49,12 +55,12 @@ export type PTScriptTransformOptions =
49
55
  }
50
56
  | {
51
57
  kind: 'encode';
52
- packetTrailer?: PacketTrailerPublishOptions;
58
+ packetTrailer?: FrameMetadataPublishOptions;
53
59
  };
54
60
 
55
61
  export interface PTMetadataMessage extends PTBaseMessage {
56
62
  kind: 'metadata';
57
- data: PacketTrailerFramePayload;
63
+ data: FrameMetadataPayload;
58
64
  }
59
65
 
60
66
  export interface PTUpdateTrackIdMessage extends PTBaseMessage {
@@ -1,12 +1,12 @@
1
1
  import { PacketTrailerFeature } from '@livekit/protocol';
2
2
  import { afterEach, describe, expect, it } from 'vitest';
3
3
  import {
4
- getPacketTrailerFeatures,
5
- getPacketTrailerPublishOptions,
6
- isPacketTrailerSupported,
4
+ getFrameMetadataFeatures,
5
+ getFrameMetadataPublishOptions,
6
+ isFrameMetadataSupported,
7
7
  } from './utils';
8
8
 
9
- describe('packet trailer support', () => {
9
+ describe('frame metadata support', () => {
10
10
  const originalRTCRtpSender = window.RTCRtpSender;
11
11
  const originalRTCRtpScriptTransform = (window as unknown as { RTCRtpScriptTransform?: unknown })
12
12
  .RTCRtpScriptTransform;
@@ -46,20 +46,20 @@ describe('packet trailer support', () => {
46
46
  });
47
47
  }
48
48
 
49
- it('supports packet trailers with RTCRtpScriptTransform on Safari', () => {
49
+ it('supports frame metadata with RTCRtpScriptTransform on Safari', () => {
50
50
  stubScriptTransformSupport(
51
51
  'Mozilla/5.0 (Macintosh; Intel Mac OS X 14_0) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/17.0 Safari/605.1.15',
52
52
  );
53
53
 
54
- expect(isPacketTrailerSupported({ worker: {} as Worker })).toBe(true);
54
+ expect(isFrameMetadataSupported({ worker: {} as Worker })).toBe(true);
55
55
  });
56
56
 
57
- it('supports packet trailers with RTCRtpScriptTransform on Firefox', () => {
57
+ it('supports frame metadata with RTCRtpScriptTransform on Firefox', () => {
58
58
  stubScriptTransformSupport(
59
59
  'Mozilla/5.0 (Macintosh; Intel Mac OS X 14.0; rv:144.0) Gecko/20100101 Firefox/144.0',
60
60
  );
61
61
 
62
- expect(isPacketTrailerSupported({ worker: {} as Worker })).toBe(true);
62
+ expect(isFrameMetadataSupported({ worker: {} as Worker })).toBe(true);
63
63
  });
64
64
 
65
65
  it('does not use RTCRtpScriptTransform support on Chromium-based browsers', () => {
@@ -67,39 +67,39 @@ describe('packet trailer support', () => {
67
67
  'Mozilla/5.0 (Macintosh; Intel Mac OS X 14_0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/141.0.0.0 Safari/537.36',
68
68
  );
69
69
 
70
- expect(isPacketTrailerSupported({ worker: {} as Worker })).toBe(false);
70
+ expect(isFrameMetadataSupported({ worker: {} as Worker })).toBe(false);
71
71
  });
72
72
  });
73
73
 
74
- describe('packet trailer publish features', () => {
74
+ describe('frame metadata publish features', () => {
75
75
  it('maps publish options to protocol features', () => {
76
- expect(getPacketTrailerFeatures({ timestamp: true, frameId: true })).toEqual([
76
+ expect(getFrameMetadataFeatures({ timestamp: true, frameId: true })).toEqual([
77
77
  PacketTrailerFeature.PTF_USER_TIMESTAMP,
78
78
  PacketTrailerFeature.PTF_FRAME_ID,
79
79
  ]);
80
- expect(getPacketTrailerFeatures({ timestamp: true })).toEqual([
80
+ expect(getFrameMetadataFeatures({ timestamp: true })).toEqual([
81
81
  PacketTrailerFeature.PTF_USER_TIMESTAMP,
82
82
  ]);
83
- expect(getPacketTrailerFeatures({ frameId: true })).toEqual([
83
+ expect(getFrameMetadataFeatures({ frameId: true })).toEqual([
84
84
  PacketTrailerFeature.PTF_FRAME_ID,
85
85
  ]);
86
- expect(getPacketTrailerFeatures()).toEqual([]);
86
+ expect(getFrameMetadataFeatures()).toEqual([]);
87
87
  });
88
88
 
89
89
  it('maps protocol features to publish options', () => {
90
90
  expect(
91
- getPacketTrailerPublishOptions([
91
+ getFrameMetadataPublishOptions([
92
92
  PacketTrailerFeature.PTF_USER_TIMESTAMP,
93
93
  PacketTrailerFeature.PTF_FRAME_ID,
94
94
  ]),
95
95
  ).toEqual({ timestamp: true, frameId: true });
96
- expect(getPacketTrailerPublishOptions([PacketTrailerFeature.PTF_USER_TIMESTAMP])).toEqual({
96
+ expect(getFrameMetadataPublishOptions([PacketTrailerFeature.PTF_USER_TIMESTAMP])).toEqual({
97
97
  timestamp: true,
98
98
  });
99
- expect(getPacketTrailerPublishOptions([PacketTrailerFeature.PTF_FRAME_ID])).toEqual({
99
+ expect(getFrameMetadataPublishOptions([PacketTrailerFeature.PTF_FRAME_ID])).toEqual({
100
100
  frameId: true,
101
101
  });
102
- expect(getPacketTrailerPublishOptions()).toBeUndefined();
103
- expect(getPacketTrailerPublishOptions([])).toBeUndefined();
102
+ expect(getFrameMetadataPublishOptions()).toBeUndefined();
103
+ expect(getFrameMetadataPublishOptions([])).toBeUndefined();
104
104
  });
105
105
  });
@@ -1,25 +1,25 @@
1
1
  import { PacketTrailerFeature } from '@livekit/protocol';
2
2
  import { isInsertableStreamSupported } from '../e2ee/utils';
3
3
  import { isScriptTransformSupportedForWorker } from '../room/utils';
4
- import type { PacketTrailerOptions } from './PacketTrailerManager';
5
- import type { PacketTrailerPublishOptions } from './types';
4
+ import type { FrameMetadataOptions } from './FrameMetadataManager';
5
+ import type { FrameMetadataPublishOptions } from './types';
6
6
 
7
- export function shouldUsePacketTrailerScriptTransform() {
7
+ export function shouldUseFrameMetadataScriptTransform() {
8
8
  return isScriptTransformSupportedForWorker();
9
9
  }
10
10
 
11
- export function isPacketTrailerSupported(options?: PacketTrailerOptions) {
11
+ export function isFrameMetadataSupported(options?: FrameMetadataOptions) {
12
12
  return (
13
- !!options?.worker && (isInsertableStreamSupported() || shouldUsePacketTrailerScriptTransform())
13
+ !!options?.worker && (isInsertableStreamSupported() || shouldUseFrameMetadataScriptTransform())
14
14
  );
15
15
  }
16
16
 
17
- export function hasPacketTrailerPublishOptions(options?: PacketTrailerPublishOptions): boolean {
17
+ export function hasFrameMetadataPublishOptions(options?: FrameMetadataPublishOptions): boolean {
18
18
  return !!(options?.timestamp || options?.frameId);
19
19
  }
20
20
 
21
- export function getPacketTrailerFeatures(
22
- options?: PacketTrailerPublishOptions,
21
+ export function getFrameMetadataFeatures(
22
+ options?: FrameMetadataPublishOptions,
23
23
  ): PacketTrailerFeature[] {
24
24
  const features: PacketTrailerFeature[] = [];
25
25
  if (options?.timestamp) {
@@ -31,14 +31,14 @@ export function getPacketTrailerFeatures(
31
31
  return features;
32
32
  }
33
33
 
34
- export function getPacketTrailerPublishOptions(
34
+ export function getFrameMetadataPublishOptions(
35
35
  features?: PacketTrailerFeature[],
36
- ): PacketTrailerPublishOptions | undefined {
36
+ ): FrameMetadataPublishOptions | undefined {
37
37
  if (!features || features.length === 0) {
38
38
  return undefined;
39
39
  }
40
40
 
41
- const options: PacketTrailerPublishOptions = {};
41
+ const options: FrameMetadataPublishOptions = {};
42
42
  if (features.includes(PacketTrailerFeature.PTF_USER_TIMESTAMP)) {
43
43
  options.timestamp = true;
44
44
  }
@@ -1,11 +1,11 @@
1
- import { appendPacketTrailerToEncodedFrame, processPacketTrailer } from '../packetTrailer';
1
+ import { appendPacketTrailerToEncodedFrame, processPacketTrailer } from '../frameMetadata';
2
2
  import type {
3
+ FrameMetadataPublishOptions,
3
4
  PTMetadataMessage,
4
5
  PTScriptTransformOptions,
5
6
  PTWorkerMessage,
6
- PacketTrailerPublishOptions,
7
7
  } from '../types';
8
- import { hasPacketTrailerPublishOptions } from '../utils';
8
+ import { hasFrameMetadataPublishOptions } from '../utils';
9
9
 
10
10
  /**
11
11
  * Holds the trackId currently associated with a pipeline. A mutable
@@ -97,9 +97,9 @@ function setupDecodeTransform(
97
97
  function setupEncodeTransform(
98
98
  readable: ReadableStream,
99
99
  writable: WritableStream,
100
- packetTrailer?: PacketTrailerPublishOptions,
100
+ packetTrailer?: FrameMetadataPublishOptions,
101
101
  ) {
102
- if (!hasPacketTrailerPublishOptions(packetTrailer)) {
102
+ if (!hasFrameMetadataPublishOptions(packetTrailer)) {
103
103
  readable.pipeTo(writable).catch(() => {});
104
104
  return;
105
105
  }
@@ -8,7 +8,10 @@
8
8
  "ES2018.Promise",
9
9
  "WebWorker",
10
10
  "ES2021.WeakRef",
11
- "DOM.AsyncIterable"
11
+ "DOM.AsyncIterable",
12
+ "ES2020.BigInt",
13
+ "ES2018.AsyncIterable",
14
+ "ES2018.AsyncGenerator"
12
15
  ]
13
16
  }
14
17
  }
package/src/index.ts CHANGED
@@ -64,11 +64,22 @@ import {
64
64
  import { getBrowser } from './utils/browserParser';
65
65
 
66
66
  export { RpcError, type RpcInvocationData, type PerformRpcParams } from './room/rpc';
67
- export type { PacketTrailerMetadata, PacketTrailerPublishOptions } from './packetTrailer/types';
67
+ export type {
68
+ FrameMetadata,
69
+ FrameMetadataPublishOptions,
70
+ /** @deprecated Use {@link FrameMetadata} instead. */
71
+ PacketTrailerMetadata,
72
+ /** @deprecated Use {@link FrameMetadataPublishOptions} instead. */
73
+ PacketTrailerPublishOptions,
74
+ } from './frameMetadata/types';
68
75
  export {
76
+ FrameMetadataManager,
77
+ /** @deprecated Use {@link FrameMetadataManager} instead. */
69
78
  PacketTrailerManager,
79
+ type FrameMetadataOptions,
80
+ /** @deprecated Use {@link FrameMetadataOptions} instead. */
70
81
  type PacketTrailerOptions,
71
- } from './packetTrailer/PacketTrailerManager';
82
+ } from './frameMetadata/FrameMetadataManager';
72
83
 
73
84
  export * from './connectionHelper/ConnectionCheck';
74
85
  export * from './connectionHelper/checks/Checker';
package/src/options.ts CHANGED
@@ -1,5 +1,5 @@
1
1
  import type { E2EEOptions } from './e2ee/types';
2
- import type { PacketTrailerOptions } from './packetTrailer/PacketTrailerManager';
2
+ import type { FrameMetadataOptions } from './frameMetadata/FrameMetadataManager';
3
3
  import type { ReconnectPolicy } from './room/ReconnectPolicy';
4
4
  import type {
5
5
  AudioCaptureOptions,
@@ -103,10 +103,15 @@ export interface InternalRoomOptions {
103
103
 
104
104
  /**
105
105
  * @experimental
106
- * Options for enabling packet trailers on video tracks.
107
- * Packet trailers carry frame-level metadata such as user timestamps and frame IDs.
106
+ * Options for enabling frame metadata on video tracks.
107
+ * Frame metadata carries frame-level information such as user timestamps and frame IDs.
108
108
  */
109
- packetTrailer?: PacketTrailerOptions;
109
+ frameMetadata?: FrameMetadataOptions;
110
+
111
+ /**
112
+ * @deprecated Use {@link InternalRoomOptions.frameMetadata} instead.
113
+ */
114
+ packetTrailer?: FrameMetadataOptions;
110
115
 
111
116
  /**
112
117
  * will attempt to connect via single peer connection mode.
@@ -498,6 +498,10 @@ export default class PCTransport extends (EventEmitter as new () => TypedEmitter
498
498
  return this.pc.getStats();
499
499
  }
500
500
 
501
+ getMaxMessageSize() {
502
+ return this._pc?.sctp?.maxMessageSize;
503
+ }
504
+
501
505
  async getConnectedAddress(): Promise<string | undefined> {
502
506
  if (!this._pc) {
503
507
  return;
@@ -310,6 +310,10 @@ export class PCTransportManager {
310
310
  return matchingTransceiver?.mid;
311
311
  }
312
312
 
313
+ getMaxPublisherMessageSize() {
314
+ return this.publisher.getMaxMessageSize();
315
+ }
316
+
313
317
  addPublisherTrack(track: MediaStreamTrack) {
314
318
  return this.publisher.addTrack(track);
315
319
  }