diff --git a/src/switch_rtp.c b/src/switch_rtp.c index b6c52c4ae3..fc4b6a6019 100644 --- a/src/switch_rtp.c +++ b/src/switch_rtp.c @@ -1773,6 +1773,7 @@ SWITCH_DECLARE(switch_status_t) switch_rtp_add_crypto_key(switch_rtp_t *rtp_sess switch_core_session_t *session = switch_core_memory_pool_get_data(rtp_session->pool, "__session"); switch_channel_t *channel = switch_core_session_get_channel(session); switch_event_t *fsevent = NULL; + const char *var; if (direction >= SWITCH_RTP_CRYPTO_MAX || keylen > SWITCH_RTP_MAX_CRYPTO_LEN) { return SWITCH_STATUS_FALSE; @@ -1794,7 +1795,11 @@ SWITCH_DECLARE(switch_status_t) switch_rtp_add_crypto_key(switch_rtp_t *rtp_sess memset(policy, 0, sizeof(*policy)); - switch_channel_set_variable(channel, "send_silence_when_idle", "-1"); + /* many devices can't handle gaps in SRTP streams */ + if (!(var = switch_channel_get_variable(channel, "send_silence_when_idle")) + || !(atoi(var))) { + switch_channel_set_variable(channel, "send_silence_when_idle", "-1"); + } switch (crypto_key->type) { case AES_CM_128_HMAC_SHA1_80: