diff options
Diffstat (limited to 'pjmedia/src/pjmedia/stream.c')
-rw-r--r-- | pjmedia/src/pjmedia/stream.c | 22 |
1 files changed, 15 insertions, 7 deletions
diff --git a/pjmedia/src/pjmedia/stream.c b/pjmedia/src/pjmedia/stream.c index d4496612..a7690c56 100644 --- a/pjmedia/src/pjmedia/stream.c +++ b/pjmedia/src/pjmedia/stream.c @@ -960,16 +960,11 @@ static void on_rx_rtp( void *data, if (channel->paused) return; - /* Handle incoming DTMF. */ - if (hdr->pt == stream->rx_event_pt) { - handle_incoming_dtmf(stream, payload, payloadlen); - return; - } - /* Update RTP session (also checks if RTP session can accept * the incoming packet. */ - pjmedia_rtp_session_update(&channel->rtp, hdr, &seq_st); + pjmedia_rtp_session_update2(&channel->rtp, hdr, &seq_st, + hdr->pt != stream->rx_event_pt); if (seq_st.status.value) { TRC_ ((stream->port.info.name.ptr, "RTP status: badpt=%d, badssrc=%d, dup=%d, " @@ -996,6 +991,19 @@ static void on_rx_rtp( void *data, if (payloadlen == 0) return; + /* Handle incoming DTMF. */ + if (hdr->pt == stream->rx_event_pt) { + /* Ignore out-of-order packet as it will be detected as new + * digit. Also ignore duplicate packet as it serves no use. + */ + if (seq_st.status.flag.outorder || seq_st.status.flag.dup) { + return; + } + + handle_incoming_dtmf(stream, payload, payloadlen); + return; + } + /* Put "good" packet to jitter buffer, or reset the jitter buffer * when RTP session is restarted. */ |