fix ptime from known broken endpoints on re-invite

Freeswitch tries to fix timing issues (wrong ptime) on re-invite the same way
it does for the initial invite. This results in small audio glitches, while it
sends a couple of packets with different ptime, before the timing detection
logic figures out the remote (broken) endpoint true ptime.

In order to avoid unnecessary timing changes, this patch overwrites the
advertised ptime from known broken endpoints with the ptime, which was detected
by freeswitch. It does this by checking if the sip_h_X-Broken-PTIME (1.2.x) or
rtp_h_X-Broken-PTIME (master) variables are set.

FS-6644 #resolve
This commit is contained in:
Hristo Trendev 2014-09-30 11:11:27 +02:00
parent 310f18982f
commit fbe857e6fa
1 changed files with 5 additions and 0 deletions

View File

@ -3419,6 +3419,11 @@ SWITCH_DECLARE(uint8_t) switch_core_media_negotiate_sdp(switch_core_session_t *s
codec_ms = ptime;
if (switch_channel_get_variable(session->channel, "rtp_h_X-Broken-PTIME") && a_engine->read_impl.microseconds_per_packet) {
switch_log_printf(SWITCH_CHANNEL_SESSION_LOG(session), SWITCH_LOG_DEBUG, "Overwriting ptime from a known broken endpoint with the currently used value of %d ms\n", a_engine->read_impl.microseconds_per_packet / 1000);
codec_ms = a_engine->read_impl.microseconds_per_packet / 1000;
}
if (maxptime && (!codec_ms || codec_ms > maxptime)) {
codec_ms = maxptime;
}