[SOLVED] Ultima Versión de RTPEngine en CentOS 7

La ultimas versiones de RTPEngine no compilan correctamente en CentOS 7 debido a un error producido por la versión instalada del lenguaje de programación Perl (5.16.3). Para que el Media Proxy se compile correctamente se necesita la versión de Perl 5.22 o superior.

perl -v

This is perl 5, version 16, subversion 3 (v5.16.3) built for x86_64-linux-thread-multi

(with 39 registered patches, see perl -V for more detail)

Se puede solucionar el problema instalando la versión 5.26 y utilizarla solamente al momento de la compilación de RTPEngine. Esto se realiza de la siguiente forma:

yum install centos-release-scl yum-utils -y

yum-config-manager --enable rhel-server-rhscl-7-rpms

yum install rh-perl526 -y

Se instalan toda una serie de paquetes requeridos para la compilación de RTPEngine y de Kamailio:

yum install mysql mariadb-devel mariadb-server gcc gcc-c++ bison bison-devel net-tools -y

yum install flex make expat expat-devel net-snmp-devel libxml2 libxml2-devel git -y

yum install openssl-devel xmlrpc-c-devel lynx pcre pcre-devel ncurses-devel ncurses-libs gdb -y

yum install net-snmp net-snmp-devel net-snmp-libs net-snmp-utils jansson-devel -y

yum install libuuid libuuid-devel uuid uuid-devel ruby-devel spandsp-devel gperf -y

yum install sqlite sqlite-devel -y

yum install postgresql-devel postgresql-server -y

yum install erlang-erl_interface lksctp-tools-devel python-devel -y

yum install compat-openldap openldap openldap-clients openldap-devel openldap-servers -y

yum install radiusclient-ng radiusclient-ng-devel radiusclient-ng-utils -y

yum install memcached-devel libmemcached-devel systemd-devel -y

yum install unixODBC unixODBC-devel mysql-connector-odbc libtool-ltdl-devel -y

yum install mono-devel hiredis-devel perl-ExtUtils-Embed libpurple-devel lua-devel -y

yum install libunistring-devel thrift-devel libevent-devel json-c-devel librabbitmq-devel -y

yum install libmongo-client-devel mongodb-server mongo-c-driver-devel mongodb -y

yum install GeoIP-devel libmaxminddb-devel bind bind-devel libev-devel libmnl-devel -y

yum install iptables-devel iptables-services libpcap-devel json-glib-devel libevent-devel -y

las fuentes del Kernel:

yum install -y kernel-devel-$(uname -r)

FFMPEG desde los repositorios epel-multimedia:

yum-config-manager --add-repo=http://negativo17.org/repos/epel-multimedia.repo
 

yum-config-manager --disable epel-multimedia
 

yum install --enablerepo=epel-multimedia ffmpeg ffmpeg-devel zeromq libavdevice libavc1394 libavc1394-devel opus opus-devel

y el codec audio G729 (versión Open Source) desde las fuentes; primero unas dependencias:

yum install libtool automake autoconf -y

luego:

cd /usr/src

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

cd bcg729/

./autogen.sh

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

make

make install

Se activa la versión 5.26.3 para la compilación de RTPEngine que luego de desactivará:

scl enable rh-perl526 bash

perl -v

This is perl 5, version 26, subversion 3 (v5.26.3) built for x86_64-linux-thread-multi

(with 27 registered patches, see perl -V for more detail)

Luego se descargan las fuentes de RTPEngine:

cd /usr/src

git clone https://github.com/sipwise/rtpengine.git

cd /usr/src/rtpengine/daemon

Se compila:

make

se copia el programa en la carpeta que queramos:

cp rtpengine /usr/local/bin

y se sale de consola abierta con perl 5.26.3:

exit

Luego se puede continuar normalmente compilando e instalando el modulo del Kernel requerido para reenviar los paquetes a nivel de núcleo del Kernel:

cd /usr/src/rtpengine/kernel-module

make

insmod xt_RTPENGINE.ko

