Documentation

Documentation.Tutorials-SangomaVoiceTranscoding History

Hide minor edits - Show changes to markup

August 05, 2013, at 04:57 PM by 109.99.235.212 -
Changed line 10 from:

This tutorial illustrates the required steps in order to perform audio transcoding with the D-series cards manufactured by Sangoma, using the sngtc_server daemon and the OpenSIPS sngtc module as its client. The latest version of the transcoding library, as of 1 August 2013 is: sng-tc-linux-1.3.4.1.x86_64.tgz

to:

This tutorial illustrates the required steps in order to perform audio transcoding with the D-series cards manufactured by Sangoma, using the sngtc_server daemon and the OpenSIPS sngtc module as its client. The latest version of the transcoding library, as of 1 August 2013 is: sng-tc-linux-1.3.4.1

August 05, 2013, at 04:09 PM by 109.99.235.212 -
Deleted lines 4-5:

(:allVersions Tutorials-SangomaVoiceTranscoding 1.11 :)

August 05, 2013, at 04:09 PM by 109.99.235.212 -
Added lines 8-9:

http://www.opensips.org/images/tc-setup.png

Deleted lines 16-17:

http://www.opensips.org/images/tc-setup.png

August 05, 2013, at 02:07 PM by razvancrainea -
Changed line 6 from:

(:versionLine Tutorials-SangomaVoiceTranscoding 1.11 :)

to:

(:allVersions Tutorials-SangomaVoiceTranscoding 1.11 :)

August 05, 2013, at 11:29 AM by 109.99.235.212 -
Changed line 6 from:

