Asterisk 1.10 y la aplicación ConfBridge

Versión para impresiónSend by email

Aunque pueda parecer un poco prematuro hablar de la próxima versión 1.10 de Asterisk (la primera beta será liberada a final de junio de este año), en este caso se debe a la nueva aplicación ConfBridge ya presente desde la versión 1.6.X. Esta aplicación ha sido totalmente rediseñada y trae unas cuantas novedades que pueden ser de utilidad a quienes están buscando una sistema de conferencias audio con sonido de alta calidad y con bastante escalabilidad.

Como muchos de ustedes ya saben, la aplicación Meetme tiene algunas limitaciones:

  • se apoya a DAHDI para la creación de los canales audio

  • la frecuencia de muestreo es de 8 Khz

  • el numero máximo de canales utilizables son 512

ConfBridge de la versión 1.10 de Asterisk trae estas interesantes novedades:

  • se pueden mezclar canales audio con diferentes frecuencias de muestreo

  • soporta audio HD

  • viene con un archivo de configuración dedicado

  • proporciona toda una serie de comandos disponibles en la consola de Asterisk (no presentes en la versión 1.6.X)

  • permite crear menú personalizados

  • permite lanzar aplicaciones externas asociándolas a un determinada opción del menú

  • generas eventos en el AMI de Asterisk

  • funciona sin la necesidad de instalar el paquete DAHDI

  • apoyándose al codec Speex, reduce el ruido de fondo del usuario que está hablando manteniendo la calidad del habla; esto antes de mezclar el canal audio en la conferencia

En este articulo veremos como instalar la versión 1.10 de Astersik orientada a su utilizo como sistema de conferencias audio.

En un sistema CentOS 5.6 32bit, versión servidor, antes que nada actualizaremos el sistema:

yum update

Si se ha actualizado el Kernel del sistema, reiniciaremos el servidor:

reboot

luego instalaremos unos cuantos paquetes para compilar las fuentes de los distintos programas:

yum install gcc ncurses ncurses-devel make gcc-c++ libtermcap libtermcap-devel zlib zlib-devel libtool bison bison-devel openssl-devel bzip2 bzip2-devel wget newt newt-devel subversion libxml2 libxml2-devel

Instalamos Speex desde las fuentes.

Unas dependencias:

yum install libogg libogg-devel

cd /usr/src

wget http://downloads.xiph.org/releases/speex/speex-1.2rc1.tar.gz

Para descomprimirlo:

tar -xf speex-1.2rc1.tar.gz

Se entra en la carpeta creada y se compila:

cd speex-1.2rc1

./configure --prefix=/usr

make

make install

Luego SOX:

cd /usr/src

wget http://ufpr.dl.sourceforge.net/sourceforge/sox/sox-14.3.2.tar.gz

se descomprime:

tar -xf sox-14.3.1.tar.gz

Se Entra en la carpeta:

cd sox-14.3.1

y se compila:

./configure --prefix=/usr

make

make install

Descargamos la versión 1.10 de Asterisk:

cd /usr/src

svn checkout http://svn.digium.com/svn/asterisk/trunk asterisk

entramos en la carpeta:

cd asterisk

empezamos la compilación:

./configure

make menuselect

En la ventana que aparece, bajo el menú Applications encontraremos la aplicación app_confbridge:

confbridge1

En el menú Codec Trabslators, averiguamos que esté presente el codex Speex:

confbridge2

En los menus “Core Sound Packages”, “Music on Hold File Packages” y “Extras Sound Packages” seleccionamos todos los paquetes disponibles. Guardamos los cambios y seguimos con la compilación:

make

make install

make samples

make config

Terminada la compilación, podemos iniciar Asterisk:

/etc/init.d/asterisk start

averiguamos que la aplicación ConfBridge este disponible:

asterisk -rvvvvvvvvvvvvvv