Se compila e instala el modulo de IPtables requerido para reenviar los paquetes a nivel de núcleo del Kernel:

cd /usr/src/rtpengine/iptables-extension

make

cp libxt_RTPENGINE.so /lib64/xtables/

Para ver la lista de Codec audio soportados para el transcoding:

rtpengine --codecs

Se continua con el script de arranque de rtpengine para CentOS 7.X:

cd /usr/src

git clone -b 2.1-config https://github.com/etamme/federated-sip.git

cd federated-sip/scripts

cp rtpengine.sysconfig /etc/sysconfig/rtpengine

nano /etc/sysconfig/rtpengine

Se modifica esta linea:

OPTIONS="--interface xxx.xxx.xxx.xxx --listen-ng xxx.xxx.xxx.xxx:60000 -m 50000 -M 55000 -E -L 7"

para que quede:

OPTIONS="-i IPPublica -n 127.0.0.1:60000 -m 20000 -M 30000 -L 7 --log-facility=local1"

Las distintas opciones:

  • -i direcciones IPs versión 4 donde se pondrá a la escucha el programa. Si se indican 2 separadas por el caracter / RTPengine trabajará en modo puente, es decir que enviará el flujo media, cuando requerido, de una IP a otra y viceversa.

  • -n dirección ip y puerto donde RTPEngine se pondrá a la escucha de los comandos enviados desde otros programas (en este caso Kamailio)

  • -m puerto UDP inicial del rango de puertos que RTPEngine utilizará para el flujo media

  • -M puerto UDP final del rango de puertos que RTPEngine utilizará para el flujo media

  • -L el nivel de DEBUG que se configurará en el programa

  • --log-facility salida de LOG que luego se configurará en rsyslog

Antes de guardar los cambios, modificar IPPublica con la IP publica de su servidor. Se continua modificando nuevamente rsyslog para guardar los datos de LOG de RTPEngine en un archivo dedicado:

nano /etc/rsyslog.conf

Antes de esta linea:

local7.* /var/log/boot.log

se añade:

local1.* /var/log/rtpengine.log

touch /var/log/rtpengine.log

systemctl restart rsyslog

cp rtpengine.service /etc/systemd/system/

systemctl enable rtpengine.service

Created symlink from /etc/systemd/system/multi-user.target.wants/rtpengine.service to /etc/systemd/system/rtpengine.service.

mkdir -p /var/spool/rtpengine

systemctl start rtpengine

En el archivo de LOG del media proxy:

nano /var/log/rtpengine.log

encontraremos una serie de lineas que terminarán con algo parecido:

Jun 9 14:14:58 sip10 rtpengine[19436]: INFO: Startup complete, version git-master-fcb08df

Comments

Andrea, para cotar a este tema.

Las librerias ffpmpeg del repositorio que indicas, tienen a opus en odo experimental, funciona, pero no para hacer transcoding (encoder)

Para ello, vale instalar desde este otro repo.

 

yum-config-manager --add-repo=http://negativo17.org/repos/epel-multimedia.repo
yum-config-manager --disable epel-multimedia
yum install --enablerepo=epel-multimedia ffmpeg ffmpeg-devel zeromq libavdevice libavc1394 libavc1394-devel opus opus-devel

 

Con ellas podrás hacer transcoding sin problema

 

Hola Mauricio,

muchas gracias por comparti; ya actualicé la entrada.

Cualquier cosa me comentas.

Saludos

- Andrea

Otro tips.

RTPENGINE no libera los puertos RTP por todo el tiempo que se tenga configurado su timeout, por defecto 3600 segundos.

Para asegurarse de no quedarse sin puertos (me paso con cliente que mandaba broadcast, rafagas de 200CPS y listas de 50000 telefonos y más)

Asegurarse que rtpengine_manage o para este caso en específico, rtpengine_delete() esté aplicado en reply_route, en los códigos de corte adecuados y en los mensajes CANCEL y en BYE.

Si llegan a ver el error "Ran out of ports", acuerdense de esto.

 

Hola Mauricio,
muchas gracias por el tips.
Saludos.
- Andrea