Sam Machin 865068f158 add new CODEC_TRANSCODE option (#225)
* add new CODEC_TRANSCODE option

allows RTP engine to add additional codecs to the outgoing offer that wern't in the invite from Freeswitch so RTP engine will transcode outbound calls.

* update README for new env var descriptions

---------

Co-authored-by: Dave Horton <daveh@beachdognet.com>
2026-05-01 08:43:13 -04:00
2024-07-24 15:27:01 -04:00
2022-01-06 12:37:04 -05:00
2025-08-03 19:44:31 -04:00
2026-05-01 08:43:13 -04:00
2026-01-22 11:47:02 -05:00
2025-11-04 18:02:31 -05:00
2025-10-21 07:52:29 -04:00
2026-04-13 21:24:42 -04:00

sbc-outbound Build Status

This application provides a part of the SBC (Session Border Controller) functionality of jambonz platfrom. It handles outbound INVITE requests from the cpaas application server that is going to carrier sip trunks or registered sip users/devices, including webrtc applications.

Configuration

Configuration is provided via environment variables:

variable meaning required?
DRACHTIO_HOST ip address of drachtio server (typically '127.0.0.1') yes
DRACHTIO_PORT listening port of drachtio server for control connections (typically 9022) yes
DRACHTIO_SECRET shared secret yes
HTTP_PORT tcp port listen port no
JAMBONES_LOGLEVEL log level for application, 'info' or 'debug' no
JAMBONES_MYSQL_HOST mysql host yes
JAMBONES_MYSQL_PORT mysql port no
JAMBONES_MYSQL_USER mysql username yes
JAMBONES_MYSQL_PASSWORD mysql password yes
JAMBONES_MYSQL_DATABASE mysql data yes
JAMBONES_MYSQL_CONNECTION_LIMIT mysql connection limit no
DTMF_LISTEN_PORT DTMF listening port no
JAMBONES_NG_PROTOCOL rtpengine NG protocol no
RTPENGINE_PORT rtpengine port no
JAMBONES_CLUSTER_ID cluster id no
JAMBONES_NETWORK_CIDR CIDR of private network that feature server is running in (e.g. '172.31.0.0/16') yes
JAMBONES_REDIS_HOST redis host yes
JAMBONES_REDIS_PORT redis port no
JAMBONES_RTPENGINES commans-separated list of ip:ng-port for rtpengines (e.g. '172.31.32.10:22222') yes
JAMBONES_TIME_SERIES_HOST influxdb host yes
JAMBONES_RECORD_ALL_CALLS enable auto record calls no
JAMBONES_CODEC_OFFER_WITH_ORDER comma-separated codec list to use as the outbound offer toward the carrier; the original codecs from the feature server are stripped first (e.g. 'opus,PCMU,PCMA,telephone-event') no
JAMBONES_CODEC_TRANSCODE comma-separated codec list that rtpengine should add to the outbound offer and transcode on the fly when the carrier selects them — used to support codecs the feature server does not speak (e.g. 'AMR-WB/16000'). Requires an rtpengine build that includes the corresponding codec module. no
JAMBONES_ACCEPT_AND_TRANSCODE comma-separated codec list to accept on the outbound leg and transcode to PCMU/PCMA toward the feature server no
JAMBONES_ACCEPT_G729 if set, accept G.729 on the outbound leg and transcode to PCMU/PCMA (shorthand for JAMBONES_ACCEPT_AND_TRANSCODE=g729) no
K8S service running as kubernetes service no
K8S_RTPENGINE_SERVICE_NAME rtpengine service name(required for K8S) no

Codec transcoding notes

JAMBONES_CODEC_OFFER_WITH_ORDER and JAMBONES_CODEC_TRANSCODE can be combined. When both are set, rtpengine first strips the original codecs from the SDP, then adds the codecs listed in JAMBONES_CODEC_OFFER_WITH_ORDER to the offer, and finally adds the codecs from JAMBONES_CODEC_TRANSCODE with transcoding enabled. When only JAMBONES_CODEC_TRANSCODE is set, the original codecs from the feature server are kept in the offer and the transcode codecs are appended.

Codecs that require licensed or optional rtpengine modules (AMR, AMR-WB, G.729, etc.) only work if rtpengine was compiled with support for them. Carrier-specific fmtp parameters (for example, octet-align=1 for AMR-WB) can be appended to the codec name as needed (e.g. AMR-WB/16000;octet-align=1).

running under pm2

Typically, this application runs under pm2 using an ecosystem.config.js file similar to this:

module.exports = {
  apps : [
  {
    name: 'sbc-outbound',
    cwd: '/home/admin/apps/sbc-outbound',
    script: 'app.js',
    instance_var: 'INSTANCE_ID',
    out_file: '/home/admin/.pm2/logs/jambonz-sbc-outbound.log',
    err_file: '/home/admin/.pm2/logs/jambonz-sbc-outbound.log',
    exec_mode: 'fork',
    instances: 1,
    autorestart: true,
    watch: false,
    max_memory_restart: '1G',    env: {
     NODE_ENV: 'production',
      JAMBONES_LOGLEVEL: 'info',
      DRACHTIO_HOST: '127.0.0.1',
      DRACHTIO_PORT: 9022,
      DRACHTIO_SECRET: 'cymru',
      JAMBONES_RTPENGINES: '172.31.32.10:22222',
      JAMBONES_MYSQL_HOST: 'aurora-cluster-jambonz.cluster-xxxxxxxxxxxxx.us-west-1.rds.amazonaws.com',
      JAMBONES_MYSQL_USER: 'admin',
      JAMBONES_MYSQL_PASSWORD: 'JambonzR0ck$',
      JAMBONES_MYSQL_DATABASE: 'jambones',
      JAMBONES_MYSQL_CONNECTION_LIMIT: 10,
      JAMBONES_REDIS_HOST: 'jambonz.zzzzzzz.0001.usw1.cache.amazonaws.com',
      JAMBONES_REDIS_PORT: 6379,
      JAMBONES_TIME_SERIES_HOST: '172.31.32.11',
      JAMBONES_NETWORK_CIDR: '172.31.0.0/16'
    }
  }]
};

Running the test suite

To run the included test suite, you will need to have docker installed on your laptop.

npm test
S
Description
jambonz session border controller application for outbound calls
Readme MIT 5.7 MiB
Languages
JavaScript 99.6%
Dockerfile 0.3%