CLI> module unload app_confbridge.so
Unloaded app_confbridge.so
== Unregistered application 'ConfBridge'
== Unregistered custom function CONFBRIDGE
== Unregistered channel type 'ConfBridgeRec'
== Manager unregistered action ConfbridgeList
== Manager unregistered action ConfbridgeListRooms
== Manager unregistered action ConfbridgeMute
== Manager unregistered action ConfbridgeUnmute
== Manager unregistered action ConfbridgeKick
== Manager unregistered action ConfbridgeUnlock
== Manager unregistered action ConfbridgeLock
== Manager unregistered action ConfbridgeStartRecord
== Manager unregistered action ConfbridgeStopRecord

CLI> module load app_confbridge.so
Loaded app_confbridge.so
== Registered custom function 'CONFBRIDGE'
== Registered channel type 'ConfBridgeRec' (Conference Bridge Recording Channel)
== Registered application 'ConfBridge'
== Manager registered action ConfbridgeList
== Manager registered action ConfbridgeListRooms
== Manager registered action ConfbridgeMute
== Manager registered action ConfbridgeUnmute
== Manager registered action ConfbridgeKick
== Manager registered action ConfbridgeUnlock
== Manager registered action ConfbridgeLock
== Manager registered action ConfbridgeStartRecord
== Manager registered action ConfbridgeStopRecord
== Parsing '/etc/asterisk/confbridge.conf': == Found
Loaded app_confbridge.so => (Conference Bridge Application)

La sintaxis de la aplicación es:

ConfBridge([confno][,bridge_profile[,user_profile[,menu]]])

  • confno: el numero que se asigna a la sala de conferencia
  • bridge_profile: el perfil que queremos utilizar para esta conferencia. Si no se especifica un valor, se utilizará el perfil [default_bridge] presente en el archivo de configuración predefinido
  • user_profile: el perfil de los usuarios que accederán a la conferencia. Si no se especifica un valor, se utilizará el perfil [default_user] presente en el archivo de configuración predefinido
  • menu: el menú que los usuarios podrán utilizar cuando estén conectados a la conferencia

Para el test que vamos a hacer, crearemos un nuevo archivo de configuración para la aplicación ConfBridge que luego utilizaremos para una conferencia. Todos los parámetros configurables en el archivo de configuración de la aplicación confbridge, los encuentran en el archivo anexo a este articulo o el la Wiki oficial de Asterisk

mv /etc/asterisk/confbridge.conf /etc/asterisk/confbridge.conf.old

nano /etc/asterisk/confbridge.conf

[general] ; empieza la parte general que todavía no se utiliza

[conf_test] ; se define la conferencia

type=bridge ; type indica que tipo de perfil vamos a configurar. Con bridge una conferencia, con user un usuario y con menu un nuevo menú

max_members=20 ; numero máximo de usuario que pueden participar en la conferencia

record_conference=no ; no grabamos la conferencia

internal_sample_rate=auto ;  podemos definir la frecuencia de muestreo de la conferencia. Con auto Asterisk adusta la frecuencia en modo de brindar la mejor calidad audio posible

mixing_interval=20 ; define el intervalo (en milisegundos) del mixing del audio de la conferencia. Valores más bajos aumentan la calidad pero consuma más recursos, valores altos bajan la calidad audio y el consumo de recursos. Posibles valores son: 10,20,40,80

sound_join= beep ; la locución que se escuchará cuando un nuevo usuario entra en la conferencia

sound=leave= beeperr; la locución que se escuchará cuando un usuario abandona la conferencia

Terminada esta parte, configuramos un perfil de usuario:

[user_test] ; se define el nombre del perfil de usuario

type=user ; perfil de usuario

admin=no ; este perfil es para usuarios normales

marked=no ; definimos si el usuario es marcado o no

startmuted=no ; definimos si el usuario entrará a la conferencia en modo mudo o no

music_on_hold_when_empty=yes ; si es el único usuario de la conferencia escuchará la música de espera

denoise=yes ; se define que se aplicará un filtro para eliminar el ruido de fondo del usuario que está hablando. Como ya hemos dicho está funcionalidad de apoya al codec Speex

Por ultimo definimos un perfil para un menú:

[menu_test]

type= menu ; el tipo de perfil es menú

