mirror of
https://github.com/signalwire/freeswitch.git
synced 2025-06-04 20:26:01 +00:00
change codec negotiation for edge opus cases
This commit is contained in:
parent
6f4ed12213
commit
6600b0fae0
@ -804,6 +804,7 @@ struct private_object {
|
|||||||
switch_port_t stun_port;
|
switch_port_t stun_port;
|
||||||
uint32_t stun_flags;
|
uint32_t stun_flags;
|
||||||
unsigned long rm_rate;
|
unsigned long rm_rate;
|
||||||
|
unsigned long adv_rm_rate;
|
||||||
switch_payload_t pt;
|
switch_payload_t pt;
|
||||||
switch_mutex_t *flag_mutex;
|
switch_mutex_t *flag_mutex;
|
||||||
switch_mutex_t *sofia_mutex;
|
switch_mutex_t *sofia_mutex;
|
||||||
|
@ -545,7 +545,7 @@ void sofia_glue_set_local_sdp(private_object_t *tech_pvt, const char *ip, switch
|
|||||||
|
|
||||||
switch_snprintf(buf + strlen(buf), SDPBUFLEN - strlen(buf), "\n");
|
switch_snprintf(buf + strlen(buf), SDPBUFLEN - strlen(buf), "\n");
|
||||||
|
|
||||||
rate = tech_pvt->rm_rate;
|
rate = tech_pvt->adv_rm_rate;
|
||||||
|
|
||||||
if (tech_pvt->adv_channels > 1) {
|
if (tech_pvt->adv_channels > 1) {
|
||||||
switch_snprintf(buf + strlen(buf), SDPBUFLEN - strlen(buf), "a=rtpmap:%d %s/%d/%d\n",
|
switch_snprintf(buf + strlen(buf), SDPBUFLEN - strlen(buf), "a=rtpmap:%d %s/%d/%d\n",
|
||||||
@ -1755,6 +1755,7 @@ void sofia_glue_tech_patch_sdp(private_object_t *tech_pvt)
|
|||||||
}
|
}
|
||||||
tech_pvt->iananame = switch_core_session_strdup(tech_pvt->session, "PROXY");
|
tech_pvt->iananame = switch_core_session_strdup(tech_pvt->session, "PROXY");
|
||||||
tech_pvt->rm_rate = 8000;
|
tech_pvt->rm_rate = 8000;
|
||||||
|
tech_pvt->adv_rm_rate = 8000;
|
||||||
tech_pvt->codec_ms = 20;
|
tech_pvt->codec_ms = 20;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -4666,6 +4667,7 @@ void sofia_glue_proxy_codec(switch_core_session_t *session, const char *r_sdp)
|
|||||||
for (map = m->m_rtpmaps; map; map = map->rm_next) {
|
for (map = m->m_rtpmaps; map; map = map->rm_next) {
|
||||||
tech_pvt->iananame = switch_core_session_strdup(tech_pvt->session, map->rm_encoding);
|
tech_pvt->iananame = switch_core_session_strdup(tech_pvt->session, map->rm_encoding);
|
||||||
tech_pvt->rm_rate = map->rm_rate;
|
tech_pvt->rm_rate = map->rm_rate;
|
||||||
|
tech_pvt->adv_rm_rate = map->rm_rate;
|
||||||
tech_pvt->codec_ms = ptime;
|
tech_pvt->codec_ms = ptime;
|
||||||
sofia_glue_tech_set_codec(tech_pvt, 0);
|
sofia_glue_tech_set_codec(tech_pvt, 0);
|
||||||
break;
|
break;
|
||||||
@ -4750,7 +4752,7 @@ uint8_t sofia_glue_negotiate_sdp(switch_core_session_t *session, const char *r_s
|
|||||||
int reneg = 1;
|
int reneg = 1;
|
||||||
const switch_codec_implementation_t **codec_array;
|
const switch_codec_implementation_t **codec_array;
|
||||||
int total_codecs;
|
int total_codecs;
|
||||||
|
char *samp = NULL;
|
||||||
|
|
||||||
codec_array = tech_pvt->codecs;
|
codec_array = tech_pvt->codecs;
|
||||||
total_codecs = tech_pvt->num_codecs;
|
total_codecs = tech_pvt->num_codecs;
|
||||||
@ -5273,6 +5275,20 @@ uint8_t sofia_glue_negotiate_sdp(switch_core_session_t *session, const char *r_s
|
|||||||
match = 0;
|
match = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (!zstr(map->rm_fmtp)) {
|
||||||
|
samp = strstr(map->rm_fmtp, "samplerate=");
|
||||||
|
}
|
||||||
|
if (!strcasecmp(map->rm_encoding, "opus") && !strcasecmp(rm_encoding, imp->iananame) && samp) {
|
||||||
|
char *rate_str = samp + 11;
|
||||||
|
|
||||||
|
if (rate_str && *rate_str) {
|
||||||
|
near_rate = atoi(rate_str);
|
||||||
|
near_match = imp;
|
||||||
|
match = 0;
|
||||||
|
goto near_match;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if (match) {
|
if (match) {
|
||||||
if (scrooge) {
|
if (scrooge) {
|
||||||
switch_log_printf(SWITCH_CHANNEL_SESSION_LOG(session), SWITCH_LOG_DEBUG,
|
switch_log_printf(SWITCH_CHANNEL_SESSION_LOG(session), SWITCH_LOG_DEBUG,
|
||||||
@ -5291,6 +5307,8 @@ uint8_t sofia_glue_negotiate_sdp(switch_core_session_t *session, const char *r_s
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
near_match:
|
||||||
|
|
||||||
if (!match && near_match) {
|
if (!match && near_match) {
|
||||||
const switch_codec_implementation_t *search[1];
|
const switch_codec_implementation_t *search[1];
|
||||||
char *prefs[1];
|
char *prefs[1];
|
||||||
@ -5302,7 +5320,7 @@ uint8_t sofia_glue_negotiate_sdp(switch_core_session_t *session, const char *r_s
|
|||||||
|
|
||||||
prefs[0] = tmp;
|
prefs[0] = tmp;
|
||||||
num = switch_loadable_module_get_codecs_sorted(search, 1, prefs, 1);
|
num = switch_loadable_module_get_codecs_sorted(search, 1, prefs, 1);
|
||||||
|
|
||||||
if (num) {
|
if (num) {
|
||||||
mimp = search[0];
|
mimp = search[0];
|
||||||
} else {
|
} else {
|
||||||
@ -5333,6 +5351,10 @@ uint8_t sofia_glue_negotiate_sdp(switch_core_session_t *session, const char *r_s
|
|||||||
tech_pvt->iananame = switch_core_session_strdup(session, (char *) mimp->iananame);
|
tech_pvt->iananame = switch_core_session_strdup(session, (char *) mimp->iananame);
|
||||||
tech_pvt->pt = (switch_payload_t) map->rm_pt;
|
tech_pvt->pt = (switch_payload_t) map->rm_pt;
|
||||||
tech_pvt->rm_rate = mimp->samples_per_second;
|
tech_pvt->rm_rate = mimp->samples_per_second;
|
||||||
|
tech_pvt->adv_rm_rate = mimp->samples_per_second;
|
||||||
|
if (strcasecmp(mimp->iananame, "g722")) {
|
||||||
|
tech_pvt->rm_rate = mimp->actual_samples_per_second;
|
||||||
|
}
|
||||||
tech_pvt->codec_ms = mimp->microseconds_per_packet / 1000;
|
tech_pvt->codec_ms = mimp->microseconds_per_packet / 1000;
|
||||||
tech_pvt->bitrate = mimp->bits_per_second;
|
tech_pvt->bitrate = mimp->bits_per_second;
|
||||||
tech_pvt->remote_sdp_audio_ip = switch_core_session_strdup(session, (char *) connection->c_address);
|
tech_pvt->remote_sdp_audio_ip = switch_core_session_strdup(session, (char *) connection->c_address);
|
||||||
@ -6131,6 +6153,7 @@ int sofia_recover_callback(switch_core_session_t *session)
|
|||||||
|
|
||||||
if ((tmp = switch_channel_get_variable(channel, "sip_use_codec_rate"))) {
|
if ((tmp = switch_channel_get_variable(channel, "sip_use_codec_rate"))) {
|
||||||
tech_pvt->rm_rate = atoi(tmp);
|
tech_pvt->rm_rate = atoi(tmp);
|
||||||
|
tech_pvt->adv_rm_rate = tech_pvt->rm_rate;
|
||||||
}
|
}
|
||||||
|
|
||||||
if ((tmp = switch_channel_get_variable(channel, "sip_use_codec_ptime"))) {
|
if ((tmp = switch_channel_get_variable(channel, "sip_use_codec_ptime"))) {
|
||||||
|
Loading…
x
Reference in New Issue
Block a user