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.