From 7fc5d9a7c36337b15a5c7044bdaecdc82d95d94b Mon Sep 17 00:00:00 2001 From: Dragos Oancea Date: Wed, 31 Mar 2021 13:49:59 +0000 Subject: [PATCH] [core] RTP: handle flush for incoming stream with DTX or packet loss. --- src/switch_rtp.c | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/switch_rtp.c b/src/switch_rtp.c index d75219c6cf..e879436206 100644 --- a/src/switch_rtp.c +++ b/src/switch_rtp.c @@ -390,6 +390,7 @@ struct switch_rtp { //uint32_t last_clock_ts; uint32_t last_write_ts; uint32_t last_read_ts; + uint32_t prev_read_ts; uint32_t last_cng_ts; uint32_t last_write_samplecount; uint32_t delay_samples; @@ -6413,6 +6414,7 @@ static switch_status_t read_rtp_packet(switch_rtp_t *rtp_session, switch_size_t } if (ts) { + rtp_session->prev_read_ts = rtp_session->last_read_ts; rtp_session->last_read_ts = ts; } @@ -6488,7 +6490,8 @@ static switch_status_t read_rtp_packet(switch_rtp_t *rtp_session, switch_size_t } } else { if (rtp_session->last_rtp_hdr.m && rtp_session->last_rtp_hdr.pt != rtp_session->recv_te && - !rtp_session->flags[SWITCH_RTP_FLAG_VIDEO] && !(rtp_session->rtp_bugs & RTP_BUG_IGNORE_MARK_BIT)) { + !rtp_session->flags[SWITCH_RTP_FLAG_VIDEO] && !(rtp_session->rtp_bugs & RTP_BUG_IGNORE_MARK_BIT) && + rtp_session->last_read_ts - rtp_session->prev_read_ts < rtp_session->samples_per_interval * 3) { switch_rtp_set_flag(rtp_session, SWITCH_RTP_FLAG_FLUSH); } else if (rtp_session->last_jb_read_ssrc && rtp_session->last_jb_read_ssrc != read_ssrc) { switch_rtp_set_flag(rtp_session, SWITCH_RTP_FLAG_FLUSH);