@@ -52,7 +52,7 @@ struct Rtx {
5252 pt : u8 ,
5353
5454 /// Queue of already sent RTP packets
55- sent_packets : VecDeque < ( RtpPacket , Instant ) > ,
55+ sent_packets : VecDeque < ( RtpPacket , Instant , u32 ) > ,
5656
5757 /// Determines how long a RTP packet is stored for retransmission before being dropped
5858 sent_packets_max_size : Duration ,
@@ -190,10 +190,10 @@ impl OutboundQueue {
190190
191191 // Store packet in sent_packets if configured
192192 if let Some ( rtx) = & mut self . rtx {
193- rtx. sent_packets . push_back ( ( rtp_packet. clone ( ) , now) ) ;
193+ rtx. sent_packets . push_back ( ( rtp_packet. clone ( ) , now, 0 ) ) ;
194194
195195 // Remove old packets
196- while let Some ( ( _, sent_at) ) = rtx. sent_packets . front ( )
196+ while let Some ( ( _, sent_at, _ ) ) = rtx. sent_packets . front ( )
197197 && now. saturating_duration_since ( * sent_at) > rtx. sent_packets_max_size
198198 {
199199 rtx. sent_packets . pop_front ( ) ;
@@ -223,12 +223,16 @@ impl OutboundQueue {
223223 } ;
224224
225225 for entry in entries {
226- if let Some ( ( rtp_packet, _) ) = rtx
226+ if let Some ( ( rtp_packet, _, sent_counter ) ) = rtx
227227 . sent_packets
228- . iter ( )
228+ . iter_mut ( )
229229 . find ( |x| x. 0 . sequence_number . 0 == entry)
230230 {
231- rtx. retransmit_queue . push_back ( rtp_packet. clone ( ) ) ;
231+ // Limit the same RTP packet to being sent 5 times
232+ if * sent_counter < 5 {
233+ * sent_counter += 1 ;
234+ rtx. retransmit_queue . push_back ( rtp_packet. clone ( ) ) ;
235+ }
232236 }
233237 }
234238 }
0 commit comments