Owncast es un servidor de emisión en directo open source: recibe tu señal por RTMP desde OBS Studio u otro software, la convierte a HLS en varias calidades y la sirve en una página web propia con chat, sin depender de Twitch ni YouTube. En este tutorial instalarás Owncast en Ubuntu 24.04 como servicio systemd con un usuario dedicado, lo publicarás con Nginx y HTTPS, cambiarás las credenciales por defecto y harás tu primera emisión desde OBS.
Requisitos previos
- Un servidor con Ubuntu 24.04 LTS de 64 bits, por ejemplo un VPS de CubePath. Owncast transcodifica por CPU: cuenta con al menos 2 vCPU y 2 GB de RAM para una sola calidad 720p, y 4 vCPU o más para ofrecer varias calidades.
- Un usuario no root con privilegios
sudo. - Un subdominio (en esta guía,
stream.your_domain) con un registro DNS A que apunte a la IP pública del servidor. - OBS Studio instalado en el equipo desde el que vas a emitir.
Notacada espectador descarga el vídeo completo desde tu servidor. Con 20 espectadores a 3 Mbps necesitas unos 60 Mbps de salida, así que ajusta la calidad al ancho de banda del servidor.
Paso 1: Instalar FFmpeg y crear el usuario
Owncast usa FFmpeg para transcodificar la señal que recibe. Instálalo desde los repositorios de Ubuntu, junto con unzip para extraer Owncast:
sudo apt update
sudo apt install -y ffmpeg unzip
Comprueba la versión:
ffmpeg -version | head -n 1
ffmpeg version 6.1.1-3ubuntu5 Copyright (c) 2000-2023 the FFmpeg developers
Crea un usuario de sistema cuyo directorio de trabajo sea /opt/owncast. Owncast guarda su base de datos y los segmentos de vídeo en el subdirectorio data de ese directorio:
sudo useradd --system --create-home --home-dir /opt/owncast --shell /usr/sbin/nologin owncast
Paso 2: Descargar Owncast
Owncast se distribuye como un único binario en sus versiones de GitHub. Consulta la última versión publicada:
VERSION=$(curl -fsSL https://api.github.com/repos/owncast/owncast/releases/latest | grep -Po '"tag_name": "v\K[^"]+')
echo "$VERSION"
0.x.x
Descarga el archivo para Linux de 64 bits y extráelo en /opt/owncast:
curl -fL -o /tmp/owncast.zip "https://github.com/owncast/owncast/releases/download/v${VERSION}/owncast-${VERSION}-linux-64bit.zip"
sudo unzip -o /tmp/owncast.zip -d /opt/owncast
sudo chown -R owncast:owncast /opt/owncast
Comprueba que el binario está en su sitio:
sudo ls -l /opt/owncast/owncast
Paso 3: Crear el servicio systemd
Crea la unidad:
sudo nano /etc/systemd/system/owncast.service
Añade este contenido:
[Unit]
Description=Owncast live streaming server
After=network-online.target
Wants=network-online.target
[Service]
Type=simple
User=owncast
Group=owncast
WorkingDirectory=/opt/owncast
ExecStart=/opt/owncast/owncast -webserverip 127.0.0.1 -webserverport 8080 -rtmpport 1935
Restart=on-failure
RestartSec=5
[Install]
WantedBy=multi-user.target
La opción -webserverip 127.0.0.1 hace que la web y el panel de administración solo escuchen en local: se accederá a ellos a través de Nginx. El puerto RTMP (1935) sí queda abierto a Internet para que OBS pueda enviar la señal.
Recarga systemd, habilita el servicio y arráncalo:
sudo systemctl daemon-reload
sudo systemctl enable --now owncast
Comprueba que está activo y que responde su API de estado:
systemctl status owncast --no-pager
curl -s http://127.0.0.1:8080/api/status; echo
{"serverTime":"...","lastConnectTime":null,"lastDisconnectTime":null,"versionNumber":"0.x.x","streamTitle":"","viewerCount":0,"online":false}
"online":false es lo esperado: todavía no hay ninguna emisión.
Paso 4: Cambiar la contraseña de administración
Owncast arranca con el usuario admin y la contraseña abc123. Como la web solo escucha en 127.0.0.1, puedes cambiarla con seguridad a través de un túnel SSH antes de publicar nada.
Desde tu equipo local (no desde el servidor), abre el túnel:
ssh -L 8080:localhost:8080 your_user@your_server_ip
Con la sesión abierta, visita http://localhost:8080/admin e inicia sesión con admin y abc123. Después:
- En Configuration > Server Setup, cambia Admin Password por una contraseña robusta y guárdala.
- En la pestaña Stream Keys de esa misma sección, crea una clave nueva y larga, cópiala en un lugar seguro y elimina las que hubiera por defecto. Esa clave es lo único que impide que otra persona emita en tu canal.
- En Configuration > General, pon el nombre y la descripción de tu canal.
Paso 5: Publicar Owncast con Nginx y HTTPS
Instala Nginx y Certbot y abre en UFW los puertos de SSH, HTTP, HTTPS y RTMP:
sudo apt install -y nginx certbot python3-certbot-nginx
sudo ufw allow OpenSSH
sudo ufw allow 'Nginx Full'
sudo ufw allow 1935/tcp
sudo ufw enable
Crea el sitio de Owncast:
sudo nano /etc/nginx/sites-available/owncast
Añade esta configuración, sustituyendo stream.your_domain:
server {
listen 80;
listen [::]:80;
server_name stream.your_domain;
location / {
proxy_pass http://127.0.0.1:8080;
proxy_http_version 1.1;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
# WebSocket, necesario para el chat
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
}
}
Activa el sitio, comprueba la sintaxis y recarga Nginx:
sudo ln -s /etc/nginx/sites-available/owncast /etc/nginx/sites-enabled/
sudo nginx -t
sudo systemctl reload nginx
Solicita el certificado; Certbot añade el bloque HTTPS y la redirección desde HTTP:
sudo certbot --nginx -d stream.your_domain
Por último, en el panel (ahora en https://stream.your_domain/admin), ve a Configuration > General y escribe https://stream.your_domain en Server URL. Owncast usa esa dirección para los enlaces que comparte y para las vistas previas en redes sociales.
Paso 6: Hacer una emisión de prueba con FFmpeg
Antes de configurar OBS, confirma que el servidor recibe y transcodifica correctamente. Este comando, ejecutado en el propio servidor, genera una carta de ajuste con un tono de audio y la envía por RTMP. Sustituye your_stream_key por la clave del paso 4:
ffmpeg -re -f lavfi -i testsrc=size=1280x720:rate=30 -f lavfi -i sine=frequency=440 \
-c:v libx264 -preset veryfast -b:v 2500k -g 60 -pix_fmt yuv420p \
-c:a aac -b:a 128k -f flv "rtmp://127.0.0.1:1935/live/your_stream_key"
Mientras se ejecuta, abre https://stream.your_domain: verás la carta de ajuste en el reproductor tras unos segundos de latencia. En otra terminal, la API confirma que hay emisión:
curl -s http://127.0.0.1:8080/api/status | grep -o '"online":[a-z]*'
"online":true
Detén la prueba con Ctrl+C.
Paso 7: Configurar OBS Studio
En OBS Studio, abre Ajustes > Emisión y rellena:
- Servicio: Personalizado.
- Servidor:
rtmp://stream.your_domain/live - Clave de retransmisión: la clave que creaste en el paso 4.
En Ajustes > Salida, con el modo de salida Avanzado, estos valores son un buen punto de partida para 720p:
- Codificador de vídeo: x264, o el codificador por hardware de tu tarjeta gráfica si lo tienes.
- Control de la tasa: CBR con Tasa de bits de 3000 a 4500 kbps.
- Intervalo de fotogramas clave: 2 segundos.
En Ajustes > Vídeo, usa una Resolución de salida de 1280x720 a 30 FPS. Pulsa Iniciar transmisión y comprueba tu canal en https://stream.your_domain.
La tasa de bits que envías desde OBS no debe superar el 80 % de tu velocidad de subida. Owncast recodifica esa señal según las calidades definidas en Configuration > Video: si el servidor tiene pocas vCPU, deja una sola calidad y elige un preset de CPU más rápido.
Paso 8: Moderar el chat
El chat está activo por defecto y cualquiera puede escribir con un nombre elegido al entrar. Desde el panel de administración puedes:
- Ver y ocultar mensajes en Chat > Messages.
- Expulsar o bloquear usuarios, y dar a otros el rol de moderador, en Chat > Users. Los moderadores pueden ocultar mensajes desde la propia página del stream.
- Desactivar el chat o bloquear nombres de usuario concretos en Configuration > Chat.
Solución de problemas
OBS dice que no puede conectar con el servidor. Comprueba que Owncast escucha en el 1935 y que UFW lo permite:
sudo ss -tlnp | grep 1935
sudo ufw status | grep 1935
Si todo está bien, revisa el registro mientras OBS intenta conectar; una clave incorrecta aparece como un rechazo de la conexión:
sudo journalctl -u owncast -f
La emisión se corta o va a saltos. El servidor no transcodifica a tiempo. Vigila el uso de CPU con htop durante la emisión; si está al 100 %, reduce el número de calidades o la resolución en Configuration > Video, o baja la tasa de bits en OBS.
El chat no carga o se desconecta. Faltan las cabeceras de WebSocket en Nginx. Comprueba que tu bloque location incluye proxy_http_version 1.1 y las líneas Upgrade y Connection, y recarga Nginx.
Conclusión
Tienes Owncast funcionando como servicio en Ubuntu 24.04, con la administración protegida, HTTPS mediante Nginx y una emisión desde OBS verificada. Como siguientes pasos, puedes configurar un almacenamiento compatible con S3 en Configuration > Server Setup para servir los segmentos de vídeo desde fuera del servidor cuando crezca la audiencia, personalizar la página del canal con tu logotipo y programar una copia de seguridad del directorio /opt/owncast/data.
