Asterisk 11.12.0 y WebRTC - CentOS 6.5 64bit

La palabra WebRTC en los últimos tiempos se ha vuelto muy popular ya que, para muchos, representa una verdadera revolución en la forma de comunicar. Es la posibilidad de comunicar utilizando navegadores Web, y no solamente, que implementen las API en JavaScript que permiten a los desarrolladores implementar servicios y aplicaciones que interaccionan con los navegadores mismos. Estas API son de tres tipos:

  • getUserMedia que se utiliza para solicitar el acceso a los dispositivos (audio/vídeo) presentes en el dispositivo (computador, tablet, Smartphone, etc.)

  • RTCPeerConnection que se utiliza para crear un flujo media directo entre los dos puntos

  • RTCDataChannel que permite a los dos puntos intercambiar datos que no son parte del flujo media (chat, fotos, archivos, etc.)

La idea detrás de WebRTC es la comunicación sin plugins. Claramente se pueden desarrollar aplicaciones que implementen WebRTC en programas que no sean navegadores Web y quizás esta es la parte más interesante de este nuevo sistema de comunicación.

Para el flujo media se utiliza el Protocolo SRTP sobre DTLS que es un protocolo de cifrado basado en TLS y específicamente pensado para los datagramas. Un protocolo que utiliza los datagramas es UDP que notoriamente es el preferido en la comunicaciones VoIP y, en general, en cualquier tipo de aplicación donde haya un flujo media.

Los codec audio permitidos en el flujo media son: alaw, ulaw y Opus. Para los codec vídeo todavía no hay una acuerdo entre VP8 o H.264.

Como los dos puntos trasmiten el flujo audio directamente (sin pasar por un intermediario) y como normalmente se encuentran detrás de una NAT, para resolver este tipo de problema se ha optado para utilizar el protocolo ICE (RFC5245) que logra resolver el 99% de los posibles tipos de NAT.

Una parte muy importante de este nuevo protocolo es que para la señalización puede ser utilizado cualquier tipo de protocolo (propietario o no). Dos ejemplos: SIP y XMPP. En enero de este año, la IETF ha publicado un nuevo RCF (el 7118) donde se especifica y estandariza el uso de la señalización SIP para WebRTC. Esto significa que es posible hacer comunicar WebRTC vía SIP con programas que ya utilizan este protocolo. De hecho Asterisk, desde la versión 11 implementa el protocolo WebRTC y esto vuelve posible una comunicación entre extensiones SIP y programas que implementan las API WebRTC.

En este articulo se verá como utilizar WebRTC con Asterisk 11.12.0 y el navegador Chrome. Primero se instala Asterisk desde las fuentes como de praxis. Lo importante, para un correcto soporte de ICE, es la instalación de estos paquetes:

yum install libuuid libuuid-devel uuid uuid-devel

Para el cifrado audio:

yum install git -y
cd /usr/src
git clone https://github.com/cisco/libsrtp libsrtp
cd libsrtp
./configure --prefix=/usr CFLAGS=-fPIC --libdir=/usr/lib64
make
make runtest
make install

Una vez terminada la instalación de Asterisk se modifica el archivo rtp.conf:

nano /etc/asterisk/rtp.conf

se cambia esta línea:

; icesupport=true

para que quede:

icesupport=yes

Si activa el miniservidor Web de Asterisk:

mv /etc/asterisk/http.conf /etc/asterisk/http.conf.old

nano /etc/asterisk/http.conf

se pegan las siguientes líneas:

[general]
enabled=yes
bindaddr=0.0.0.0
bindport=8088

Si se ha instalado un cortafuego se abre el puerto 8088 TCP

Luego se crean los certificado para el protocolo DTLS utilizando una utilidad presente en las fuentes de Asterisk:

mkdir /etc/asterisk/keys

cd /usr/src/asterisk-11.12.0/contrib/scripts

En la opción -C se pone la IP o el nombre de dominio del servidor Asterisk:

./ast_tls_cert -C IPAsterisk -O "PruebaWebRTC" -d /etc/asterisk/keys

