RTPEngine 6.2 Soportará Transcoding audio

Esta me parece una excelente noticia. La próxima versión de RTPEngine, ya disponible en la Master Branch de GitHub, soportará el transcoding audio; esto quiere decir que si dos dispositivos no tienen un Codec audio en común, RTPEngine, oportunamente configurado, se encargará de transcodificar el audio de un codec a otro para que los dos interlocutores puedan comunicarse sin problemas.

Para la instalación de la ultima versión de RTPEngine el prerequisito para que el transcoding funcione es la instalación de FFMPEG. En CentOS 7; en nuestro caso se utilizarán los repositorios RPM Fusion:

cd /usr/src/
wget https://download1.rpmfusion.org/free/el/rpmfusion-free-release-7.noarch.rpm
rpm -Uvh rpmfusion-free-release-7.noarch.rpm

yum install ffmpeg ffmpeg-devel -y

Otros requisitos para la correcta compilación de RTPEngine, además de las herramientas y librerías para compilar, son:

  • pkg-config
  • GLib incluyendo la versión 2.X de GThread
  • Zlib
  • OpenSSL
  • La librería PCRE
  • la versión 1.16.08 de XMLRPC-C o superior
  • La librería HIREDIS
  • la librería LIBIPTC para la gestión de IPtables (opcional)
  • Las librerías de FFMPEG para el transcoding
  • La librería BCG729 per el soporte completo del transcoding del codec G.729 (opcional)

Una vez que se haya compilado e instalado es posible ver la lista de codec audio soportados para el transcoding:

rtpengine --codecs

Ahora se realizará la siguiente prueba. Se configura X-Lite solamente con el codec audio Opus:

y 3CX que soporta solamente PCMA, PCMU y GSM:

En el archivo predefinido de Kamailio, además de toda la configuración necesaria para el registro de los usuarios, se modifican estas dos lineas presentes en la sub ruta NATMANAGE:

 if(nat_uac_test("8")) {
                rtpproxy_manage("co");
        } else {
                rtpproxy_manage("cor");
        }

para que queden:

 if(nat_uac_test("8")) {
                rtpengine_manage("SIP-source-address replace-origin replace-session-connection transcode-opus/48000/2 transcode-PCMA");
        } else {
                rtpengine_manage("replace-origin replace-session-connection transcode-opus/48000/2 transcode-PCMA");
        }

De esta forma se indica que cuando se activará RTPEngine para cualquier dispositivo, se activará la posibilidad de transcodificar con Opus y PMCA porque sabemos que todos los dispositivos por lo menos soportan uno de los dos codec. Si se realiza una llamada desde X-Lite hacia 3CX, SNGREP mostrará:

Se utilizará Opus en ambas patas. Esto porque será RTPEngine que trasncodificará de Opus a PCMA y viceversa. En el LOG de RTPEngine para la oferta:

Para la respuesta:

En el caso de la llamada desde 3CX hacia X-lite se debería utilizar PCMA. Miramos si es así:

En en LOG de RTPEngine para la oferta:

En la respuesta:

¿Que les parece? A mi excelente... :)

Comentarios

Nota Personal: para añadir el transcoding completo del codec audio G729:

cd /usr/src

git clone https://github.com/BelledonneCommunications/bcg729.git

cd bcg729/

./autogen.sh

./configure --prefix=/usr --libdir=/usr/lib64

make

make install

Luego se compila RTPEngine. El resultado: