Práctica: Creación de un servidor de
streaming mediante el protocolo RTMP
sobre Ubuntu, usando el servidor web
Nginx.
El protocolo de mensajería en tiempo real (RTMP) fue desarrollado por Macromedia como un
método para transferir datos, audio y vídeo para su propia tecnología Flash. Macromedia fue
adquirida posteriormente por Adobe, y a partir de ese momento la especificación del protocolo
ha sido parcialmente puesta a disposición de otros fabricantes. Esto ha traído consigo que la
tecnología del protocolo RTMP sea utilizada por un gran número de fabricantes, siendo uno de
los protocolos de streaming más utilizados en la actualidad.
Por otra parte, Nginx (pronunciado en inglés “engine X”) es un servidor web/proxy inverso ligero de
alto rendimiento y un proxy para protocolos de correo electrónico (IMAP/POP3).
Es software libre y de código abierto, licenciado bajo la Licencia BSD simplificada; también existe
una versión comercial distribuida bajo el nombre de nginx plus. Es multiplataforma, por lo que corre
en sistemas tipo Unix (GNU/Linux, BSD, Solaris, Mac OS X, etc.) y Windows.
Nginx es usado por una larga lista de sitios web conocidos,
como: WordPress, Netflix, Hulu, GitHub, Ohloh, SourceForge, TorrentReactor y partes de Facebook
(como el servidor de descarga de archivos zip pesados). En el siguiente gráfico se aprecia el alto
porcentaje de uso de este servidor web a nivel mundial de internet (Enero de 2018):
En esta práctica montaremos un servidor multimedia utilizando el servidor web Nginx con
RTMP sobre Linux Ubuntu.
Preparación, compilación e instalación de Nginx y el módulo
RTMP para Nginx
Nginx-RTMP es un módulo adicional del servidor web Nginx que se utiliza para transmisión de
flujos multimedia (streaming) tanto de vídeo como de audio, usando el protocolo RTMP. Este
módulo no viene preempaquetado para ser instalado por el sistema operativo, lo que significa
que tendremos que compilar Nginx a partir de su código fuente. Para ello escribiremos en la
máquina Ubuntu la siguiente línea de comandos:
sudo apt-get install build-essential libpcre3 libpcre3-dev
libssl-dev unzip
Esto se llevará algún tiempo. Con esta línea instalamos lo necesario para poder realizar la
compilación del código fuente y la creación de los correspondientes paquetes.
El siguiente paso es obtener el código fuente de Nginx. En esta práctica usaremos la versión
1.8.1. Para versiones más recientes el procedimiento es análogo.
1
Entonces haremos:
mkdir nginx
cd nginx
wget http://nginx.org/download/nginx-1.8.1.tar.gz
tar -zxvf nginx-1.8.1.tar.gz
Ahora necesitaremos el código fuente para el módulo Nginx-RTMP, el cual nos lo descargamos
con las siguientes órdenes:
wget https://github.com/arut/nginx-rtmp-
module/archive/master.zip
unzip master.zip
En este punto dispondremos de un directorio llamado nginx-1.8.1 que contiene el código fuente
de Nginx, y otro directorio denominado nginx-rtmp-module-master que contiene el código
fuente del módulo Nginx-RTMP. El siguiente paso es reconfigurar el código fuente de Nginx
para ser compilado junto con el módulo Nginx-RTMP, mediante:
cd nginx-1.8.1
./configure --with-http_ssl_module --add-module=../nginx-rtmp-
module-master
Al ejecutar la orden se verá cierta cantidad de texto en scroll en pantalla. Una vez que finalice,
se lleva a cabo la compilación y la instalación de Nginx con estas dos líneas de comando:
make
sudo make install
Llegados a este punto, Nginx quedará instalado en la carpeta /usr/local/nginx. Para comprobar
el funcionamiento, activamos el servicio web de Nginx:
sudo /usr/local/nginx/sbin/nginx
Si la instalación ha sido correcta, se puede obtener la página de prueba de Nginx si utilizamos
un navegador web y nos conectamos a la IP del servidor Ubuntu donde hemos realizado la
instalación.
Para parar Nginx, el comando para detener el servicio es:
sudo /usr/local/nginx/sbin/nginx -s stop
2
Configuración del servicio.
El siguiente paso es escribir las líneas necesarias en el archivo nginx.conf para configurar el
módulo RTMP, el cual abriremos con el editor de texto que deseemos, en este caso nano:
sudo nano /usr/local/nginx/conf/nginx.conf
Nos dirigimos al final del fichero y copiamos las siguientes líneas, guardando finalmente el
archivo una vez las hayamos copiado:
rtmp {
server {
listen 1935;
chunk_size 8192;
application vod {
play /usr/local/nginx/rtmp;
Con las líneas escritas, lo que hemos establecido en la configuración es que Nginx escuche las
peticiones de streaming por el puesto 1935, el cual es el puerto por defecto para el protocolo
RTMP.
También hemos establecido como tamaño de los paquetes de transmisión del audio o video a
8192 bits cada uno, que es un tamaño estándar adecuado.
Después hemos creado una “aplicación” llamada vod para vídeo a demanda (video on
demand). Se pueden tener tantas “aplicaciones” como se quiera, cada una con un nombre
distinto.
Como directorio donde se ubican los archivos de vídeo a transmitir hemos especificado la
carpeta /usr/local/nginx/rtmp Esta carpeta no existe, por lo cual hay que crearla e introducir los
archivos de video correspondientes, los cuales solamente pueden tener los formatos .mp4 o
.flv, que son los únicos formatos servidos por el módulo Nginx-RTMP:
sudo mkdir /usr/local/nginx/rtmp
Lo siguiente es volver a iniciar el servicio de Nginx, para que adquiera la configuración que
hemos cambiado:
sudo /usr/local/nginx/sbin/nginx
3
Prueba.
Para probar el funcionamiento, ejecutamos el reproductor multimedia VLC y seleccionamos la
opción Medio -> Abrir ubicación de red, escribiendo la URL del vídeo a transmitir mediante
streaming.
Dicha URL comenzará por rtmp:// para comunicar a VLC qué protocolo de streaming utilizar,
seguido del nombre de dominio o dirección IP del servidor Ubuntu, después el nombre de la
“aplicación” y finalmente el nombre del archivo de vídeo a transmitir. Por ejemplo:
rtmp://ipdelservidor/vod/test.mp4
rtmp://ipdelservidor/vod/test.flv