No config file specified, creating '/etc/asterisk/keys/tmp.cfg'
You can use this config file to create additional certs without
re-entering the information for the fields in the certificate
Creating CA key /etc/asterisk/keys/ca.key
Generating RSA private key, 4096 bit long modulus
.........................++
...........................++
e is 65537 (0x10001)
Enter pass phrase for /etc/asterisk/keys/ca.key:
Verifying - Enter pass phrase for /etc/asterisk/keys/ca.key:
Creating CA certificate /etc/asterisk/keys/ca.crt
Enter pass phrase for /etc/asterisk/keys/ca.key:
Creating certificate /etc/asterisk/keys/asterisk.key
Generating RSA private key, 1024 bit long modulus
.............................................................++++++
....................................++++++
e is 65537 (0x10001)
Creating signing request /etc/asterisk/keys/asterisk.csr
Creating certificate /etc/asterisk/keys/asterisk.crt
Signature ok
subject=/CN=173.255.194.236/O=PruebaWebRTC
Getting CA Private Key
Enter pass phrase for /etc/asterisk/keys/ca.key:
Combining key and crt into /etc/asterisk/keys/asterisk.pem

Cuando el script lo solicita, se ingresa una contraseña (por ejemplo asterisk).

Se crean dos extensiones SIP. Una para el cliente WebRTC y una para un softphone (X-lite):

nano /etc/asterisk/sip.conf

al final del archivo se pega:

[1000]
type=friend
secret=passowrd
qualify=yes
host=dynamic
dtmfmode=rfc2833
context=pruebawebrtc
directmedia=no
callerid=Fulano <1000>
disallow=all
allow=alaw
allow=ulaw

[8000]
type=friend
secret=password
context=pruebawebrtc
host=dynamic
qualify=yes
callerid=WebRTC <8000>
transport=udp,ws
avpf=yes
force_avp=yes
encryption=yes
icesupport=yes
directmedia=no
dtlsenable=yes
dtlsverify=no
dtlscertfile=/etc/asterisk/keys/asterisk.pem
dtlsprivatekey=/etc/asterisk/keys/asterisk.pem
dtlssetup=actpass

Los datos importantes de la extensión 8000:

  • trasport=udp,ws: se activa el trasporte udp y ws (WebSocket sin cifrado)

  • avpf=yes: el perfil audio/vídeo requerido por WebRTC para el flujo media

  • force_avp=yes: obliga Asterisk a utilizar avp. Parámetro presente desde la versión 11.11 de Asterisk

  • encryption=yes: el flujo media será cifrado

  • icesupport=yes: se activará el soporte del protocolo ICE para esta extensión (como requerido por el protocolo WebRTC.

  • Las ultimas 5 líneas donde se configura el protocolo DTLS

Se guardan los cambios y se pasa al dialplan:

nano /etc/asterisk/extension.conf

al final del archivo se crea el contexto pruebawebrtc (el configurado para ambas extensiones) añadiendo este bloque:

[pruebawebrtc]
exten => 1000,1,NoOp(Prueba WebRTC)
same => n,Dial(SIP/${EXTEN},45)
same => n,Hangup

exten => 8000,1,NoOp(Prueba WebRTC)
same => n,Dial(SIP/${EXTEN},45)
same => n,Hangup

Se reinicia Asterisk:

service asterisk restart

Se configura Xlite para conectarse como extensión 1000. Una vez esté registrado a Asterisk se abre El Navegador Chrome y se entra a esta pagina:

https://tryit.jssip.net

webrtc1

Se cambia IPAsterisk con la IP del servidor Asterisk. Después de haber rellenado la ultima casilla se presiona la tecla Envío. Aparecerá:

webrtc2

Se desactiva la casilla “enable video” y desde JSSIP se marca 1000.  En seguida en Chrome se abrirá una pestaña solicitando el permiso de utilizar el micrófono presente en el computador (ya que se han desactivado las vídeo llamadas):

webrtc3

Una vez concedido el permiso aparecerá una ventanilla indicando que la llamada se está cursando:

webrtc5

Después de unos segundos, timbrará el XLite:

webrtc6

Se contesta la llamada. El audio debería ser perfecto. Se cuelga y se realiza la prueba al contrario. Desde XLite se llama la extensión 8000. En en navegador aparecerá:

webrtc7

webrtc3

webrtc8

Perfecto. Ahora a estudiar para implementar su propia aplicación WebRTC!!!

Vota el Articulo: 

Sin votos (todavía)
Evalúa la calidad del articulo

5 comentarios

Como instala el asterisk

Buenas, cuales son las lineas que usas para instalar el asterisk?

simplemente
./configure;
make ;
make install;

O tienes algún comando es especial?

A mi directamente no me ha funcionado... :(

Gracias desde ya!

Buenas, he seguido

Buenas, he seguido completamente la guía, tanto de este artículo como del último libro lanzado de Asterisk 11 versión 3. No me funciona, no registra con jssip, ¿sabéis qué puede ser?

Suscribirse a Comentarios de "Asterisk 11.12.0 y WebRTC - CentOS 6.5 64bit" Suscribirse a VozToVoice - Todos los comentarios