La transmisión de video en vivo es algo cada vez más popular en Internet y plataformas como Twitch o YouTube proporcionan una infraestructura para consumir interminables horas de medios en vivo y grabados. Si bien estos servicios proporcionan una solución básica de forma gratuita, contienen contenido generalmente detrás de anuncios sin una suscripción paga. Para tener un control total sobre sus contenidos y gracias a las soluciones de código abierto, es fácil configurar un servidor de transmisión en vivo que utilice el protocolo RTMP.
Así que manos a la obra:
apt update && apt upgrade -y
apt install build-essential libpcre3 libpcre3-dev libssl-dev nginx libnginx-mod-rtmp ffmpeg -y
Editamos el archivo de configuración de nginx y colocamos esta sección al final.
rtmp {
server {
listen 1935;
chunk_size 4096;
notify_method get;
application live {
on_publish http://localhost/auth;
live on;
#Si quieres grabar cambia "record" a "all"
record off;
#Se define el directorio para grabar
record_path /var/www/html/recordings;
record_unique on;
#Se define canal de transmision
push rtmp://localhost/youtube;
}
# YouTube Stream Application
application youtube {
live on;
record off;
#Only allow localhost to publish
allow publish 127.0.0.1;
deny publish all;
# Push URL with the YouTube stream key
push rtmp://a.rtmp.youtube.com/live2/<TU_LLAVE_API>;
}
}
}
Creamos el directorio de grabaciones:
mkdir -p /var/www/html/recordings
chown -R www-data:www-data /var/www/html/recordings/
Se configura el canal de transmisión hacia nginx
nano /etc/nginx/sites-enabled/default
En la sección “server” después de definir los puertos “listen” debe ir lo siguiente:
location /auth {
if ($arg_pwd = 'una_contraseña_evitar_simbolos') {
return 200;
}
return 401;
}
Y reiniciamos el servicio nginx:
systemctl restart nginx.service
Configurando OBS con nuestro servidor NGINX
En la sección Controles de la interfaz, haga clic en “Ajustes” o “Configuración” para ingresar a la interfaz de configuración de OBS.
Ingrese la pestaña “Emisión” e ingrese la Información sobre su instancia de transmisión:
- Servicio: Personalizado
- Server:
rtmp://ip_publica_servidor/live
- Clave de transmisión: nombre_stream?pwd=una_contraseña_evitar_simbolos
Guarde la configuración y configure su escena en OBS Studio.
Cuando esté listo, comience a transmitir al servidor haciendo clic en Iniciar transmisión en la sección Controles de OBS.
Configurar canales MultiStreaming
Abrir el archivo de configuración de nginx:
nano /etc/nginx/nginx.conf
Buscar la sección “Stream Application” y ajustar URL’s y API_KEYS según corresponda:
# Youtube Stream Application
application youtube {
live on;
record off;
#Only allow localhost to publish
allow publish 127.0.0.1;
deny publish all;
# Push URL with the YouTube stream key
push rtmp://a.rtmp.youtube.com/live2/<TU_LLAVE_API>;
}
Agregar canales extra (si es necesario), en caso contrario ir al final para reiniciar servicios
apt-get install stunnel4 -y
sudo nano /etc/default/stunnel4
Aquí cambia ENABLE de 0 a 1
ENABLED=1
Editamos ahora el stunnel
nano /etc/stunnel/stunnel.conf
Y colocamos lo siguiente:
pid = /var/run/stunnel4/stunnel.pid
output = /var/log/stunnel4/stunnel.log
setuid = stunnel4
setgid = stunnel4
# https://www.stunnel.org/faq.html
socket = r:TCP_NODELAY=1
socket = l:TCP_NODELAY=1
debug = 4
[fb-live]
client = yes
accept = 127.0.0.1:1936
connect = live-api-s.facebook.com:443
verifyChain = no
Iniciamos servicios:
systemctl enable stunnel4.service
systemctl restart stunnel4.service
systemctl status stunnel4.service
Agregamos el canal de Facebook por rtmps
nano /etc/nginx/nginx.conf
En la sección donde se define la aplicación “live” se debe adicionar:
push rtmp://localhost/facebook;
Y debajo de la aplicación ya creada, en este caso YouTube, después de que finaliza la sección ponemos:
# Facebook Stream Application
application facebook {
live on;
record off;
#Only allow localhost to publish
allow publish 127.0.0.1;
deny publish all;
# Push URL with the Facebook stream key
push rtmp://127.0.0.1:1936/rtmp/<facebook_stream_key>;
}
Reiniciamos servicio de nginx:
systemctl restart nginx.service
systemctl status nginx.service
Desde un nivel alto, Stunnel y NGINX ahora deberían funcionar así:
____________ ____________ ____________ ____________
| Streaming | | | | | | Facebook |
| Source | ---> | NGINX | ---> | stunnel | ---> | Live |
|____________| |____________| |____________| |____________|
Si requieres adicionar más canales de Streaming, puedes hacerlo del mismo modo siguiendo el esquema anterior. Al final ya estarás transmitiendo desde OBS pasando por un proxy NGINX hacia los canales necesarios:
Se puede probar el Live en Streaming por ejemplo usando VLC, colocando la URL de nuestro servidor:
rtmp://ip_servidor_o_dominio/live/nombre_stream
En mi caso para la prueba era:
rtmp://streaming.flisolbogota.org/live/flisol