Streaming por RTMP usando Nginx

Práctica: Creación de un servidor de streaming mediante el protocolo RTMP sobre Ubuntu, usando el servidor web Nginx. El

Views 127 Downloads 34 File size 58KB

Report DMCA / Copyright

DOWNLOAD FILE

Recommend stories

Citation preview

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-rtmpmodule/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-rtmpmodule-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

4