From 69620a707d6f248ed8647fa20773e0e6de3bbb75 Mon Sep 17 00:00:00 2001 From: nitesh Date: Sun, 9 Aug 2026 23:51:58 +0530 Subject: [PATCH] add option to add simuclcast layers in trackpublishoptions --- livekit-ffi/protocol/room.proto | 7 +++++++ livekit-ffi/src/conversion/room.rs | 14 ++++++++++++-- 2 files changed, 19 insertions(+), 2 deletions(-) diff --git a/livekit-ffi/protocol/room.proto b/livekit-ffi/protocol/room.proto index 6e5458871..345d318ac 100644 --- a/livekit-ffi/protocol/room.proto +++ b/livekit-ffi/protocol/room.proto @@ -305,6 +305,13 @@ message AudioEncoding { required uint64 max_bitrate = 1; } +// A video preset describing a simulcast layer. +message VideoPreset { + required uint32 width = 1; + required uint32 height = 2; + required VideoEncoding encoding = 3; +} + message TrackPublishOptions { // encodings are optional optional VideoEncoding video_encoding = 1; diff --git a/livekit-ffi/src/conversion/room.rs b/livekit-ffi/src/conversion/room.rs index a5bbb4df4..674cf434c 100644 --- a/livekit-ffi/src/conversion/room.rs +++ b/livekit-ffi/src/conversion/room.rs @@ -20,7 +20,7 @@ use livekit::{ }, options::{ AudioEncoding, DegradationPreference, FrameMetadataFeatures, TrackPublishOptions, - VideoEncoderBackend, VideoEncoding, + VideoEncoderBackend, VideoEncoding, VideoPreset, }, prelude::*, webrtc::{ @@ -354,7 +354,11 @@ impl From for TrackPublishOptions { red: opts.red.unwrap_or(default_publish_options.red), simulcast: opts.simulcast.unwrap_or(default_publish_options.simulcast), stream: opts.stream.unwrap_or(default_publish_options.stream), - simulcast_layers: default_publish_options.simulcast_layers, + simulcast_layers: if opts.simulcast_layers.is_empty() { + opts.default_publish_options.simulcast_layers + } else { + Some(opts.simulcast_layers.into_iter().map(Into::into).collect()) + }, preconnect_buffer: opts .preconnect_buffer .unwrap_or(default_publish_options.preconnect_buffer), @@ -381,6 +385,12 @@ impl From for AudioEncoding { } } +impl From for VideoPreset { + fn from(preset: proto::VideoPreset) -> Self { + Self { width: preset.width, height: preset.height, encoding: preset.encoding.into() } + } +} + #[cfg(test)] mod tests { use livekit::options::{TrackPublishOptions, VideoEncoderBackend};