Como implantar gratis el códec G729 en Asterisk

Publicado el 25 mayo 2021 por Drassill

Los códecs de audio utilizados en Asterisk, generalmente son de uso abierto y sin licencia; siendo el códec G711 (allaw o ullaw) los más populares... Por desgracia, a veces nos podemos encontrar con impedimentos para implementar dichos códecs, viéndonos obligados a utilizar el códec G729, el cual es de pago... La cuestión está que es recomendable hacer pruebas de laboratorio antes de implementarlo, de ahí que sea recomendable montarnos un entorno gratuito en nuestro laboratorio a modo de testing... Es importante resaltar que el códec oficial siempre va a funcionar mejor, pero en entornos de desarrollo o de pruebas, la implementación de este códec es extremadamente interesante.

Este post es una pequeña guía está pensada para que uno pueda implementar el códec G729 con versiones de Asterisk 1.8 o superiores; los requisitos para instalarlo serían similares en todas las versiones pero con la diferencia de que la preparación del códec difiere en cada versión y habría que descargar el fichero adecuado para cada versión.  La web desde donde se descargan los ficheros sería la siguiente:

http://asterisk.hosting.lv/

A modo de recomendación, lo ideal sería descargar el fichero asterisk-g72x-1.4.3.tar.bz2 y compilarlo.

Para poder compilar los códecs G729 y G723 (ambos van incluidos en esta solución), lo primero de todo sería necesario instalar ciertas dependencias en Linux desde los repositorios oficiales de Linux vía APT; estas serían libtool,autoconf,zip y unzip, con lo que haríamos:

apt-get install libtool,autoconf,zip,unzip

Con las dependencias descargadas e instaladas, el primer paso sería instalar las librerías IPP de Intel, las cuales son necesarias para poder seguir adelante, aún sin tener una arquitectura de Intel. Dichas dependencias son fácilmente descargables desde la propia web oficial de Intel, descargando, siempre que sea posible, la versión más reciente posible.

https://software.intel.com/en-us/articles/intel-ipp-legacy-libraries

Con todo lo necesario descargado e instalado, ubicaríamos todos los ficheros descargados en /usr/src y ejecutaríamos los comandos:

tar -xf ipp90legacy_lin_9.0.0.008.tar
tar -xjf asterisk-g72x-1.4.3.tar.bz2

Accedemos al directorio descomprimido de ipp90… y allí hacemos:

unzip linux.zip

El proceso de descompresión pedirá una contraseña,  la cual sería: accept

Esto creará, tras un rato, una carpeta llamada linux, la cual habrá que mover a una ruta que inicialmente seguramente no exista con lo que lo que deberemos introducir dos comandos; uno para crear la ruta, y otra para mover la carpeta creada:

mkdir -p /opt/intel/ipp/
mv linux /opt/intel/ipp/legacy

Ahora accederíamos al directorio /opt/Intel/ipp/legacy/lib y dentro de este directorio descargaremos y descomprimiremos más librerías necesarias, librerías que serían necesarias para que los paquetes de Intel funcionen:

cd opt/Intel/ipp/legacy/lib
wget http://asterisk.hosting.lv/bin/icc-static-libs.tar.bz2
tar -xjf icc-static-libs.tar.bz2

Ahora que por fin tenemos las librerías preparadas,  accederíamos al directorio descomprimido de los códecs de Asterisk que hemos descomprimido antes:

cd /usr/src/asterisk-g72x-1.4.3/

Antes de preparar el códec haremos un enlace simbólico al directorio legacy, llamando a dicho enlace ipp:

ln -s opt/intel/ipp/legacy/ ipp

Finalmente ejecutamos el script autogen.sh, al cual habría que darle antes permisos de ejecución. Dicho script generará los deseados códecs:

chmod +x autogen.sh
./autogen.sh

Ahora podemos utilizar el códec G729 sin ningún problema; en cambio, para el códec G723 (en caso de querer usarlo) habría que acceder a /etc/asterisk/códecs.conf y añadir estas líneas:

[g723]
; 6.3Kbps stream, default
sendrate=63
; 5.3Kbps
;sendrate=53

Gracias a esto, ya tendríamos los códecs listos. Para verificar que los códecs han sido añadidos correctamente habría que acceder a Asterisk, recargar la configuración global y ejecutar el comando comando core show translations:

asterisk -rvvvvvvvv
reload
core show translation recalc 10

Como detalle, mencionar que en la lista veremos veremos guiones en todas las referencias a al códec G729; eso es debido a que éste no soporta transcoding (conversión de un códec a otro).

Por último, quedaría asegurarnos de que, tras este largo proceso, se va a utilizar el códec que queremos en /etc/asterisk/sip.conf; concretamente el códec debe de aparecer en el listado de códecs de allow; algo del estilo como el de a continuación:

allow=g729disallow=all

Cabe recalcar, tal y como se ha dicho al principio, que siempre es recomendable optar por el códec oficial y que esta solución es útil en entornos que no sean de producción, como puede ser en laboratorios o en entornos de pruebas, o en entornos de aprendizaje.

Espero que os haya resultado útil; sí que es cierto que el proceso es tedioso, pero es muy útil para poder ahorrarnos el coste de la licencia asociada a dicho códec.

Saludos.