Skip to content

Commit 959a13d

Browse files
authored
Rename PacketTrailer to FrameMetadata (#1982)
1 parent 99e79c7 commit 959a13d

29 files changed

Lines changed: 336 additions & 288 deletions

.changeset/plenty-snails-tell.md

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
---
2+
"livekit-client": minor
3+
---
4+
5+
Rename PacketTrailer to FrameMetadata

examples/demo/demo.ts

Lines changed: 33 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11
//@ts-ignore
22
import E2EEWorker from '../../src/e2ee/worker/e2ee.worker?worker';
3+
//@ts-ignore
4+
import FrameMetadataWorker from '../../src/frameMetadata/worker/frameMetadata.worker?worker';
35
import type {
46
ChatMessage,
57
LocalDataTrack,
@@ -44,8 +46,6 @@ import {
4446
supportsAV1,
4547
supportsVP9,
4648
} from '../../src/index';
47-
//@ts-ignore
48-
import PTWorker from '../../src/packetTrailer/worker/packetTrailer.worker?worker';
4949
import type { DataTrackFrame } from '../../src/room/data-track/frame';
5050
import { TrackEvent } from '../../src/room/events';
5151
import { isSVCCodec, sleep, supportsH265 } from '../../src/room/utils';
@@ -102,38 +102,38 @@ function updateSearchParams(url: string, token: string, key: string) {
102102
window.history.replaceState(null, '', `${window.location.pathname}?${params.toString()}`);
103103
}
104104

105-
function getPacketTrailerPublishOptions() {
106-
const enabled = (<HTMLInputElement>$('packet-trailer')).checked;
107-
const timestamp = enabled && (<HTMLInputElement>$('packet-trailer-timestamp')).checked;
108-
const frameId = enabled && (<HTMLInputElement>$('packet-trailer-frame-id')).checked;
105+
function getFrameMetadataPublishOptions() {
106+
const enabled = (<HTMLInputElement>$('frame-metadata')).checked;
107+
const timestamp = enabled && (<HTMLInputElement>$('frame-metadata-timestamp')).checked;
108+
const frameId = enabled && (<HTMLInputElement>$('frame-metadata-frame-id')).checked;
109109

110110
return timestamp || frameId ? { timestamp, frameId } : undefined;
111111
}
112112

113-
function syncPacketTrailerPublishOptions(room = currentRoom) {
114-
const packetTrailer = getPacketTrailerPublishOptions();
113+
function syncFrameMetadataPublishOptions(room = currentRoom) {
114+
const frameMetadata = getFrameMetadataPublishOptions();
115115
if (!room) {
116-
return packetTrailer;
116+
return frameMetadata;
117117
}
118118

119-
room.options.publishDefaults.packetTrailer = packetTrailer;
119+
room.options.publishDefaults.frameMetadata = frameMetadata;
120120
room.localParticipant.trackPublications.forEach((pub) => {
121121
if (pub.kind !== Track.Kind.Video) {
122122
return;
123123
}
124-
pub.options = { ...pub.options, packetTrailer };
124+
pub.options = { ...pub.options, frameMetadata };
125125
if (pub.track && isVideoTrack(pub.track)) {
126-
pub.track.publishOptions = { ...pub.track.publishOptions, packetTrailer };
126+
pub.track.publishOptions = { ...pub.track.publishOptions, frameMetadata };
127127
}
128128
});
129-
return packetTrailer;
129+
return frameMetadata;
130130
}
131131

132-
function syncPacketTrailerFeatureControls() {
133-
const enabled = (<HTMLInputElement>$('packet-trailer')).checked;
134-
const featureControls = $('packet-trailer-features');
135-
const timestamp = <HTMLInputElement>$('packet-trailer-timestamp');
136-
const frameId = <HTMLInputElement>$('packet-trailer-frame-id');
132+
function syncFrameMetadataFeatureControls() {
133+
const enabled = (<HTMLInputElement>$('frame-metadata')).checked;
134+
const featureControls = $('frame-metadata-features');
135+
const timestamp = <HTMLInputElement>$('frame-metadata-timestamp');
136+
const frameId = <HTMLInputElement>$('frame-metadata-frame-id');
137137

138138
featureControls.style.display = enabled ? 'block' : 'none';
139139
timestamp.disabled = !enabled;
@@ -142,20 +142,20 @@ function syncPacketTrailerFeatureControls() {
142142
timestamp.checked = false;
143143
frameId.checked = false;
144144
}
145-
syncPacketTrailerPublishOptions();
145+
syncFrameMetadataPublishOptions();
146146
}
147147

148-
(<HTMLInputElement>$('packet-trailer')).addEventListener(
148+
(<HTMLInputElement>$('frame-metadata')).addEventListener(
149149
'change',
150-
syncPacketTrailerFeatureControls,
150+
syncFrameMetadataFeatureControls,
151151
);
152-
(<HTMLInputElement>$('packet-trailer-timestamp')).addEventListener('change', () =>
153-
syncPacketTrailerPublishOptions(),
152+
(<HTMLInputElement>$('frame-metadata-timestamp')).addEventListener('change', () =>
153+
syncFrameMetadataPublishOptions(),
154154
);
155-
(<HTMLInputElement>$('packet-trailer-frame-id')).addEventListener('change', () =>
156-
syncPacketTrailerPublishOptions(),
155+
(<HTMLInputElement>$('frame-metadata-frame-id')).addEventListener('change', () =>
156+
syncFrameMetadataPublishOptions(),
157157
);
158-
syncPacketTrailerFeatureControls();
158+
syncFrameMetadataFeatureControls();
159159

160160
// handles actions from the HTML
161161
const appActions = {
@@ -181,8 +181,8 @@ const appActions = {
181181
const cryptoKey = (<HTMLSelectElement>$('crypto-key')).value;
182182
const autoSubscribe = (<HTMLInputElement>$('auto-subscribe')).checked;
183183
const e2eeEnabled = (<HTMLInputElement>$('e2ee')).checked;
184-
const packetTrailerEnabled = (<HTMLInputElement>$('packet-trailer')).checked;
185-
const packetTrailer = getPacketTrailerPublishOptions();
184+
const frameMetadataEnabled = (<HTMLInputElement>$('frame-metadata')).checked;
185+
const frameMetadata = getFrameMetadataPublishOptions();
186186
const audioOutputId = (<HTMLSelectElement>$('audio-output')).value;
187187
let backupCodecPolicy: BackupCodecPolicy | undefined;
188188
if ((<HTMLInputElement>$('multicodec-simulcast')).checked) {
@@ -207,15 +207,15 @@ const appActions = {
207207
screenShareEncoding: ScreenSharePresets.h1080fps30.encoding,
208208
scalabilityMode: 'L3T3_KEY',
209209
backupCodecPolicy: backupCodecPolicy,
210-
packetTrailer,
210+
frameMetadata,
211211
},
212212
videoCaptureDefaults: {
213213
resolution: VideoPresets.h720.resolution,
214214
},
215215
encryption: e2eeEnabled
216216
? { keyProvider: state.e2eeKeyProvider, worker: new E2EEWorker() }
217217
: undefined,
218-
packetTrailer: packetTrailerEnabled ? { worker: new PTWorker() } : undefined,
218+
frameMetadata: frameMetadataEnabled ? { worker: new FrameMetadataWorker() } : undefined,
219219
};
220220
if (
221221
roomOpts.publishDefaults?.videoCodec === 'av1' ||
@@ -571,7 +571,7 @@ const appActions = {
571571
// read and set current key from input
572572
const cryptoKey = (<HTMLSelectElement>$('crypto-key')).value;
573573
state.e2eeKeyProvider.setKey(cryptoKey);
574-
syncPacketTrailerPublishOptions(currentRoom);
574+
syncFrameMetadataPublishOptions(currentRoom);
575575

576576
await currentRoom.setE2EEEnabled(!currentRoom.isE2EEEnabled);
577577
},
@@ -649,9 +649,9 @@ const appActions = {
649649
} else {
650650
appendLog('enabling video');
651651
}
652-
const publishOptions = syncPacketTrailerPublishOptions(currentRoom);
652+
const publishOptions = syncFrameMetadataPublishOptions(currentRoom);
653653
await currentRoom.localParticipant.setCameraEnabled(!enabled, undefined, {
654-
packetTrailer: publishOptions,
654+
frameMetadata: publishOptions,
655655
});
656656
setButtonDisabled('toggle-video-button', false);
657657
renderParticipant(currentRoom.localParticipant);

examples/demo/index.html

Lines changed: 11 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -76,19 +76,19 @@ <h2>Livekit Sample App</h2>
7676
<label for="e2ee" class="form-check-label"> E2E Encryption </label>
7777
</div>
7878
<div>
79-
<input type="checkbox" class="form-check-input" id="packet-trailer" />
80-
<label for="packet-trailer" class="form-check-label"> Packet Trailer </label>
79+
<input type="checkbox" class="form-check-input" id="frame-metadata" />
80+
<label for="frame-metadata" class="form-check-label"> Frame Metadata </label>
8181
</div>
82-
<div id="packet-trailer-features" style="display: none">
82+
<div id="frame-metadata-features" style="display: none">
8383
<div class="ml-3">
84-
<input type="checkbox" class="form-check-input" id="packet-trailer-timestamp" />
85-
<label for="packet-trailer-timestamp" class="form-check-label">
84+
<input type="checkbox" class="form-check-input" id="frame-metadata-timestamp" />
85+
<label for="frame-metadata-timestamp" class="form-check-label">
8686
Attach Timestamp
8787
</label>
8888
</div>
8989
<div class="ml-3">
90-
<input type="checkbox" class="form-check-input" id="packet-trailer-frame-id" />
91-
<label for="packet-trailer-frame-id" class="form-check-label">
90+
<input type="checkbox" class="form-check-input" id="frame-metadata-frame-id" />
91+
<label for="frame-metadata-frame-id" class="form-check-label">
9292
Attach Frame ID
9393
</label>
9494
</div>
@@ -370,10 +370,7 @@ <h3>Data Tracks</h3>
370370
<h3 class="mt-4">RPC</h3>
371371

372372
<div class="input-group input-group-sm">
373-
<select
374-
class="form-control text-monospace"
375-
id="rpc-send-destination"
376-
>
373+
<select class="form-control text-monospace" id="rpc-send-destination">
377374
<option value="">(no remote participants)</option>
378375
</select>
379376
</div>
@@ -396,14 +393,14 @@ <h3 class="mt-4">RPC</h3>
396393
<button
397394
class="btn btn-outline-secondary"
398395
type="button"
399-
onclick="appActions.fillRpcPreset('rpc-send-payload','hello')"
396+
onclick="appActions.fillRpcPreset('rpc-send-payload', 'hello')"
400397
>
401398
Hello
402399
</button>
403400
<button
404401
class="btn btn-outline-secondary"
405402
type="button"
406-
onclick="appActions.fillRpcPreset('rpc-send-payload','20k')"
403+
onclick="appActions.fillRpcPreset('rpc-send-payload', '20k')"
407404
>
408405
20k
409406
</button>
@@ -417,11 +414,7 @@ <h3 class="mt-4">RPC</h3>
417414
</button>
418415
</div>
419416
</div>
420-
<div
421-
id="rpc-send-result"
422-
class="text-monospace mt-1"
423-
style="font-size: 0.75rem;"
424-
></div>
417+
<div id="rpc-send-result" class="text-monospace mt-1" style="font-size: 0.75rem"></div>
425418

426419
<div class="input-group input-group-sm mt-3">
427420
<input

package.json

Lines changed: 11 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -17,9 +17,14 @@
1717
"require": "./dist/livekit-client.e2ee.worker.js"
1818
},
1919
"./packet-trailer-worker": {
20-
"types": "./dist/src/packetTrailer/worker/packetTrailer.worker.d.ts",
21-
"import": "./dist/livekit-client.pt.worker.mjs",
22-
"require": "./dist/livekit-client.pt.worker.js"
20+
"types": "./dist/src/frameMetadata/worker/frameMetadata.worker.d.ts",
21+
"import": "./dist/livekit-client.fm.worker.mjs",
22+
"require": "./dist/livekit-client.fm.worker.js"
23+
},
24+
"./frame-metadata-worker": {
25+
"types": "./dist/src/frameMetadata/worker/frameMetadata.worker.d.ts",
26+
"import": "./dist/livekit-client.fm.worker.mjs",
27+
"require": "./dist/livekit-client.fm.worker.js"
2328
}
2429
},
2530
"files": [
@@ -35,16 +40,16 @@
3540
"./dist/src/e2ee/worker/e2ee.worker.d.ts": [
3641
"./dist/ts4.2/e2ee/worker/e2ee.worker.d.ts"
3742
],
38-
"./dist/src/packetTrailer/worker/packetTrailer.worker.d.ts": [
39-
"./dist/ts4.2/packetTrailer/worker/packetTrailer.worker.d.ts"
43+
"./dist/src/frameMetadata/worker/frameMetadata.worker.d.ts": [
44+
"./dist/ts4.2/frameMetadata/worker/frameMetadata.worker.d.ts"
4045
]
4146
}
4247
},
4348
"repository": "git@github.com:livekit/client-sdk-js.git",
4449
"author": "LiveKit <hello@livekit.io>",
4550
"license": "Apache-2.0",
4651
"scripts": {
47-
"build": "rollup --config --bundleConfigAsCjs && rollup --config rollup.config.worker.js --bundleConfigAsCjs && rollup --config rollup.config.pt-worker.js --bundleConfigAsCjs && pnpm downlevel-dts",
52+
"build": "rollup --config --bundleConfigAsCjs && rollup --config rollup.config.worker.js --bundleConfigAsCjs && rollup --config rollup.config.fm-worker.js --bundleConfigAsCjs && pnpm downlevel-dts",
4853
"build:clean": "rm -rf ./dist && pnpm build",
4954
"build:watch": "rollup --watch --config --bundleConfigAsCjs",
5055
"build:worker:watch": "rollup --watch --config rollup.config.worker.js --bundleConfigAsCjs",
Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -4,22 +4,22 @@ import packageJson from './package.json';
44
import { commonPlugins, kebabCaseToPascalCase } from './rollup.config';
55

66
export default {
7-
input: 'src/packetTrailer/worker/packetTrailer.worker.ts',
7+
input: 'src/frameMetadata/worker/frameMetadata.worker.ts',
88
output: [
99
{
10-
file: `dist/${packageJson.name}.pt.worker.mjs`,
10+
file: `dist/${packageJson.name}.fm.worker.mjs`,
1111
format: 'es',
1212
strict: true,
1313
sourcemap: true,
1414
},
1515
{
16-
file: `dist/${packageJson.name}.pt.worker.js`,
16+
file: `dist/${packageJson.name}.fm.worker.js`,
1717
format: 'umd',
1818
strict: true,
1919
sourcemap: true,
20-
name: kebabCaseToPascalCase(packageJson.name) + '.pt.worker',
20+
name: kebabCaseToPascalCase(packageJson.name) + '.fm.worker',
2121
plugins: [terser()],
2222
},
2323
],
24-
plugins: [typescript({ tsconfig: './src/packetTrailer/worker/tsconfig.json' }), ...commonPlugins],
24+
plugins: [typescript({ tsconfig: './src/frameMetadata/worker/tsconfig.json' }), ...commonPlugins],
2525
};

src/e2ee/E2eeManager.ts

Lines changed: 13 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
11
import { Encryption_Type, TrackInfo } from '@livekit/protocol';
22
import { EventEmitter } from 'events';
33
import type TypedEventEmitter from 'typed-emitter';
4+
import { hasFrameMetadataPublishOptions } from '../frameMetadata/utils';
45
import log, { LogLevel, workerLogger } from '../logger';
5-
import { hasPacketTrailerPublishOptions } from '../packetTrailer/utils';
66
import type RTCEngine from '../room/RTCEngine';
77
import type Room from '../room/Room';
88
import { ConnectionState } from '../room/Room';
@@ -230,7 +230,7 @@ export class E2EEManager
230230
}
231231
break;
232232
case 'packetTrailerMetadata':
233-
this.handlePacketTrailerMetadata(data.trackId, data.rtpTimestamp, data.ssrc, data.metadata);
233+
this.handleFrameMetadata(data.trackId, data.rtpTimestamp, data.ssrc, data.metadata);
234234
break;
235235
default:
236236
break;
@@ -242,7 +242,7 @@ export class E2EEManager
242242
this.emit(EncryptionEvent.EncryptionError, ev.error, undefined);
243243
};
244244

245-
private handlePacketTrailerMetadata(
245+
private handleFrameMetadata(
246246
trackId: string,
247247
rtpTimestamp: number,
248248
ssrc: number,
@@ -260,9 +260,9 @@ export class E2EEManager
260260
pub.track &&
261261
pub.track.mediaStreamID === trackId &&
262262
pub.track instanceof RemoteVideoTrack &&
263-
pub.track.packetTrailerExtractor
263+
pub.track.frameMetadataExtractor
264264
) {
265-
pub.track.packetTrailerExtractor.storeMetadata(rtpTimestamp, ssrc, metadata);
265+
pub.track.frameMetadataExtractor.storeMetadata(rtpTimestamp, ssrc, metadata);
266266
return;
267267
}
268268
}
@@ -509,7 +509,9 @@ export class E2EEManager
509509
sender,
510510
track.mediaStreamID,
511511
undefined,
512-
isVideoTrack(track) ? track.publishOptions?.packetTrailer : undefined,
512+
isVideoTrack(track)
513+
? (track.publishOptions?.frameMetadata ?? track.publishOptions?.packetTrailer)
514+
: undefined,
513515
);
514516
}
515517

@@ -598,7 +600,7 @@ export class E2EEManager
598600
sender: RTCRtpSender,
599601
trackId: string,
600602
codec?: VideoCodec,
601-
packetTrailer?: TrackPublishOptions['packetTrailer'],
603+
frameMetadata?: TrackPublishOptions['frameMetadata'],
602604
) {
603605
if (E2EE_FLAG in sender || !this.worker) {
604606
return;
@@ -615,8 +617,8 @@ export class E2EEManager
615617
participantIdentity: this.room.localParticipant.identity,
616618
trackId,
617619
codec,
618-
hasPacketTrailer: hasPacketTrailerPublishOptions(packetTrailer),
619-
packetTrailer,
620+
hasPacketTrailer: hasFrameMetadataPublishOptions(frameMetadata),
621+
packetTrailer: frameMetadata,
620622
};
621623
// @ts-ignore
622624
sender.transform = new RTCRtpScriptTransform(this.worker, options);
@@ -633,8 +635,8 @@ export class E2EEManager
633635
trackId,
634636
participantIdentity: this.room.localParticipant.identity,
635637
isReuse: false,
636-
hasPacketTrailer: hasPacketTrailerPublishOptions(packetTrailer),
637-
packetTrailer,
638+
hasPacketTrailer: hasFrameMetadataPublishOptions(frameMetadata),
639+
packetTrailer: frameMetadata,
638640
},
639641
};
640642
this.worker.postMessage(msg, [senderStreams.readable, senderStreams.writable]);

0 commit comments

Comments
 (0)