Compare commits

...

2 Commits

Author SHA1 Message Date
Dave Horton
8613e65e23 send_silence_when_idle only after call is answered or bridged 2025-01-09 20:26:14 -05:00
Dave Horton
f3690ef5ce fix for #1027 2025-01-09 16:06:01 -05:00
3 changed files with 17 additions and 6 deletions

View File

@@ -2814,14 +2814,15 @@ Duration=${duration} `
}
}
_configMsEndpoint() {
_configMsEndpoint(sendSilenceOnIdle = true) {
this._enableInbandDtmfIfRequired(this.ep);
this.ep.once('destroy', this._handleMediaTimeout.bind(this));
const opts = {
...(this.onHoldMusic && {holdMusic: `shout://${this.onHoldMusic.replace(/^https?:\/\//, '')}`}),
...(JAMBONES_USE_FREESWITCH_TIMER_FD && {timer_name: 'timerfd'}),
...(JAMBONES_MEDIA_TIMEOUT_MS && {media_timeout: JAMBONES_MEDIA_TIMEOUT_MS}),
...(JAMBONES_MEDIA_HOLD_TIMEOUT_MS && {media_hold_timeout: JAMBONES_MEDIA_HOLD_TIMEOUT_MS})
...(JAMBONES_MEDIA_HOLD_TIMEOUT_MS && {media_hold_timeout: JAMBONES_MEDIA_HOLD_TIMEOUT_MS}),
...(sendSilenceOnIdle && {send_silence_when_idle: -1})
};
if (Object.keys(opts).length > 0) {
this.ep.set(opts);

View File

@@ -748,6 +748,12 @@ class TaskDial extends Task {
if (this.epOther) {
this.epOther.api('uuid_break', this.epOther.uuid);
this.epOther.bridge(sd.ep);
/**
* wait until the endpoints are bridged before apply the send_silence_when_idle
* audiocodes webrtc client somehow inserts massive latency if we send silence
* and then bridge A and B.
*/
}
this.bridged = true;
}
@@ -837,6 +843,9 @@ class TaskDial extends Task {
this.timerMaxCallDuration = setTimeout(this._onMaxCallDuration.bind(this, cs), this.timeLimit * 1000);
}
sessionTracker.add(this.callSid, cs);
this.ep?.set({send_silence_when_idle: -1});
this.dlg.on('destroy', () => {
/* if our child is adulting, he's own his own now.. */
if (this.dlg) {

View File

@@ -138,7 +138,7 @@ class SingleDialer extends Emitter {
this.serviceUrl = srf.locals.serviceUrl;
this.ep = await ms.createEndpoint();
this._configMsEndpoint();
this._configMsEndpoint(false);
this.logger.debug(`SingleDialer:exec - created endpoint ${this.ep.uuid}`);
/**
@@ -339,12 +339,13 @@ class SingleDialer extends Emitter {
}
}
_configMsEndpoint() {
_configMsEndpoint(sendSilenceOnIdle = true) {
const opts = {
...(this.onHoldMusic && {holdMusic: `shout://${this.onHoldMusic.replace(/^https?:\/\//, '')}`}),
...(JAMBONES_USE_FREESWITCH_TIMER_FD && {timer_name: 'timerfd'}),
...(JAMBONES_MEDIA_TIMEOUT_MS && {media_timeout: JAMBONES_MEDIA_TIMEOUT_MS}),
...(JAMBONES_MEDIA_HOLD_TIMEOUT_MS && {media_hold_timeout: JAMBONES_MEDIA_HOLD_TIMEOUT_MS})
...(JAMBONES_MEDIA_HOLD_TIMEOUT_MS && {media_hold_timeout: JAMBONES_MEDIA_HOLD_TIMEOUT_MS}),
...(sendSilenceOnIdle && {send_silence_when_idle: -1})
};
if (Object.keys(opts).length > 0) {
this.ep.set(opts);
@@ -495,7 +496,7 @@ class SingleDialer extends Emitter {
this.logger.debug('SingleDialer:reAnchorMedia: re-anchoring media after partial media');
this.ep = await this.ms.createEndpoint({remoteSdp: this.dlg.remote.sdp});
this._configMsEndpoint();
this._configMsEndpoint(false);
await this.dlg.modify(this.ep.local.sdp, {
headers: {
'X-Reason': 'anchor-media'