From 8f0a80a8b9c37aa15bb1ff85043c7778cbea9c84 Mon Sep 17 00:00:00 2001 From: Filip Kojro Date: Mon, 26 Oct 2026 18:49:46 +0100 Subject: [PATCH] better delta --- client/src/audio_streams.rs | 46 +++++++++++++++++++------------------ 1 file changed, 24 insertions(+), 22 deletions(-) diff --git a/client/src/audio_streams.rs b/client/src/audio_streams.rs index 68069f6..67cc28f 100644 --- a/client/src/audio_streams.rs +++ b/client/src/audio_streams.rs @@ -258,7 +258,7 @@ pub async fn audio_stream_receiver( loop { match udp_socket.recv_from(&mut receive_buffer).await { Ok((len, _)) => { - if len < 5 { + if len < 6 { continue; } @@ -290,27 +290,10 @@ pub async fn audio_stream_receiver( last_frame_number.insert((client_id, stream_id), last_frame); } - let last_frame = last_frame_number.get(&(client_id, stream_id)).unwrap(); + let frame_delta = + (frame_number - last_frame_number.get(&(client_id, stream_id)).unwrap()).0; - if last_frame + Wrapping(1) == frame_number { - decode_sample( - client_id, - stream_id, - stream_info, - output_device_config, - &mut active_input_audio_streams_decoders, - &mut active_input_audio_streams_resamplers, - &mut active_input_audio_streams_producers, - &mut active_input_audio_streams_consumers.clone(), - audio_packet, - &mut decoded_samples, - &mut resampled_samples, - &mut decoded_samples_converted, - ropus::DecodeMode::Normal, - ); - - last_frame_number.insert((client_id, stream_id), frame_number); - } else if last_frame + Wrapping(2) <= frame_number { + if frame_delta == 2 { decode_sample( client_id, stream_id, @@ -341,8 +324,25 @@ pub async fn audio_stream_receiver( &mut decoded_samples_converted, ropus::DecodeMode::Normal, ); - last_frame_number.insert((client_id, stream_id), frame_number); + } else { + decode_sample( + client_id, + stream_id, + stream_info, + output_device_config, + &mut active_input_audio_streams_decoders, + &mut active_input_audio_streams_resamplers, + &mut active_input_audio_streams_producers, + &mut active_input_audio_streams_consumers.clone(), + audio_packet, + &mut decoded_samples, + &mut resampled_samples, + &mut decoded_samples_converted, + ropus::DecodeMode::Normal, + ); } + + last_frame_number.insert((client_id, stream_id), frame_number); } Err(e) => eprintln!("failed to receive udp packet: {}", e), } @@ -488,6 +488,8 @@ pub async fn audio_stream_spawner( let mut opus_encoder = Encoder::builder(SAMPLE_RATE_48K, encoder_channels, ropus::Application::Voip) + .inband_fec(ropus::InbandFec::Enabled) + .packet_loss_perc(10) .build() .unwrap();