Usando Raspberry para emitir con Nginx en RTMP y RTMPS

Facebook desde el 1 de mayo no permite el uso de RTMP en su API en vivo y ya solo permiten usar RTMPS, una versión más segura de RTMP que incluye TLS / SSL (un conjunto de protocolos criptográficos para una comunicación segura).

Desafortunadamente el módulo nGINX nginx-rtmp-module no es compatible con RTMPS por lo que la solución pasa por usar stunnel, una popular «aplicación para proporcionar un servicio de túnel TLS / SSL universal».

Dicho de esta manera hasta parece complicado, sin embargo no es así. En mi caso he usado una Raspberry 3B+ en la que he instalado Raspbian Lite para que, aparte de encriptar el stream hacia Facebook, haga todo el trabajo de «duplicar» la señal y emitirla hacia los otros servicios en los que deseemos publicar nuestra emisión en vivo.

Una vez hayamos instalado y actualizado Raspbian procederemos a instalar una serie de paquetes necesarios (como usuario root)

apt-get install build-essential libpcre3 libpcre3-dev libssl-dev

Descargaremos e instalaremos Nginx y el módulo de streaming de Sergey Dryabzhinsky

wget http://nginx.org/download/nginx-1.17.9.tar.gz
wget https://github.com/sergey-dryabzhinsky/nginx-rtmp-module/archive/dev.zip
tar -zxvf nginx-1.17.9.tar.gz
unzip dev.zip
cd nginx-1.17.9
./configure --with-http_ssl_module --add-module=../nginx-rtmp-module-dev
make
make install

Iniciamos Nginx

/usr/local/nginx/sbin/nginx

Llegado aquí si quieres comprobar que la cosa va bien simplemente abre tu navegador web y navega a la página web http://192.168.1.223 (en mi caso esta es la IP de mi Raspberry).

Verás una página de bienvenida de NGINX, luego continuaremos editando el fichero de configuración de Nginx.

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

y al final del fichero agregaremos lo siguiente. Sustituye <CLAVE> por las claves de retransmisión de Facebook y Youtube.

rtmp {
server {
listen 1935;
chunk_size 4096;

application live {
live on;
record off;
push rtmp://127.0.0.1:19350/rtmp/<CLAVE>;
push rtmp://a.rtmp.youtube.com/live2/<CLAVE>;
}
}
}

Es en este archivo donde colocaremos los servidores a los que deseamos transmitir y las claves de transmisión. En el caso de Facebook vamos a usar rtmp://127.0.0.1:19350/rmtp tal como hemos indicado en el fichero de configuración ya que vamos a pasar el stream por stunnel para securizarla y que Facebook la acepte.

En OBS (Ajustes/Emisión) ingresamos los siguientes datos:

Servidor: rtmp://192.168.1.223/live (la IP es la de la Raspberry)
Clave de Retransmisión: test (puede ser lo que quieras)

Inicia la transmisión en OBS, abre VLC y en Medio/Abrir ubicación de red inserta la dirección rtmp://192.168.1.223/live/test.

Si ves en VLC lo que se está emitiendo mediante OBS es que seguimos por el buen camino.

Instalaremos y configuraremos stunnel

apt-get install -y stunnel4
cd /etc/stunnel/
openssl genrsa -out key.pem 2048

Generaremos un certificado autofirmado con openssl. Algunos campos puedes dejarlos en blanco, en FQDN escribe la direccción IP de tu RaspBerry.

openssl req -new -x509 -key key.pem -out cert.pem -days 365
cat key.pem cert.pem >> /etc/stunnel/stunnel.pem

Editamos el archivo de configuración de stunnel

nano /etc/stunnel/stunnel.conf

y lo rellenaremos con los siguientes datos

output = /var/log/stunnel4/stunnel.log
cert=/etc/stunnel/stunnel.pem
key=/etc/stunnel/stunnel.pem
pid=/var/run/stunnel4/stunnel.pid
client=yes
[fb-live]
client=yes
accept = 127.0.0.1:19350
connect = live-api-s.facebook.com:443
verifychain=no

Hecho esto reiniciaremos nginx y stunnel

sudo /usr/local/nginx/sbin/nginx -s stop
sudo /usr/local/nginx/sbin/nginx
/etc/init.d/stunnel4 restart

Como verás ya estarás retransmitiendo a la vez en Facebook y Youtube. Si deseas usar Restream u otro servicio simplemente añade en el archivo de configuración de nginx otra línea push (acuerdate del ; final).

De todas formas desde mayo de 2020 ha aparecido un plugin en OBS que permite enviar varios streams a diferentes servicios. Puedes encontrarlo en https://obsproject.com/forum/resources/multiple-rtmp-outputs-plugin.964/

Disfruta.

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.