From 67f00fe5a1f5074a203975b0260a9900c4ac80c2 Mon Sep 17 00:00:00 2001 From: David Chen Date: Thu, 4 Sep 2025 16:54:38 -0700 Subject: [PATCH 1/3] add preconnect buffer option to ffi room proto --- livekit-ffi/protocol/room.proto | 1 + 1 file changed, 1 insertion(+) diff --git a/livekit-ffi/protocol/room.proto b/livekit-ffi/protocol/room.proto index 94203d096..f1f1da372 100644 --- a/livekit-ffi/protocol/room.proto +++ b/livekit-ffi/protocol/room.proto @@ -261,6 +261,7 @@ message TrackPublishOptions { optional bool simulcast = 6; optional TrackSource source = 7; optional string stream = 8; + optional bool preconnect_buffer = 9; } enum IceTransportType { From 7eb5488542aab11240c7de0234cc1004e7a91ef7 Mon Sep 17 00:00:00 2001 From: David Chen Date: Thu, 4 Sep 2025 17:11:15 -0700 Subject: [PATCH 2/3] set AudioTrackFeatures on AddTrackRequest --- livekit-ffi/src/livekit.proto.rs | 2 ++ livekit/src/room/options.rs | 2 ++ livekit/src/room/participant/local_participant.rs | 4 ++++ 3 files changed, 8 insertions(+) diff --git a/livekit-ffi/src/livekit.proto.rs b/livekit-ffi/src/livekit.proto.rs index 410c07b92..48bf8dda6 100644 --- a/livekit-ffi/src/livekit.proto.rs +++ b/livekit-ffi/src/livekit.proto.rs @@ -3256,6 +3256,8 @@ pub struct TrackPublishOptions { pub source: ::core::option::Option, #[prost(string, optional, tag="8")] pub stream: ::core::option::Option<::prost::alloc::string::String>, + #[prost(bool, optional, tag="9")] + pub preconnect_buffer: ::core::option::Option, } #[allow(clippy::derive_partial_eq_without_eq)] #[derive(Clone, PartialEq, ::prost::Message)] diff --git a/livekit/src/room/options.rs b/livekit/src/room/options.rs index e17ac2145..8188e7422 100644 --- a/livekit/src/room/options.rs +++ b/livekit/src/room/options.rs @@ -85,6 +85,7 @@ pub struct TrackPublishOptions { // pub name: String, pub source: TrackSource, pub stream: String, + pub preconnect_buffer: bool, } impl Default for TrackPublishOptions { @@ -98,6 +99,7 @@ impl Default for TrackPublishOptions { simulcast: true, source: TrackSource::Unknown, stream: "".to_string(), + preconnect_buffer: false, } } } diff --git a/livekit/src/room/participant/local_participant.rs b/livekit/src/room/participant/local_participant.rs index f4a12d627..edeac969b 100644 --- a/livekit/src/room/participant/local_participant.rs +++ b/livekit/src/room/participant/local_participant.rs @@ -245,6 +245,10 @@ impl LocalParticipant { ..Default::default() }; + if options.preconnect_buffer { + req.audio_features.push(proto::AudioTrackFeature::TfPreconnectBuffer as i32); + } + let mut encodings = Vec::default(); match &track { LocalTrack::Video(video_track) => { From 22fb50f73236a2253c1ec9e297c0bbd4b5c393d8 Mon Sep 17 00:00:00 2001 From: David Chen Date: Thu, 4 Sep 2025 17:30:15 -0700 Subject: [PATCH 3/3] add preconect to conversion from proto to TrackPublishOptions --- livekit-ffi/src/conversion/room.rs | 3 +++ 1 file changed, 3 insertions(+) diff --git a/livekit-ffi/src/conversion/room.rs b/livekit-ffi/src/conversion/room.rs index 81772aa7f..b5001649e 100644 --- a/livekit-ffi/src/conversion/room.rs +++ b/livekit-ffi/src/conversion/room.rs @@ -232,6 +232,9 @@ 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), + preconnect_buffer: opts + .preconnect_buffer + .unwrap_or(default_publish_options.preconnect_buffer), } } }