desarrollo Linux OpenSource Software

Asterisk 13.8.0

Ya está disponible la nueva versión de Asterisk, la  13.8.0. Uno de los cambios que resulta interesante es que  viene con la opción que pjproject se compile como bundled.  Esto soluciona una serie de problemas o rollos al estar bajando, configurando e instalando pjproject para que funcione con Asterisk.

Desde la versión 13.8.0+ si quieres instalar PJPROJECT como bundled al momento del configure debes agregar el flag with-pjproject-bundled

./configure --with-pjproject-bundled

Esta opción le dirá a tu compilación que te baje el codigo de pjproject, aplique las configuraciones y parches necesarios para que la compilación de Asterisk con PJPROJECT funcione de manera correcta.

Lo otro, si quieres cachurear un poco, podrías aplicar tus propios parches dentro del directorio

third-party/pjproject/patches

Ya que estamos en el tema de pjproject. Voy a mostrar como crear una extensión PJSIP que es lo que aporta PJPROJECT, además del soporte por defecto en versiones superiores a la 13 para STUN, TURN y ICE.

Ya configurado e instalado Asterisk con PJPROJECT vamos a crear dos extensiones para usarlas mediante PJSIP.

Para configurar debes editar el archivo pjsip.conf ubicado preferentemente -puede variar la dirección en caso que hayas cambiado el prefix de instalación- /etc/asterisk

Para este ejemplo vamos a usar la siguiente configuración en pjsip.conf

 [transport-udp]
 type=transport
 bind=0.0.0.0
[1001]
 type = endpoint
 transport = transport-udp
 context = testing-internal
 disallow = all
 allow = ulaw
 aors = 1001
 auth = auth1001
[1001]
 type = aor
 max_contacts = 1
[auth1001]
 type=auth
 auth_type=userpass
 password=ChangemePlease
 username=1001
[1002]
 type = endpoint
 transport = transport-udp
 context = testing-internal
 disallow = all
 allow = ulaw
 aors = 1002
 auth = auth1002
[1002]
 type = aor
 max_contacts = 1
[auth1002]
 type=auth
 auth_type=userpass
 password=ChangemePlease
 username=1002

Algo interesante que es que con PJSIP puedes definir varios AORs,  lo que te permite  conectar multi dispositivos a una misma cuenta. También como definir transportes, donde hagan bind y setearlos a los endpoints.

Debes asegurarte que el modulo chan_pjsip.so está cargado.

asteriskdev*CLI> module show like chan_pjsip.so
 Module                         Description                              Use Count  Status      Support Level
 chan_pjsip.so                  PJSIP Channel Driver                     0          Running              core

 

Veremos los dispositivos conectados

asteriskdev*CLI> pjsip list endpoints
Endpoint:  <Endpoint/CID.....................................>  <State.....>  <Channels.>
 =========================================================================================
Endpoint:  1001                                                 Not in use    0 of inf
 Endpoint:  1002                                                 Not in use    0 of inf

 

En nuestro dialplan, haremos algo sencillo para que una extensión llame a la otra. En el archivo extensions.conf, agregamos

 [testing-internal]
 exten = _100X,1,Verbose(1, "Call To, ${EXTEN}")
 same = n,Dial(PJSIP/${EXTEN})

Ahora, lo que nos muestra la CLI cuando llamamos de 1001 a 1002

 

➜  asterisk-git git:(7d6782c) ✗ sudo asterisk -rvvvvvvv
 Asterisk GIT-13-7d6782c, Copyright (C) 1999 - 2014, Digium, Inc. and others.
 Created by Mark Spencer <markster@digium.com>
 Asterisk comes with ABSOLUTELY NO WARRANTY; type 'core show warranty' for details.
 This is free software, with components licensed under the GNU General Public
 License version 2 and other licenses; you are welcome to redistribute it under
 certain conditions. Type 'core show license' for details.
 =========================================================================
 Connected to Asterisk GIT-13-7d6782c currently running on asteriskdev (pid = 2481)
 -- Executing [1002@testing-internal:1] Verbose("PJSIP/1001-00000006", "1, "Call To, 1002"") in new stack
 "Call To, 1002"
 -- Executing [1002@testing-internal:2] Dial("PJSIP/1001-00000006", "PJSIP/1002") in new stack
 -- Called PJSIP/1002
 -- PJSIP/1002-00000007 is ringing
 > 0x987a000 -- Probation passed - setting RTP source address to 192.168.0.13:51670
 -- PJSIP/1002-00000007 answered PJSIP/1001-00000006
 -- Channel PJSIP/1002-00000007 joined 'simple_bridge' basic-bridge <05ff4442-d95f-40bb-bd0a-4b93e91d9325>
 -- Channel PJSIP/1001-00000006 joined 'simple_bridge' basic-bridge <05ff4442-d95f-40bb-bd0a-4b93e91d9325>
 > Bridge 05ff4442-d95f-40bb-bd0a-4b93e91d9325: switching from simple_bridge technology to native_rtp
 > Remotely bridged 'PJSIP/1001-00000006' and 'PJSIP/1002-00000007' - media will flow directly between them
 > Remotely bridged 'PJSIP/1001-00000006' and 'PJSIP/1002-00000007' - media will flow directly between them
 -- Channel PJSIP/1001-00000006 left 'native_rtp' basic-bridge <05ff4442-d95f-40bb-bd0a-4b93e91d9325>
 == Spawn extension (testing-internal, 1002, 2) exited non-zero on 'PJSIP/1001-00000006'
 -- Channel PJSIP/1002-00000007 left 'native_rtp' basic-bridge <05ff4442-d95f-40bb-bd0a-4b93e91d9325>

 

¡Funciona!. Ahora, si sigues usando chan_sip puedes pasar tus configuraciones mediante el script contrib/scripts/sip_to_pjsip/sip_to_pjsip.py

 

1 thought on “Asterisk 13.8.0”

  1. Hola! Una consulta, estoy instalando también un Asterisk en la versión 13 (soy novato, sé Linux más no Asterisk) y veo que en mi instalación aparecen muchos logs como el que aparecen en tu post:

    — Channel PJSIP/1002-00000007 joined ‘simple_bridge’ basic-bridge
    — Channel PJSIP/1001-00000006 joined ‘simple_bridge’ basic-bridge
    > Bridge 05ff4442-d95f-40bb-bd0a-4b93e91d9325: switching from simple_bridge technology to native_rtp

    Quiero entender exactamente porque pasa desde simple_bridge hacia native_rtp, he encontrado información en Google como que es común pasarlo por un puente nativo al usar tecnologías parecias ambos peers que se tratan de comunicar, pero no estoy 100% seguro de lo que significa. Lo menciono porque he creado una troncal con 2 ATKs que tengo y solo en uno de ellos me aparece este tipo de log.

    Quedo agradecido de antemano.

    Saludos desde Perú!

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.