Ffmpeg con rtmp nginx en Linux Mint

Estos son los pasos para instalar un servidor rtmp usando nginx en Linux Mint 19.

Si instalamos el paquete Nginx desde los repositorios de Mint, este no manejará por defecto el protocolo rtmp, así que más bien debemos construir un nginx que incorpore un módulo para rtmp. Luego usaremos ffmpeg (Mint lo trae por defecto) para enviar un streaming udp al server, sin modificar el stream original.

Todo esto se hace desde terminal.

1- Instalar las utilidades que se requieren para constuir:

sudo apt-get install build-essential libpcre3 libpcre3-dev libssl-dev git zlib1g-dev -y

2- Ubicarnos en el home y crear un directorio donde poner y construir nginx con su módulo rtmp:

sudo mkdir ~/build && cd ~/build

3- Descargar y desempaquetar el módulo rtmp:

sudo git clone git://github.com/arut/nginx-rtmp-module.git

4- Descargar y desempaquetar nginx, luego entrar a su directorio:

sudo wget http://nginx.org/download/nginx-1.14.1.tar.gz
sudo tar xzf nginx-1.14.1.tar.gz
cd nginx-1.14.1

5- Construir nginx incorporando el módulo rtmp:

sudo ./configure --with-http_ssl_module --add-module=../nginx-rtmp-module
sudo make
sudo make install

6- Arrancar y detener el server:

sudo /usr/local/nginx/sbin/nginx
sudo /usr/local/nginx/sbin/nginx -s stop

7- Para hacer un stream en vivo con rtmp hay que agregar una sección rtmp en el archivo de configuración, que puede editarse con nano:

sudo nano /usr/local/nginx/conf/nginx.conf

8- Y debe quedar así:

#user  nobody;
worker_processes  1;

error_log  logs/error.log debug;

events {
    worker_connections  1024;
}

http {
    include       mime.types;
    default_type  application/octet-stream;

    sendfile        on;
    keepalive_timeout  65;

    server {
        listen       8080;
        server_name  localhost;
      
        # rtmp stadísticas
        location /stat {
            rtmp_stat all;
            rtmp_stat_stylesheet stat.xsl;
        }
        location /stat.xsl {
           # ruta de módulo rtmp
           root /home/directoriohome/build/nginx-rtmp-module;
        }

        # rtmp control
        location /control {
            rtmp_control all;
        }

        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }
    }
}
rtmp {
    server {
        listen 1935;
        ping 30s;
        notify_method get;
        application myapp {
            live on;
        }
    }
}

9. Como ejemplo, enviamos udp al server sin conversión alguna:

ffmpeg -re -i udp://127.0.0.1:1234 -c copy -f flv rtmp://localhost:1935/myapp/mystream

10. Ruta para reproducir en localhost (si es en otra máquina usar su IP en vez de locahost):

rtmp://localhost:1935/myapp/mystream

Si todo resultó bien, se puede ver las estadísticas en http://locahost:8080/stat