(:versionLine http://www.yahoo.com border=3 scroll=yes:)

to:

(:versionLine Tutorials-SangomaVoiceTranscoding 1.11 :)

August 05, 2013, at 11:12 AM by 109.99.235.212 -
Changed line 6 from:

(:includeHTML http://www.yahoo.com border=3 scroll=yes:)

to:

(:versionLine http://www.yahoo.com border=3 scroll=yes:)

August 05, 2013, at 11:12 AM by 109.99.235.212 -
Changed line 6 from:

(:versionLine http://www.yahoo.com border=3 scroll=yes:)

to:

(:includeHTML http://www.yahoo.com border=3 scroll=yes:)

August 05, 2013, at 11:05 AM by 109.99.235.212 -
Changed line 6 from:

(:includeHTMLxc http://www.yahoo.com border=3 scroll=yes:)

to:

(:versionLine http://www.yahoo.com border=3 scroll=yes:)

August 05, 2013, at 11:04 AM by 109.99.235.212 -
Changed line 6 from:

(:includeHTML http://www.yahoo.com border=3 scroll=yes:)

to:

(:includeHTMLxc http://www.yahoo.com border=3 scroll=yes:)

August 05, 2013, at 11:03 AM by 109.99.235.212 -
August 05, 2013, at 10:59 AM by 109.99.235.212 -
Added lines 5-6:

(:includeHTML http://www.yahoo.com border=3 scroll=yes:)

August 01, 2013, at 05:59 PM by 109.99.235.212 -
Changed line 8 from:

This tutorial illustrates the required steps in order to perform audio transcoding with the D-series cards manufactured by Sangoma, using the sngtc_server daemon and the OpenSIPS sngtc module as its client. The latest versions of the transcoding library, as of 1 August 2013 is: sng-tc-linux-1.3.4.1.x86_64.tgz

to:

This tutorial illustrates the required steps in order to perform audio transcoding with the D-series cards manufactured by Sangoma, using the sngtc_server daemon and the OpenSIPS sngtc module as its client. The latest version of the transcoding library, as of 1 August 2013 is: sng-tc-linux-1.3.4.1.x86_64.tgz

August 01, 2013, at 05:59 PM by 109.99.235.212 -
Changed line 8 from:

This tutorial illustrates the required steps in order to perform audio transcoding with the D-series cards manufactured by Sangoma, using the sngtc_server daemon and the OpenSIPS sngtc module as its client.

to:

This tutorial illustrates the required steps in order to perform audio transcoding with the D-series cards manufactured by Sangoma, using the sngtc_server daemon and the OpenSIPS sngtc module as its client. The latest versions of the transcoding library, as of 1 August 2013 is: sng-tc-linux-1.3.4.1.x86_64.tgz

August 01, 2013, at 05:56 PM by 109.99.235.212 -
Changed line 45 from:

All functions properly handle retransmissions. More details can be found in the module documentation. An example configuration file is shown below:

to:

All functions properly handle retransmissions. More details can be found in the module documentation. A basic configuration file is shown below:

August 01, 2013, at 05:56 PM by 109.99.235.212 -
Deleted lines 99-100:

modparam("db_mysql", "exec_query_threshold", 200000)

Deleted line 104:

modparam("usrloc", "nat_bflag", "NAT")

Changed lines 106-112 from:

modparam("usrloc", "db_url", "mysql://root:sangoma@localhost/opensips_1_9") modparam("usrloc", "nat_bflag", "NAT_BFLAG")

modparam("registrar", "tcp_persistent_flag", "TCP_PERSIST_FLAG")

modparam("registrar","received_avp", "$avp(42)")

to:

modparam("usrloc", "db_url", "mysql://root:sangoma@localhost/opensips")

August 01, 2013, at 05:48 PM by 109.99.235.212 -
Changed line 33 from:

Due to the limitations of the transcoding library, transcoding sessions can only be created if both codec A and codec B are known. Since this cannot be accomplished with a standard SIP call flow, the module restricts the receiving UA to perform late SDP negotiation.

to:

Due to the limitations of the transcoding library, transcoding sessions can only be created if both codec A and codec B are known. Since this cannot be accomplished with a standard SIP call flow, the module restricts the receiving UA to perform late SDP negotiation. The diagram below explains this better:

August 01, 2013, at 05:48 PM by 109.99.235.212 -
Changed lines 31-32 from:

Using the sngtc OpenSIPS module

to:

Call flow with the sngtc OpenSIPS module

Due to the limitations of the transcoding library, transcoding sessions can only be created if both codec A and codec B are known. Since this cannot be accomplished with a standard SIP call flow, the module restricts the receiving UA to perform late SDP negotiation.

Added lines 36-38:

Using the sngtc module

August 01, 2013, at 05:41 PM by 109.99.235.212 -
Added lines 14-15:

http://www.opensips.org/images/tc-setup.png

Changed line 33 from:

http://www.opensips.org/images/tc-setup.png

to:

http://www.opensips.org/images/dialog-establish-tc.png

August 01, 2013, at 04:04 PM by 109.99.235.212 -
Changed line 31 from:

http://www.opensips.org/images/tc-setup.jpg

to:

http://www.opensips.org/images/tc-setup.png

August 01, 2013, at 03:44 PM by 109.99.235.212 -
Changed line 31 from:
to:

http://www.opensips.org/images/tc-setup.jpg

August 01, 2013, at 03:41 PM by 109.99.235.212 -
Added lines 30-31:
August 01, 2013, at 03:23 PM by 109.99.235.212 -
Changed line 12 from:

As stated in the module documentation, transcoding may only be done if the UAC performs early SDP negotiation.

to:

As mentioned in the module documentation, transcoding may only be done if the UAC performs early SDP negotiation.

August 01, 2013, at 03:11 PM by 109.99.235.212 -
Changed lines 126-127 from:
                setsflag(FAIL_TRANS_FLAG); # ... even if the transaction fails
to:
                setsflag(FAIL_TRANS_FLAG);
Deleted lines 127-129:
                # even if in most of the cases is useless, do RR for
                # re-INVITEs alos, as some buggy clients do change route set
                # during the dialog.
Changed lines 129-131 from:
                record_route();

            } else if (is_method("ACK"))
to:
            } else if (is_method("ACK")) {
Changed lines 131-132 from:
to:
            }
Deleted lines 177-179:
    if (is_method("INVITE"))
        sngtc_offer();
Changed lines 206-207 from:
    # when routing via usrloc, log the missed calls also
    setflag(DB_MISSED_FLAG);
to:
    if (is_method("INVITE"))
        sngtc_offer();
Changed line 229 from:
        sngtc_callee_answer("38.126.203.98", "38.126.203.98");
to:
        sngtc_callee_answer("11.12.13.14", "11.12.13.14");
August 01, 2013, at 02:55 PM by 109.99.235.212 -
Changed line 1 from:
Documentation -> Tutorials -> Voice Transcoding using Sangoma's D-series Cards
to:
Documentation -> Tutorials -> Voice Transcoding in OpenSIPS using Sangoma D-series Cards
August 01, 2013, at 02:52 PM by 109.99.235.212 -
Changed lines 32-34 from:
  1. sngtc_offer - called at any INVITE request (re-INVITES too)
  2. sngtc_callee_answer - called at 200 OK responses
  3. sngtc_caller_answer - called at ACK requests
to:
  1. sngtc_offer - called at any INVITE request (re-INVITES too), deletes the INVITE SDP body
  2. sngtc_callee_answer - called at 200 OK responses, intersects codec offers, creates transcoding sessions if necessary
  3. sngtc_caller_answer - called at ACK requests, adds an SDP body to the ACK request
August 01, 2013, at 02:50 PM by 109.99.235.212 -
Deleted line 52:
August 01, 2013, at 02:50 PM by 109.99.235.212 -
Changed lines 51-64 from:

/* uncomment the following lines to enable debugging */

  1. fork=no
  2. log_stderror=yes

/* uncomment the next line to enable the auto temporary blacklisting of

   not available destinations (default disabled) */
  1. disable_dns_blacklist=no

/* uncomment the next line to enable IPv6 lookup after IPv4 dns

   lookup failures (default disabled) */
  1. dns_try_ipv6=yes

/* comment the next line to enable the auto discovery of local aliases

   based on revers DNS on IPs */
to:
August 01, 2013, at 02:49 PM by 109.99.235.212 -
Added line 265:

@]

August 01, 2013, at 02:49 PM by 109.99.235.212 -
Deleted lines 264-306:

@]

When receiving INVITE requests:

route {
...
   if (is_method("INVITE"))
       sngtc_offer();
...
}


Handling 200 OK responses:

onreply_route[1] {
    if ($rs == 200)
        sngtc_callee_answer("38.126.203.98", "38.126.203.98");
}

Since the D-series transcoding cards are connected through either a PCI slot or simply an Ethernet connector, they cannot be assigned global IPs. Consequently, the module will write the local, private IP of the card in the SDP answers sent to each of the endpoints. Since this will not work with non-local UAs, the optional parameters force the RTP listen interface for each UA. This way, the script writer can enforce a global IP for the incoming RTP (which can be port forwarded to a transcoding card).


And ACK requests:

route {
...
   if (has_totag()) {
       ...
       if (is_method("ACK"))
          sngtc_caller_answer();
       ...
   }
}
...
}
August 01, 2013, at 02:48 PM by 109.99.235.212 -
Added lines 41-42:
  1. Global Parameters #########
Changed lines 51-64 from:
to:

/* uncomment the following lines to enable debugging */

  1. fork=no
  2. log_stderror=yes

/* uncomment the next line to enable the auto temporary blacklisting of

   not available destinations (default disabled) */
  1. disable_dns_blacklist=no

/* uncomment the next line to enable IPv6 lookup after IPv4 dns

   lookup failures (default disabled) */
  1. dns_try_ipv6=yes

/* comment the next line to enable the auto discovery of local aliases

   based on revers DNS on IPs */
Added line 67:
Changed lines 76-78 from:
  1. Modules Section ########
  1. set module path
to:
  1. Modules ########
Added line 84:

loadmodule "rr.so"

Deleted line 87:

loadmodule "rr.so"

Changed lines 91-94 from:
to:

loadmodule "usrloc.so" loadmodule "registrar.so" loadmodule "sngtc.so"

Deleted line 102:
Deleted line 104:
Deleted line 106:
Deleted line 108:
Changed lines 111-115 from:
  1. modparam("dialog", "db_update_period", 5)

modparam("dialog", "profiles_no_value", "inbound ; outbound ; shared")

  1. modparam("dialog", "profiles_with_value", "caller ; myprofile; share")

loadmodule "usrloc.so"

to:
Deleted line 116:

loadmodule "registrar.so"

Changed lines 118-139 from:
  1. modparam("registrar", "attr_avp", "$avp(attr_avp)")

loadmodule "acc.so" /* what special events should be accounted ? */ modparam("acc", "early_media", 0) modparam("acc", "report_cancels", 0) /* by default we do not adjust the direct of the sequential requests.

   if you enable this parameter, be sure the enable "append_fromtag"
   in "rr" module */

modparam("acc", "detect_direction", 0) modparam("acc", "failed_transaction_flag", "FAIL_TRANS_FLAG") /* account triggers (flags) */ modparam("acc", "db_flag", "DB_CDR_FLAG")

  1. modparam("acc", "cdr_flag", "DB_CDR_FLAG")

modparam("acc", "db_missed_flag", "DB_MISSED_FLAG") modparam("acc", "multi_leg_info","leg_id=$avp(leg_id)") modparam("acc", "multi_leg_bye_info","call_cost=$avp(call_cost);used_min=$avp(used_min)")

loadmodule "cfgutils.so" loadmodule "nathelper.so"

to:
Changed lines 120-132 from:

modparam("nathelper","received_avp", "$avp(42)")

modparam("cfgutils", "lock_pool_size", 64) @]

When receiving INVITE requests:

[@ route { ...

   if (is_method("INVITE"))
       sngtc_offer();

...

to:
  1. Routing Logic ########

route {

    if (!mf_process_maxfwd_header("10")) {
        sl_send_reply("483","Too Many Hops");
        exit;
    }

    force_rport();

    if (has_totag()) {
        # sequential request withing a dialog should
        # take the path determined by record-routing

        if (loose_route()) {

            if (is_method("BYE")) {

                setsflag(FAIL_TRANS_FLAG); # ... even if the transaction fails
            } else if (is_method("INVITE")) {
                # even if in most of the cases is useless, do RR for
                # re-INVITEs alos, as some buggy clients do change route set
                # during the dialog.
                sngtc_offer();
                record_route();

            } else if (is_method("ACK"))
                sngtc_caller_answer();

            # route it out to whatever destination was set by loose_route()
            # in $du (destination URI).
            route(1);
        } else {

            if (is_method("ACK")) {
                if (t_check_trans()) {
                    # non loose-route, but stateful ACK; must be an ACK after 
                    # a 487 or e.g. 404 from upstream server
                    t_relay();
                    exit;
                } else {
                    # ACK without matching transaction ->
                    # ignore and discard
                    exit;
                }
            }
            sl_send_reply("404","Not here");
        }
        exit;
    }

    # CANCEL processing
    if (is_method("CANCEL"))
    {
        if (t_check_trans())
            t_relay();
        exit;
    }

    t_check_trans();

    # preloaded route checking
    if (loose_route()) {
        xlog("L_ERR",
        "Attempt to route with preloaded Route's [$fu/$tu/$ru/$ci]");
        if (!is_method("ACK"))
            sl_send_reply("403","Preload Route denied");
        exit;
    }

    # record routing
    if (!is_method("REGISTER|MESSAGE"))
        record_route();

    if (is_method("INVITE"))
        sngtc_offer();

    # requests for my domain
    if (is_method("PUBLISH|SUBSCRIBE"))
    {
        sl_send_reply("503", "Service Unavailable");
        exit;
    }

    if (is_method("REGISTER"))
    {
        if (!save("location"))
            sl_reply_error();

        exit;
    }

    if ($rU == NULL) {
        sl_send_reply("484","Address Incomplete");
        exit;
    }

    # do lookup with method filtering
    if (!lookup("location","m")) {

        t_newtran();
        t_reply("404", "Not Found");
        exit;
    }

    # when routing via usrloc, log the missed calls also
    setflag(DB_MISSED_FLAG);
    route(1);

}

route[1] {

    # for INVITEs enable some additional helper routes
    if (is_method("INVITE")) {
        t_on_reply("2");
        t_on_failure("1");
    }

    if (!t_relay()) {
        send_reply("500", "Internal Error");
    }

    exit;

}

onreply_route[2] {

    if ($rs == 200)
        sngtc_callee_answer("38.126.203.98", "38.126.203.98");

}

failure_route[1] {

    if (t_was_cancelled()) {
        exit;
    }

    if (next_branches()) {
        t_on_reply("2");
        t_on_failure("1");
        t_relay();
    }

}

August 01, 2013, at 02:36 PM by 109.99.235.212 -
Changed lines 36-37 from:

All functions properly handle retransmissions. More details can be found in the module documentation. An example configuration file is presented below:

to:

All functions properly handle retransmissions. More details can be found in the module documentation. An example configuration file is shown below:

Added lines 39-135:
debug=6
log_stderror=yes
log_facility=LOG_LOCAL0

fork=yes
children=6

memdump=1

auto_aliases=no

listen=udp:eth1:5060

disable_tcp=yes

disable_tls=no

exec_msg_threshold=200000

####### Modules Section ########

#set module path
mpath = "modules/"

loadmodule "exec.so"
loadmodule "signaling.so"
loadmodule "sl.so"
loadmodule "tm.so"
loadmodule "maxfwd.so"
loadmodule "sipmsgops.so"
loadmodule "mi_fifo.so"
loadmodule "rr.so"
loadmodule "db_mysql.so"
loadmodule "uri.so"
loadmodule "dialog.so"

modparam("tm", "fr_timer", 5)
modparam("tm", "fr_inv_timer", 30)
modparam("tm", "restart_fr_on_each_reply", 0)
modparam("tm", "disable_6xx_block", 1)
modparam("tm", "onreply_avp_mode", 1)

modparam("rr", "append_fromtag", 0)


modparam("mi_fifo", "fifo_name", "/tmp/opensips_fifo")


modparam("db_mysql", "exec_query_threshold", 200000)


modparam("uri", "use_uri_table", 0)


modparam("dialog", "db_mode", 0)
modparam("dialog", "default_timeout", 3600)
#modparam("dialog", "db_update_period", 5)
modparam("dialog", "profiles_no_value", "inbound ; outbound ; shared")

#modparam("dialog", "profiles_with_value", "caller ; myprofile; share")
loadmodule "usrloc.so"
modparam("usrloc", "nat_bflag", "NAT")
modparam("usrloc", "db_mode",   1)
modparam("usrloc", "db_url",    "mysql://root:sangoma@localhost/opensips_1_9")
modparam("usrloc", "nat_bflag",   "NAT_BFLAG")

loadmodule "registrar.so"
modparam("registrar", "tcp_persistent_flag", "TCP_PERSIST_FLAG")
#modparam("registrar", "attr_avp", "$avp(attr_avp)")

loadmodule "acc.so"
/* what special events should be accounted ? */
modparam("acc", "early_media", 0)
modparam("acc", "report_cancels", 0)
/* by default we do not adjust the direct of the sequential requests.
   if you enable this parameter, be sure the enable "append_fromtag"
   in "rr" module */
modparam("acc", "detect_direction", 0)                                                                                                                                              
modparam("acc", "failed_transaction_flag", "FAIL_TRANS_FLAG")
/* account triggers (flags) */
modparam("acc", "db_flag", "DB_CDR_FLAG")
#modparam("acc", "cdr_flag", "DB_CDR_FLAG")
modparam("acc", "db_missed_flag", "DB_MISSED_FLAG")
modparam("acc", "multi_leg_info","leg_id=$avp(leg_id)")
modparam("acc", "multi_leg_bye_info","call_cost=$avp(call_cost);used_min=$avp(used_min)")

loadmodule "cfgutils.so"
loadmodule "nathelper.so"


modparam("registrar","received_avp", "$avp(42)")
modparam("nathelper","received_avp", "$avp(42)")

modparam("cfgutils", "lock_pool_size", 64)
August 01, 2013, at 02:00 PM by 109.99.235.212 -
Changed line 36 from:

More details can be found in the module documentation. An example configuration file is presented below:

to:

All functions properly handle retransmissions. More details can be found in the module documentation. An example configuration file is presented below:

August 01, 2013, at 01:59 PM by 109.99.235.212 -
Changed lines 32-34 from:

- sngtc_offer - called at any INVITE request (re-INVITES too) - sngtc_callee_answer - called at 200 OK responses - sngtc_caller_answer - called at ACK requests

to:
  1. sngtc_offer - called at any INVITE request (re-INVITES too)
  2. sngtc_callee_answer - called at 200 OK responses
  3. sngtc_caller_answer - called at ACK requests
August 01, 2013, at 01:59 PM by 109.99.235.212 -
Changed lines 32-34 from:
  • sngtc_offer - called at any INVITE request (re-INVITES too)
  • sngtc_callee_answer - called at 200 OK responses
  • sngtc_caller_answer - called at ACK requests
to:

- sngtc_offer - called at any INVITE request (re-INVITES too) - sngtc_callee_answer - called at 200 OK responses - sngtc_caller_answer - called at ACK requests

August 01, 2013, at 01:58 PM by 109.99.235.212 -
Changed lines 31-36 from:

The sngtc module exports 3 functions. They are called upon receiving INVITE, 200 OK and ACK messages. More details can be found in the module documentation.

to:

The sngtc module exports 3 functions. They are called upon receiving INVITE, 200 OK and ACK messages. A short overview on their purpose would be:

  • sngtc_offer - called at any INVITE request (re-INVITES too)
  • sngtc_callee_answer - called at 200 OK responses
  • sngtc_caller_answer - called at ACK requests

More details can be found in the module documentation. An example configuration file is presented below:

July 31, 2013, at 07:07 PM by 109.99.235.212 -
Changed line 17 from:

The necessary firmware for the D-series transcoding cards can be set up using the sngtc_tool. The cards which require PCI connectivity (D100 and D500) require the installation of additional kernel drivers. Please refer to the Sangoma wiki for installation tutorials.

to:

The necessary firmware for the D-series transcoding cards can be set up using the sngtc_tool. The cards which require PCI connectivity (D100 and D500) also need additional kernel drivers. Please refer to the Sangoma wiki for installation tutorials.

July 31, 2013, at 07:05 PM by 109.99.235.212 -
Changed line 17 from:

All D-series trascoding cards require the proper firmware to be set up with the sngtc_tool. The cards which require PCI connectivity (D100 and D500) require the installation of additional kernel drivers. Please refer to the Sangoma wiki for installation tutorials.

to:

The necessary firmware for the D-series transcoding cards can be set up using the sngtc_tool. The cards which require PCI connectivity (D100 and D500) require the installation of additional kernel drivers. Please refer to the Sangoma wiki for installation tutorials.

July 31, 2013, at 07:04 PM by 109.99.235.212 -
Changed line 17 from:

The D-series transcoding cards which require PCI connectivity (D100 and D500) require the installation of additional kernel drivers. Please refer to the Sangoma wiki for installation tutorials.

to:

All D-series trascoding cards require the proper firmware to be set up with the sngtc_tool. The cards which require PCI connectivity (D100 and D500) require the installation of additional kernel drivers. Please refer to the Sangoma wiki for installation tutorials.

July 31, 2013, at 05:23 PM by 109.99.235.212 -
Changed line 26 from:

By default it logs to /var/log/sngtc_server.log

to:

By default it logs to /var/log/sngtc_server.log

July 31, 2013, at 05:23 PM by 109.99.235.212 -
Added line 26:

By default it logs to /var/log/sngtc_server.log

July 31, 2013, at 05:22 PM by 109.99.235.212 -
Changed line 24 from:
   $ /etc/init.d/sngtc_server_ctl start
to:
   $ /etc/init.d/sngtc_server_ctrl start
July 31, 2013, at 05:21 PM by 109.99.235.212 -
July 31, 2013, at 05:18 PM by 109.99.235.212 -
July 31, 2013, at 05:18 PM by 109.99.235.212 -
Changed line 8 from:

This tutorial will illustrate the required steps in order to perform audio transcoding with the D-series cards manufactured by Sangoma, using the sngtc_server daemon and the OpenSIPS sngtc module as its client.

to:

This tutorial illustrates the required steps in order to perform audio transcoding with the D-series cards manufactured by Sangoma, using the sngtc_server daemon and the OpenSIPS sngtc module as its client.

July 31, 2013, at 05:17 PM by 109.99.235.212 -
Changed line 1 from:
Documentation -> Tutorials -> Performing Voice Transcoding using Sangoma's D-series Cards
to:
Documentation -> Tutorials -> Voice Transcoding using Sangoma's D-series Cards
July 31, 2013, at 04:59 PM by 109.99.235.212 -
Changed line 30 from:

The sngtc module exports 3 functions. They are called upon receiving INVITE, 200 OK and ACK messages.

to:

The sngtc module exports 3 functions. They are called upon receiving INVITE, 200 OK and ACK messages. More details can be found in the module documentation.

July 31, 2013, at 04:56 PM by 109.99.235.212 -
Added lines 55-56:

Since the D-series transcoding cards are connected through either a PCI slot or simply an Ethernet connector, they cannot be assigned global IPs. Consequently, the module will write the local, private IP of the card in the SDP answers sent to each of the endpoints. Since this will not work with non-local UAs, the optional parameters force the RTP listen interface for each UA. This way, the script writer can enforce a global IP for the incoming RTP (which can be port forwarded to a transcoding card).

July 31, 2013, at 04:54 PM by 109.99.235.212 -
Changed lines 72-74 from:

@]

to:

@]

The transcoding sessions on the Sangoma cards are closed in a transparent manner, based on dialog callbacks.

July 31, 2013, at 04:52 PM by 109.99.235.212 -
Changed line 30 from:

The sngtc module exports 3 functions. They are called upon receiving INVITE, 200 OK and ACK messages.

to:

The sngtc module exports 3 functions. They are called upon receiving INVITE, 200 OK and ACK messages.

July 31, 2013, at 04:51 PM by 109.99.235.212 -
Added line 64:
       ...
Added line 67:
       ...
July 31, 2013, at 04:50 PM by 109.99.235.212 -
Changed lines 34-35 from:

At INVITE time:

to:

When receiving INVITE requests:

Changed lines 47-48 from:

At 200 OK time:

to:

Handling 200 OK responses:

Added lines 53-68:

} @]


And ACK requests:

[@ route { ...

   if (has_totag()) {
       if (is_method("ACK"))
          sngtc_caller_answer();
   }

} ...

July 31, 2013, at 04:48 PM by 109.99.235.212 -
Added lines 42-52:

} @]


At 200 OK time:

[@ onreply_route[1] {

    if ($rs == 200)
        sngtc_callee_answer("38.126.203.98", "38.126.203.98");
July 31, 2013, at 04:45 PM by 109.99.235.212 -
Changed lines 30-43 from:

The sngtc module exports 3 functions. They are called upon receiving INVITE, 200 OK and ACK messages.

to:

The sngtc module exports 3 functions. They are called upon receiving INVITE, 200 OK and ACK messages.


At INVITE time:

route {
...
   if (is_method("INVITE"))
       sngtc_offer();
...
}
July 31, 2013, at 04:35 PM by 109.99.235.212 -
Changed line 22 from:

Installing the sngtc_server is straightforward and also documented in the Sangoma wiki. After doing the configuration, you can start it with the init script:

to:

Installing the sngtc_server is straightforward and also documented in the Sangoma wiki. After doing the configuration, it can be started using the init script:

Changed lines 28-30 from:

Using the sngtc OpenSIPS module

to:

Using the sngtc OpenSIPS module

The sngtc module exports 3 functions. They are called upon receiving INVITE, 200 OK and ACK messages.

July 31, 2013, at 04:18 PM by 109.99.235.212 -
Changed line 24 from:
   /etc/init.d/sngtc_server_ctl start
to:
   $ /etc/init.d/sngtc_server_ctl start
July 31, 2013, at 04:18 PM by 109.99.235.212 -
Changed lines 22-25 from:

Installing the sngtc_server is straightforward and also documented in the Transcoding wiki page.

to:

Installing the sngtc_server is straightforward and also documented in the Sangoma wiki. After doing the configuration, you can start it with the init script:

   /etc/init.d/sngtc_server_ctl start
July 31, 2013, at 04:17 PM by 109.99.235.212 -
Added lines 21-22:

Installing the sngtc_server is straightforward and also documented in the Transcoding wiki page.

July 31, 2013, at 01:22 PM by 109.99.235.212 -
Changed lines 8-9 from:

This tutorial will illustrate the required steps in order to perform audio transcoding with the D-series cards manufactured by Sangoma, using the sngtc_server daemon and the OpenSIPS sngtc module as its client.

to:

This tutorial will illustrate the required steps in order to perform audio transcoding with the D-series cards manufactured by Sangoma, using the sngtc_server daemon and the OpenSIPS sngtc module as its client.

Added lines 15-19:

Installing the transcoding card

The D-series transcoding cards which require PCI connectivity (D100 and D500) require the installation of additional kernel drivers. Please refer to the Sangoma wiki for installation tutorials.


Changed line 23 from:

Using the sngtc OpenSIPS module

to:

Using the sngtc OpenSIPS module

July 31, 2013, at 01:15 PM by 109.99.235.212 -
Changed lines 14-24 from:

The solution below requires no changes at all on the OpenSIPS side ( because it relies on a WebSocket to SIP gateway ), thus it can be easily integrated with 0 side-effects to your existing deployment. Secondly, the solution uses entirely open source components ( both for the server and the client side ) - which gives you great flexibility on the server side, as well as on the client side - since you can easily integrate the client into your existing client portals.

Platform Components

  • We will be using OpenSIPS as the core part of the platform, handling all the SIP traffic. For a basic tutorial of setting up OpenSIPS see the getting started tutorial
  • OverSIP will be used as a WebSocket to SIP gateway - all the websocket traffic will reach OverSIP, which will decapsulate the SIP traffic and relay it to the OpenSIPS proxy. OverSIP packages are available for Debian based systems and detailed installation instructions are available for other operating systems as well - see OverSIP deployment tutorial here
  • For the SIP client for testing purposes, we will be using sipML5 . It can be downloaded from here and installation is very straight-forward : just copy the sources to your /var/www/ folder. The client's media stack relies on WebRTC and the client can be used to connect to any SIP or IMS network from your preferred browser to make and receive audio/video calls and instant messages. Furthermore, sipML5 should work on any web browser supporting WebRTC but we highly recommend using Google Chrome or Firefox Nightly for testing.

to:

Setting up the sngtc_server


Using the sngtc OpenSIPS module

July 31, 2013, at 01:13 PM by 109.99.235.212 -
Added lines 1-24:
Documentation -> Tutorials -> Performing Voice Transcoding using Sangoma's D-series Cards

This page has been visited 2113 times. (:toc-float Table of Content:)


Tutorial Overview

This tutorial will illustrate the required steps in order to perform audio transcoding with the D-series cards manufactured by Sangoma, using the sngtc_server daemon and the OpenSIPS sngtc module as its client.


As stated in the module documentation, transcoding may only be done if the UAC performs early SDP negotiation.

The solution below requires no changes at all on the OpenSIPS side ( because it relies on a WebSocket to SIP gateway ), thus it can be easily integrated with 0 side-effects to your existing deployment. Secondly, the solution uses entirely open source components ( both for the server and the client side ) - which gives you great flexibility on the server side, as well as on the client side - since you can easily integrate the client into your existing client portals.

Platform Components

  • We will be using OpenSIPS as the core part of the platform, handling all the SIP traffic. For a basic tutorial of setting up OpenSIPS see the getting started tutorial
  • OverSIP will be used as a WebSocket to SIP gateway - all the websocket traffic will reach OverSIP, which will decapsulate the SIP traffic and relay it to the OpenSIPS proxy. OverSIP packages are available for Debian based systems and detailed installation instructions are available for other operating systems as well - see OverSIP deployment tutorial here
  • For the SIP client for testing purposes, we will be using sipML5 . It can be downloaded from here and installation is very straight-forward : just copy the sources to your /var/www/ folder. The client's media stack relies on WebRTC and the client can be used to connect to any SIP or IMS network from your preferred browser to make and receive audio/video calls and instant messages. Furthermore, sipML5 should work on any web browser supporting WebRTC but we highly recommend using Google Chrome or Firefox Nightly for testing.


Page last modified on August 05, 2013, at 04:57 PM