From df071333cffed9e59fadf65999c7ea00dd88058a Mon Sep 17 00:00:00 2001 From: shijing xian Date: Tue, 30 Jun 2026 13:35:18 +0800 Subject: [PATCH 1/4] chore: update @livekit/rtc-ffi-bindings to v0.12.68 Updates FFI bindings to include: - Add MaintainFramerateAndResolution to DegradationPreference enum (aligns with WebRTC M144) - DISABLED is deprecated, use MAINTAIN_FRAMERATE_AND_RESOLUTION instead Co-Authored-By: Claude Opus 4.5 --- packages/livekit-rtc/package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/livekit-rtc/package.json b/packages/livekit-rtc/package.json index a5133c52..6f4c4eae 100644 --- a/packages/livekit-rtc/package.json +++ b/packages/livekit-rtc/package.json @@ -32,7 +32,7 @@ "dependencies": { "@datastructures-js/deque": "1.0.8", "@livekit/mutex": "^1.0.0", - "@livekit/rtc-ffi-bindings": "0.12.60", + "@livekit/rtc-ffi-bindings": "0.12.68", "@livekit/typed-emitter": "^3.0.0", "pino": "^9.0.0", "pino-pretty": "^13.0.0" From f0fc8d849435dcb8836b5b137a72460119f87a6b Mon Sep 17 00:00:00 2001 From: shijing xian Date: Tue, 30 Jun 2026 14:18:21 +0800 Subject: [PATCH 2/4] feat: add DegradationPreference enum (without deprecated Disabled) Add a DegradationPreference enum that matches the Rust API: - Balanced: Balance between framerate and resolution degradation - MaintainFramerate: Degrade framerate to maintain resolution - MaintainResolution: Degrade resolution to maintain framerate - MaintainFramerateAndResolution: Maintain both, drop frames before encoding The deprecated 'Disabled' value is intentionally excluded since it has been removed from WebRTC M144 and replaced with MaintainFramerateAndResolution. Also updates @livekit/rtc-ffi-bindings to v0.12.68. Co-Authored-By: Claude Opus 4.5 --- packages/livekit-rtc/src/index.ts | 1 + packages/livekit-rtc/src/types.ts | 17 +++++++++++++++++ 2 files changed, 18 insertions(+) diff --git a/packages/livekit-rtc/src/index.ts b/packages/livekit-rtc/src/index.ts index 7d131a3a..14cc619c 100644 --- a/packages/livekit-rtc/src/index.ts +++ b/packages/livekit-rtc/src/index.ts @@ -29,6 +29,7 @@ export { IceTransportType, TrackPublishOptions, } from '@livekit/rtc-ffi-bindings'; +export { DegradationPreference } from './types.js'; export { SimulateScenarioKind, StreamState, diff --git a/packages/livekit-rtc/src/types.ts b/packages/livekit-rtc/src/types.ts index 0f98f0b4..bde6cab0 100644 --- a/packages/livekit-rtc/src/types.ts +++ b/packages/livekit-rtc/src/types.ts @@ -8,3 +8,20 @@ export interface ChatMessage { editTimestamp?: number; generated?: boolean; } + +/** + * Controls how the encoder degrades quality when bandwidth is constrained. + */ +export enum DegradationPreference { + /** Balance between framerate and resolution degradation. */ + Balanced = 0, + /** Degrade framerate to maintain resolution. */ + MaintainFramerate = 1, + /** Degrade resolution to maintain framerate (drop frames to keep clarity). */ + MaintainResolution = 2, + /** + * Maintain both framerate and resolution. Frames may be dropped before encoding + * if necessary to avoid overusing network and encoder resources. + */ + MaintainFramerateAndResolution = 4, +} From 22f8c6ad0b4c51691956f364506be15224c8ad47 Mon Sep 17 00:00:00 2001 From: shijing xian Date: Tue, 30 Jun 2026 16:26:56 +0800 Subject: [PATCH 3/4] fix: correct DegradationPreference docstrings to match WebRTC semantics The docstrings for MaintainFramerate and MaintainResolution were swapped. Per the W3C WebRTC spec: - MaintainFramerate: Degrade resolution to maintain framerate (prioritize smooth motion) - MaintainResolution: Degrade framerate to maintain resolution (prioritize image clarity) Co-Authored-By: Claude Opus 4.5 --- packages/livekit-rtc/src/types.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/livekit-rtc/src/types.ts b/packages/livekit-rtc/src/types.ts index bde6cab0..3941b601 100644 --- a/packages/livekit-rtc/src/types.ts +++ b/packages/livekit-rtc/src/types.ts @@ -15,9 +15,9 @@ export interface ChatMessage { export enum DegradationPreference { /** Balance between framerate and resolution degradation. */ Balanced = 0, - /** Degrade framerate to maintain resolution. */ + /** Degrade resolution to maintain framerate (prioritize smooth motion). */ MaintainFramerate = 1, - /** Degrade resolution to maintain framerate (drop frames to keep clarity). */ + /** Degrade framerate to maintain resolution (prioritize image clarity). */ MaintainResolution = 2, /** * Maintain both framerate and resolution. Frames may be dropped before encoding From dd149cedac31504bba0af1ab82c75d889dafc82a Mon Sep 17 00:00:00 2001 From: lukasIO Date: Tue, 30 Jun 2026 13:49:13 +0200 Subject: [PATCH 4/4] update lock file --- pnpm-lock.yaml | 50 +++++++++++++++++++++++++------------------------- 1 file changed, 25 insertions(+), 25 deletions(-) diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 5127ee09..dc4558c3 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -207,8 +207,8 @@ importers: specifier: ^1.0.0 version: 1.1.1 '@livekit/rtc-ffi-bindings': - specifier: 0.12.60 - version: 0.12.60 + specifier: 0.12.68 + version: 0.12.68 '@livekit/typed-emitter': specifier: ^3.0.0 version: 3.0.0 @@ -991,40 +991,40 @@ packages: '@livekit/protocol@1.48.0': resolution: {integrity: sha512-fYHYgltH6YavAsokl3qsHLkBdQeKCl4UORVTub5crS3t8JtKFZ0uinHDFQ+XXdNKS6Ub9gcOjV+UHcDiqnWXoQ==} - '@livekit/rtc-ffi-bindings-darwin-arm64@0.12.60': - resolution: {integrity: sha512-YHXqybkYfaTc3txJXXWoVogiSP3yKJdkaZlIlZ6IDMGnN9elUoHDYU+ZSn/rbdGu0pp4HUOzffXkbkItN735Bw==} + '@livekit/rtc-ffi-bindings-darwin-arm64@0.12.68': + resolution: {integrity: sha512-xyBakR8fo3RC8CdrfV6/9U14JlmxXUYqB4eLITEsB+iCKW0CE7JfMqDFqV/JIlq43+xzf7wLJsNktgQRrlcdJg==} engines: {node: '>= 18'} cpu: [arm64] os: [darwin] - '@livekit/rtc-ffi-bindings-darwin-x64@0.12.60': - resolution: {integrity: sha512-SkPPWE2/nb2BAXrCWP6+vaR2I4EeyG3Vv+csUaa1EvDVMbFqBHWqNVTQcx/ChgecbYB9dIFZHVYpfjbFkVd84g==} + '@livekit/rtc-ffi-bindings-darwin-x64@0.12.68': + resolution: {integrity: sha512-nJFgFEbDePvPF9v9nqTBlKZ1otGSBgB3DJO+qjw+KowaE2AVubb6/qCF3gjJK/xxfyMcTgVnPr2SgcXWtNZ5Kg==} engines: {node: '>= 18'} cpu: [x64] os: [darwin] - '@livekit/rtc-ffi-bindings-linux-arm64-gnu@0.12.60': - resolution: {integrity: sha512-8umeMn9p/VZ41EGty1qX9zPV5mfGxCioYKeUnALpf8AKqT/yXDjnog1VkS5f8gFX/zY7HDaeE+s60nZXaOZJbw==} + '@livekit/rtc-ffi-bindings-linux-arm64-gnu@0.12.68': + resolution: {integrity: sha512-Hl9R9ZXqvq7lCbPqXnSNnojfxv8tmLISoxuv7zd0iA4Q7V99v/XCiali1jKpggXn5IqlyF3PHeW11a41glFjTw==} engines: {node: '>= 18'} cpu: [arm64] os: [linux] libc: [glibc] - '@livekit/rtc-ffi-bindings-linux-x64-gnu@0.12.60': - resolution: {integrity: sha512-ttWrR/e8Ghaa9I+LaStxK8lh+aA9QBz6Dge6eXyKwTrAMHwHEtL2Rnf1rHQTiwadeH7AoytpfWf5FZl/OelLaQ==} + '@livekit/rtc-ffi-bindings-linux-x64-gnu@0.12.68': + resolution: {integrity: sha512-2r99lXSkrmiHjhizCquQwPEbP7mCV/zESVXq1pdEliNvbBJXibMEYbRmuSr1lf4/VZhPpRGcF+Laqg5DgFoe+A==} engines: {node: '>= 18'} cpu: [x64] os: [linux] libc: [glibc] - '@livekit/rtc-ffi-bindings-win32-x64-msvc@0.12.60': - resolution: {integrity: sha512-HfOBEf3rmpsG7hU3/BM9x2jnkVwKFve2v3cyjxlk41d6OkCthYb+g/ULEPFBKPafYyepDwcd2c8MDo5fMM+4Zw==} + '@livekit/rtc-ffi-bindings-win32-x64-msvc@0.12.68': + resolution: {integrity: sha512-ec7MJBWx4mz40GvfXQ2Bn9uqvp2HueldTouPi5jzYUG2DECmhYhwai0cBcRFJOya3hBm/nRXP0A+pUBdWnY7Fg==} engines: {node: '>= 18'} cpu: [x64] os: [win32] - '@livekit/rtc-ffi-bindings@0.12.60': - resolution: {integrity: sha512-ZJD2DNoHfR8PzKeyDMH6i1zKpk7S4LlrQDIZvisxj6HPaJnKofzSssNMF8fpGFvVCZ844kbcOFogRPgHFno82w==} + '@livekit/rtc-ffi-bindings@0.12.68': + resolution: {integrity: sha512-PNr+EOwsT/ZUHALjTdSh+y1Dcj5Msnh0p5C8DaGBF9dCrFVZOxwp1rZovZo3cM+hiYo8TAvrjMEK3V5qD3++8g==} engines: {node: '>= 18'} '@livekit/typed-emitter@3.0.0': @@ -4452,30 +4452,30 @@ snapshots: dependencies: '@bufbuild/protobuf': 1.10.1 - '@livekit/rtc-ffi-bindings-darwin-arm64@0.12.60': + '@livekit/rtc-ffi-bindings-darwin-arm64@0.12.68': optional: true - '@livekit/rtc-ffi-bindings-darwin-x64@0.12.60': + '@livekit/rtc-ffi-bindings-darwin-x64@0.12.68': optional: true - '@livekit/rtc-ffi-bindings-linux-arm64-gnu@0.12.60': + '@livekit/rtc-ffi-bindings-linux-arm64-gnu@0.12.68': optional: true - '@livekit/rtc-ffi-bindings-linux-x64-gnu@0.12.60': + '@livekit/rtc-ffi-bindings-linux-x64-gnu@0.12.68': optional: true - '@livekit/rtc-ffi-bindings-win32-x64-msvc@0.12.60': + '@livekit/rtc-ffi-bindings-win32-x64-msvc@0.12.68': optional: true - '@livekit/rtc-ffi-bindings@0.12.60': + '@livekit/rtc-ffi-bindings@0.12.68': dependencies: '@bufbuild/protobuf': 1.10.1 optionalDependencies: - '@livekit/rtc-ffi-bindings-darwin-arm64': 0.12.60 - '@livekit/rtc-ffi-bindings-darwin-x64': 0.12.60 - '@livekit/rtc-ffi-bindings-linux-arm64-gnu': 0.12.60 - '@livekit/rtc-ffi-bindings-linux-x64-gnu': 0.12.60 - '@livekit/rtc-ffi-bindings-win32-x64-msvc': 0.12.60 + '@livekit/rtc-ffi-bindings-darwin-arm64': 0.12.68 + '@livekit/rtc-ffi-bindings-darwin-x64': 0.12.68 + '@livekit/rtc-ffi-bindings-linux-arm64-gnu': 0.12.68 + '@livekit/rtc-ffi-bindings-linux-x64-gnu': 0.12.68 + '@livekit/rtc-ffi-bindings-win32-x64-msvc': 0.12.68 '@livekit/typed-emitter@3.0.0': {}