diff --git a/src/include/switch_types.h b/src/include/switch_types.h index 5a8d49ab41..51ed3587e5 100644 --- a/src/include/switch_types.h +++ b/src/include/switch_types.h @@ -1203,7 +1203,8 @@ typedef enum { SFF_PROXY_PACKET = (1 << 5), SFF_DYNAMIC = (1 << 6), SFF_ZRTP = (1 << 7), - SFF_UDPTL_PACKET = (1 << 8) + SFF_UDPTL_PACKET = (1 << 8), + SFF_NOT_AUDIO = (1 << 9) } switch_frame_flag_enum_t; typedef uint32_t switch_frame_flag_t; diff --git a/src/switch_core_io.c b/src/switch_core_io.c index c2b8c4608f..587218339a 100644 --- a/src/switch_core_io.c +++ b/src/switch_core_io.c @@ -265,6 +265,13 @@ SWITCH_DECLARE(switch_status_t) switch_core_session_read_frame(switch_core_sessi do_bugs = 1; need_codec = 1; } + + if (((*frame)->flags & SFF_NOT_AUDIO)) { + do_resample = 0; + do_bugs = 0; + need_codec = 0; + } + if (switch_test_flag(session, SSF_READ_TRANSCODE) && !need_codec && switch_core_codec_ready(session->read_codec)) { switch_core_session_t *other_session; @@ -792,6 +799,13 @@ SWITCH_DECLARE(switch_status_t) switch_core_session_write_frame(switch_core_sess do_resample = TRUE; } + + if ((frame->flags & SFF_NOT_AUDIO)) { + do_resample = 0; + do_bugs = 0; + need_codec = 0; + } + if (switch_test_flag(session, SSF_WRITE_TRANSCODE) && !need_codec && switch_core_codec_ready(session->write_codec)) { switch_core_session_t *other_session; const char *uuid = switch_channel_get_variable(switch_core_session_get_channel(session), SWITCH_SIGNAL_BOND_VARIABLE); diff --git a/src/switch_rtp.c b/src/switch_rtp.c index 1fbe5aeebe..6d6c59b84b 100644 --- a/src/switch_rtp.c +++ b/src/switch_rtp.c @@ -3131,6 +3131,11 @@ static int rtp_common_read(switch_rtp_t *rtp_session, switch_payload_t *payload_ } } + if (((rtp_session->cng_pt && rtp_session->recv_msg.header.pt == rtp_session->cng_pt) || rtp_session->recv_msg.header.pt == 13)) { + *flags |= SFF_NOT_AUDIO; + } + + /* ignore packets not meant for us unless the auto-adjust window is open */ if (bytes) { if (switch_test_flag(rtp_session, SWITCH_RTP_FLAG_AUTOADJ)) {