From f0e0fba2f1b8cca12f110b24298e239405110bb5 Mon Sep 17 00:00:00 2001 From: Dave Horton Date: Wed, 17 Aug 2022 14:14:45 +0200 Subject: [PATCH] make rtpengine transcode if non-preferred codec is selected by far end --- lib/call-session.js | 16 +++++++++++++--- package-lock.json | 3 ++- package.json | 3 ++- 3 files changed, 17 insertions(+), 5 deletions(-) diff --git a/lib/call-session.js b/lib/call-session.js index 56622e7..6186560 100644 --- a/lib/call-session.js +++ b/lib/call-session.js @@ -1,4 +1,5 @@ const Emitter = require('events'); +const sdpTransform = require('sdp-transform'); const SrsClient = require('@jambonz/siprec-client-utils'); const {makeRtpEngineOpts, makeCallCountKey} = require('./utils'); const {forwardInDialogRequests} = require('drachtio-fn-b2b-sugar'); @@ -49,6 +50,15 @@ const initCdr = (srf, req) => { }; }; +const updateRtpEngineFlags = (sdp, opts) => { + try { + const parsed = sdpTransform.parse(sdp); + const codec = parsed.media[0].rtp[0].codec; + if (['PCMU', 'PCMA'].includes(codec)) opts.flags.push(`codec-accept-${codec}`); + } catch (err) {} + return opts; +}; + class CallSession extends Emitter { constructor(logger, req, res) { super(); @@ -236,16 +246,16 @@ class CallSession extends Emitter { } // rtpengine 'offer' - const opts = { + const opts = updateRtpEngineFlags(this.req.body, { ...this.rtpEngineOpts.common, ...this.rtpEngineOpts.uac.mediaOpts, 'from-tag': this.rtpEngineOpts.uas.tag, direction: ['private', 'public'], sdp: this.req.body - }; + }); const response = await this.offer(opts); debug(`response from rtpengine to offer ${JSON.stringify(response)}`); - this.logger.debug({offer: opts, response}, 'initial offer to rtpengine'); + this.logger.info({offer: opts, response}, 'initial offer to rtpengine'); if ('ok' !== response.result) { this.logger.error(`rtpengine offer failed with ${JSON.stringify(response)}`); throw new Error('rtpengine failed: answer'); diff --git a/package-lock.json b/package-lock.json index 19eb8c7..a6e83ad 100644 --- a/package-lock.json +++ b/package-lock.json @@ -22,7 +22,8 @@ "drachtio-fn-b2b-sugar": "^0.0.12", "drachtio-srf": "^4.5.1", "express": "^4.18.1", - "pino": "^7.11.0" + "pino": "^7.11.0", + "sdp-transform": "^2.14.1" }, "devDependencies": { "bent": "^7.3.12", diff --git a/package.json b/package.json index 7273c13..dbd5429 100644 --- a/package.json +++ b/package.json @@ -40,7 +40,8 @@ "drachtio-fn-b2b-sugar": "^0.0.12", "drachtio-srf": "^4.5.1", "express": "^4.18.1", - "pino": "^7.11.0" + "pino": "^7.11.0", + "sdp-transform": "^2.14.1" }, "devDependencies": { "bent": "^7.3.12",