]> git.ipfire.org Git - thirdparty/freeswitch.git/commitdiff
[core] RTP: handle flush for incoming stream with DTX or packet loss.
authorDragos Oancea <dragos@signalwire.com>
Wed, 31 Mar 2021 13:49:59 +0000 (13:49 +0000)
committerAndrey Volk <andywolk@gmail.com>
Thu, 15 Apr 2021 13:37:08 +0000 (16:37 +0300)
src/switch_rtp.c

index d75219c6cf79a096ea4a10959698f770b71d9caf..e879436206084340992949c13e947bbb55a2edde 100644 (file)
@@ -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);