From 6f97db3c20c769a5c827dc8d51b79da625a3330b Mon Sep 17 00:00:00 2001 From: yeoleobun Date: Wed, 25 Feb 2026 14:22:34 +0800 Subject: [PATCH] fix recorder duration calculation --- src/media/recorder.rs | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/src/media/recorder.rs b/src/media/recorder.rs index 22a114b5..73e4e606 100644 --- a/src/media/recorder.rs +++ b/src/media/recorder.rs @@ -155,7 +155,7 @@ impl Recorder { _ => return Ok(()), }; let decoder_type = CodecType::try_from(frame.payload_type.unwrap_or(0))?; - let mut decoder_samplerate = self.sample_rate; + let decoder_clockrate = decoder_type.clock_rate(); if decoder_type != self.codec { let decoder = self @@ -163,7 +163,6 @@ impl Recorder { .entry((leg, decoder_type.payload_type())) .or_insert_with(|| create_decoder(decoder_type)); let pcm = decoder.decode(&encoded); - decoder_samplerate = decoder.sample_rate(); let resampler = self .resamplers .entry((leg, decoder_type.payload_type())) @@ -197,7 +196,7 @@ impl Recorder { .rtp_timestamp .wrapping_sub(self.base_timestamp_a.unwrap()); let scaled_relative = - (relative as u64 * self.sample_rate as u64 / decoder_samplerate as u64) as u32; + (relative as u64 * self.sample_rate as u64 / decoder_clockrate as u64) as u32; self.start_offset_a.wrapping_add(scaled_relative) } Leg::B => { @@ -215,7 +214,7 @@ impl Recorder { .rtp_timestamp .wrapping_sub(self.base_timestamp_b.unwrap()); let scaled_relative = - (relative as u64 * self.sample_rate as u64 / decoder_samplerate as u64) as u32; + (relative as u64 * self.sample_rate as u64 / decoder_clockrate as u64) as u32; self.start_offset_b.wrapping_add(scaled_relative) } };