Enviado por admin el
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=https://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
4 comentarios
transcoding opus / ffmpeg
Enviado por mauricio2121 el
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
Re: transcoding opus / ffmpeg
Enviado por admin el
Hola Mauricio,
muchas gracias por comparti; ya actualicé la entrada.
Cualquier cosa me comentas.
Saludos
- Andrea
Eliminar sesiones RTPENGINE
Enviado por mauricio2121 el
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.
Re: Eliminar sesiones RTPENGINE
Enviado por admin el
Hola Mauricio,
muchas gracias por el tips.
Saludos.
- Andrea