In a "Compiling and Installing WebRTC2SIP" I described how to install Webrtc2sip to include SIP signalling in your webrtc applications. Unluckily there were some issues with webrtc2sip reported by Rosario Santoro (@RosSantoro1) and further discussed in the Doubango Google Group. Without having a solution yet, I decided to give Asterisk another shot. So in this article I'll describe how to use Asterisk only (without webrtc2sip) to setup a webrtc scenario without any other third party applications. This article is loosely based on this one.

I selected Amazon Linux for this, but the instructions should work on any CentOS like operating system, and should be easily adaptable to other linux distros like Ubuntu.

The security group should allow:

Inbound connections to the TCP port 22 (to login via SSH, of course)

Inbound and Outbound traffic to the UDP port 5060 (if you're going to use any peers with standard SIP over UDP).

Inbound connections to the TCP port 8089 (we're going to use this one to serve a TLS-enabled websocket with asterisk)

Inbound and outbound to the UDP port range setup in your rtp.conf file

Inbound connections to the TCP port 443 (if you're going to serve your webrtc application from this instance, we're going to do this by using the SIPML5 example)

Installing Base Packages needed in Amazon Linux or CentOS to install Asterisk PBX

We first need to install some basic packages, to compile everything:

Nginx is installed so we can serve our own HTML5 application in the same server, but you can skip it if that will not be your case.

NOTE: In CentOS you will need to install epel-release to install nginx.

In a similar way, GNU Screen is installed becase I still like to use it, so feel free to also skip it or replace it with another thing.

Install DaemonTools to start the Asterisk PBX as a service

It is highly recommended that you manage your asterisk installations with daemontools. You can find out how to install them in this article titled: Installing DaemonTools in Amazon Linux (or CentOS like OS).

Install libgsm 1.0.13

You have to download and apply the following patch so you can build libgsm as a shared library:

Then you can proceed to build and install:

Install OpenSSL 1.0.2d

Install libsrtp 1.5.2 as a shared library

libsrtp is used to provide audio by using SRTP and its mandatory for webrtc communications. We need to install libsrtp as a shared library:

Install libjansson 2.7

Install PjProject 2.4

PJSip is a new full SIP stack, used to replace chan_sip. And although we're still going to use chan_sip here, pjsip is needed to correctly handle ICE and STUN.

Install Asterisk 13.6.0

Configure Asterisk. Make sure that all the pj* resources are enabled, as well as the res_srtp and res_http_websocket ones.

Add library paths to /etc/profile

You might want to add this to your /etc/profile so the correct libraries will be used in your shell:

Setup /usr/asterisk/etc/asterisk/sip.conf

In the general section of your sip.conf file set:

Sample SIP Peer for WebRTC in Asterisk

Setup the HTTP webserver in Asterisk PBX to support the WebRTC websocket in /usr/asterisk/etc/asterisk/http.conf

In your http.conf file:

Setup the RTP ports in Asterisk in /usr/asterisk/etc/asterisk/rtp.conf

In your rtp.conf file:

Create a user for Asterisk

NOTE: You can skip this step if you're not using daemontools.

Setup daemontools to start asterisk

NOTE: You can skip this step if you're not using daemontools.

Create the ./log/run file with the following contents:

Create the ./run file with the following contents:

Make daemontools start Asterisk automatically:

Install SIPML5

NOTE: You can skip this step if you already have your own webrtc application or other means to test the installation.

Setup the nginx host to serve your WebRTC VoIP Application

NOTE: You can skip this step if you already have your own webrtc application or other means to test the installation.

Generate a stronger DHE for SSL key exchange

Setup the nginx host:

After starting nginx, you should be able to point your browser to: https://your-web-domain.net/call.htm?svn=230# and see the SIPML5 demo.

SIPML5 configuration for the Asterisk PBX

In the Expert section:

Check "Disable Video"

Check "Enable RTCWeb Breaker"

Set the "Websocket Server URL": wss://your-web-domain.net:8089/ws

Set the "ICE servers": [{ url: 'stun:stun.l.google.com:19302'}]

Check "Cache the media stream"

In the Login section:

Set "Display Name": 100

Set "Private Identity": 100

Set "Public Identity": sip:100@your-web-domain.net

Set "Password": 100

Set "Realm": your-web-domain.net

Using self signed certificates

If you're using self signed certificates and notice an error in your javascript console like this one

...failed: WebSocket opening handshake was canceled

You have to manually add the certificate to the browser's trusted vault. To do this manually point your browser to https://your-web-domain.net:8089/ws and confirm the security exception. That should solve the issue and you should be able to connect to the websocket port from SIPML5.

Conclusion: Use WebRTC without the hassle of WebRTC2SIP in Asterisk

This will hopefully save you some hours of despair and debugging :) And also get rid of a "moving part" in your webrtc ecosystem, so you can connect directly all your softphones, voip providers, and webrtc applications to your asterisk installation.

Thanks To

Rosario Santoro for his helpful tips and comments for the article.