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 { 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), } } } 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) => {