*=playback_and_continue(press&digits/1&press&digits/2&press&digits/3&press&digits/4&press&digits/5&press&digits/6&press&digits/7&press&digits/8press&digits/9&press&digits/0)
1=toggle_mute
2=leave_conference
3=dialplan_exec(invitar,1,1)
4=decrease_listening_volume
5=reset_listening_volume
6=increase_listening_volume
7=decrease_talking_volume
8=reset_talking_volume
9=increase_talking_volume
0=no_op
Una vez dentro de la conferencia, si un usuario hunde la tecla * escuchará todos los comandos disponibles. A cada tecla se le asigna un comando. 
Como veremos más adelante, hundiendo la tecla 3 el usuario tendrá la posibilidad de invitar otro usuario a la conferencia. 
Desafortunadamente las locuciones de utilizar con la aplicación ConfBridgeno están disponibles todavía. En cuanto sea liberada
la versión las tendremos. Mientras, para poder entender el funcionamiento de los menú solo se han puestos unos ejemplos.
Ahora creamos tres nuevos usuarios en el sip.conf:
nano /etc/asterisk/sip.conf
al final del archivo añadimos:

[1000]

type=friend

secret=password

host=dynamic

nat=yes

disallow=all

allow=alaw

context=test

allow=alaw

[1001]

type=friend

secret=password

host=dynamic

nat=yes

disallow=all

allow=alaw

context=test

allow=alaw

[1002]

type=friend

secret=password

host=dynamic

nat=yes

disallow=all

allow=g722

context=test

allow=alaw

Dos usuarios utilizarán el codec alaw (8 Khz) y uno el codec G722 (16 Khz). Todos los usuario tendrán acceso al contexto test

Guardamos los cambios y modificamos el dialplan

nano /etc/asterisk/extensions.conf

Al final del archivo definimos el contexto test:

[test]

exten => 100,1,Answer

same => n,Confbridge(100,conf_test,user_test,menu_test)

same => n,Hangup

Definimos el contexto invitar para invitar un usuario a la conferencia:

[invitar]

exten => 1,1,Originate(SIP/1002,exten,conferencia,100,1)

same => n,Hangup

[conferencia]

exten => 100,1,Confbridge(100,conf_test,user_test,menu_test)

same => n,Hangup

Guardamos los cambios y recargamos la configuración de Asterisk:
/etc/init.d/asterisk reload
Ahora conectamos los teléfonos IP al servidor Asterisk:
asterisk –rvvvvvvvvvvvvvvvvvvvvvv
CLI> sip show peers

Name/username             Host                                    Dyn Forcerport ACL Port     Status      Description

1000/1000                 87.12.101.25                             D   N             13019    Unmonitored

1001/1001                 87.12.101.25                             D   N             13034    Unmonitored

1002/nemygrpj             87.12.101.25                             D   N             13100    Unmonitored

Los tres teléfonos están conectados.

Ahora desde la extensiones 1000 y 1001 marcamos la extensión 100. Desde la consola veremos los dos teléfonos presentes en la conferencia:

CLI> confbridge list

Conference Bridge Name           Users  Marked Locked?

================================ ====== ====== ========

100                                                            2         0            unlocked


confbridge*CLI> confbridge list 100

Channel                       User Profile     Bridge Profile   Menu

============================= ================ ================ ================

SIP/1000-00000000             user_test        conf_test        menu_test

SIP/1001-00000001             user_test        conf_test        menu_test

Ahora desde la extensión 1000 marcamos el tecla 3. Asterisk ejecutará el contexto [invitar] y llamará el usuario 1002 (con el comando Originate). Cuando el usuario conteste, será enviado a la conferencia:

confbridge3

Y efectivamente la extensión 1002 estará usando el codec G722:

confbridge4

CLI> confbridge list 100

Channel                       User Profile     Bridge Profile   Menu

============================= ================ ================ ================

SIP/1000-0000000a             user_test        conf_test        menu_test

SIP/1001-0000000c             user_test        conf_test        menu_test

SIP/1002-0000000e             user_test        conf_test        menu_test

Si tenemos un proveedor VoIP configurado, modificando el dialplan, podremos llamar números fijos y/o celulares e invitarlos a la conferencia.

Eso es todo

AdjuntoTamaño
AST-ConfBridge1.10-250411-0853-11250.pdf52.13 KB
Distribuir contenido Distribuir contenido