Owncast: Servidor de Streaming en Vivo Self-Hosted
Owncast es una plataforma open-source de streaming en vivo que te permite emitir en directo desde tu propio servidor sin depender de Twitch, YouTube o servicios externos. Con soporte para OBS Studio, chat en tiempo real, moderación, almacenamiento S3 para grabaciones y personalización completa, Owncast es la solución ideal para streamers que quieren control total sobre su contenido. Esta guía cubre la instalación completa de Owncast en Linux.
Requisitos Previos
- Ubuntu 20.04+, Debian 11+, CentOS 8+ o Rocky Linux 8+
- Mínimo 2 GB de RAM (4 GB recomendados para transcodificación)
- CPU con al menos 2 núcleos (4+ recomendados para buena calidad de stream)
- Ancho de banda de subida abundante (mínimo 10 Mbps para 1080p)
- Puerto 8080 (web) y 1935 (RTMP) abiertos
- Dominio con DNS apuntando al servidor
Instalación de Owncast
Instalación con el Script Oficial
# Crear directorio para Owncast
sudo mkdir -p /opt/owncast
cd /opt/owncast
# Descargar e instalar con el script oficial
curl -s https://owncast.online/install.sh | bash
# El script descarga e instala la última versión automáticamente
# Los archivos se instalan en el directorio actual (/opt/owncast)
ls -la /opt/owncast/
Instalación Manual del Binario
# Descargar la última versión manualmente
OWNCAST_VERSION="0.1.3"
wget "https://github.com/owncast/owncast/releases/download/v${OWNCAST_VERSION}/owncast-${OWNCAST_VERSION}-linux-64bit.zip"
# Extraer
sudo apt install -y unzip # o dnf install unzip
unzip owncast-${OWNCAST_VERSION}-linux-64bit.zip -d /opt/owncast/
# Dar permisos de ejecución
sudo chmod +x /opt/owncast/owncast
# Instalar FFmpeg (necesario para transcodificación)
sudo apt install -y ffmpeg # Ubuntu/Debian
# sudo dnf install -y ffmpeg # CentOS/Rocky (requiere RPM Fusion)
Crear Usuario y Servicio Systemd
# Crear usuario dedicado
sudo useradd -r -s /bin/false -d /opt/owncast owncast
sudo chown -R owncast:owncast /opt/owncast/
# Crear el servicio systemd
sudo tee /etc/systemd/system/owncast.service << 'EOF'
[Unit]
Description=Owncast Live Streaming Server
After=network.target
[Service]
Type=simple
User=owncast
Group=owncast
WorkingDirectory=/opt/owncast
ExecStart=/opt/owncast/owncast -database /opt/owncast/data/owncast.db -webserverport 8080 -rtmpport 1935
Restart=always
RestartSec=5
StandardOutput=journal
StandardError=journal
[Install]
WantedBy=multi-user.target
EOF
sudo systemctl daemon-reload
sudo systemctl enable --now owncast
# Verificar el estado
sudo systemctl status owncast
Instalación con Docker
# Crear directorio para datos persistentes
mkdir -p ~/owncast/data
# Ejecutar Owncast con Docker
docker run -d \
--name owncast \
--restart unless-stopped \
-v ~/owncast/data:/app/data \
-p 8080:8080 \
-p 1935:1935 \
gabekangas/owncast:latest
Con Docker Compose:
cat > ~/owncast/docker-compose.yml << 'EOF'
version: '3'
services:
owncast:
image: gabekangas/owncast:latest
container_name: owncast
restart: unless-stopped
volumes:
- ./data:/app/data
ports:
- 8080:8080
- 1935:1935
EOF
docker compose up -d
Configuración del Panel de Administración
Acceder al panel de administración en http://TU-SERVIDOR:8080/admin:
- Usuario:
admin - Contraseña:
abc123(cambiar inmediatamente)
Configuraciones esenciales:
# Abrir el firewall para los puertos necesarios
# UFW
sudo ufw allow 8080/tcp comment "Owncast Web"
sudo ufw allow 1935/tcp comment "Owncast RTMP"
sudo ufw reload
# firewalld
sudo firewall-cmd --permanent --add-port=8080/tcp
sudo firewall-cmd --permanent --add-port=1935/tcp
sudo firewall-cmd --reload
Desde el panel web (Administración > General):
- Cambiar contraseña de administrador
- Configurar nombre del stream y descripción
- Subir logo e imagen de portada
- Configurar etiquetas del stream
Configuración de calidad de vídeo (Administración > Calidad del vídeo):
- Resolución: 1080p / 720p / 480p
- Bitrate: 3000-6000 kbps para 1080p, 1500-3000 para 720p
- Framerate: 30 o 60 fps
- Perfil CPU:
veryfast(menos calidad, menos CPU) aslow(más calidad, más CPU)
Configuración de OBS Studio
Configurar OBS Studio para transmitir a tu servidor Owncast:
En OBS: Ajustes > Emisión:
- Servicio: Personalizado...
- Servidor:
rtmp://TU-SERVIDOR:1935/live - Clave de emisión: obtener desde el panel Owncast (Administración > General > Stream Key)
Configuración recomendada de OBS para streaming:
Ajustes > Salida > Avanzado
- Codificador: x264 (o NVENC si tienes GPU NVIDIA)
- Velocidad de bits: 3500 kbps (ajustar según ancho de banda)
- Fotogramas B: 2
- Perfil: high
- Preestablecido: veryfast
Ajustes > Vídeo
- Resolución base: 1920x1080
- Resolución de salida: 1280x720 (o 1920x1080 si tienes buena CPU)
- FPS: 30
Probar la clave de stream desde la terminal:
# Probar emisión RTMP con FFmpeg (para verificar que el servidor funciona)
ffmpeg -re -i /ruta/al/video.mp4 \
-c:v libx264 -preset veryfast -b:v 2500k \
-c:a aac -b:a 128k \
-f flv rtmp://localhost:1935/live/TU-STREAM-KEY
Moderación del Chat
Owncast incluye chat en tiempo real con funciones de moderación:
# El chat está disponible en la interfaz web del stream
# Administración > Chat > Configuración
# Opciones de moderación disponibles:
# - Activar/desactivar el chat
# - Modo solo seguidores (usuarios registrados)
# - Palabras prohibidas/filtros
# - Moderadores asignados
# - Baneos de usuarios e IPs
Configurar moderadores desde el panel:
- Administración > Usuarios > Asignar rol de moderador
- Los moderadores pueden silenciar, banear y eliminar mensajes
Para personalizar el chat desde la API:
# Enviar mensaje del sistema via API
curl -X POST \
-H "Content-Type: application/json" \
-u admin:TU_CONTRASENA \
-d '{"body": "¡Bienvenidos al stream!", "displayName": "Servidor"}' \
http://localhost:8080/api/integrations/chat/send
# Ver usuarios conectados
curl -u admin:TU_CONTRASENA \
http://localhost:8080/api/admin/chat/clients | python3 -m json.tool
Almacenamiento S3 para Grabaciones
Configurar S3 (o compatible como MinIO o Wasabi) para guardar las grabaciones del stream:
En el panel: Administración > Almacenamiento externo > Habilitar
# Configuración necesaria:
# - Bucket S3: nombre del bucket
# - Región: eu-west-1 (o la región de tu proveedor)
# - Endpoint: https://s3.amazonaws.com (o URL de MinIO)
# - Access Key y Secret Key de AWS/MinIO
# - Fuerza de path: habilitar para MinIO y servicios compatibles
Para usar MinIO como almacenamiento S3 local:
# Instalar MinIO (Docker)
docker run -d \
--name minio \
-p 9000:9000 \
-p 9001:9001 \
-v ~/minio/data:/data \
-e MINIO_ROOT_USER=admin \
-e MINIO_ROOT_PASSWORD=contrasena-segura \
quay.io/minio/minio server /data --console-address ":9001"
# Crear el bucket para Owncast
# Acceder al panel MinIO en http://TU-SERVIDOR:9001
# Crear un bucket llamado "owncast"
# Configurar en Owncast:
# Endpoint: http://TU-SERVIDOR:9000
# Access Key: admin
# Secret Key: contrasena-segura
# Bucket: owncast
Proxy Inverso con Nginx y SSL
# Instalar Nginx y Certbot
sudo apt install -y nginx certbot python3-certbot-nginx
# Obtener certificado SSL
sudo certbot --nginx -d stream.tu-dominio.com
# Configuración de Nginx para Owncast
sudo tee /etc/nginx/sites-available/owncast << 'EOF'
server {
listen 80;
server_name stream.tu-dominio.com;
return 301 https://$host$request_uri;
}
server {
listen 443 ssl http2;
server_name stream.tu-dominio.com;
ssl_certificate /etc/letsencrypt/live/stream.tu-dominio.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/stream.tu-dominio.com/privkey.pem;
# Proxy al servidor Owncast
location / {
proxy_pass http://127.0.0.1:8080;
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 https;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
# Streaming HLS - sin buffering
proxy_buffering off;
proxy_read_timeout 3600s;
}
}
EOF
sudo ln -s /etc/nginx/sites-available/owncast /etc/nginx/sites-enabled/
sudo nginx -t && sudo systemctl reload nginx
Actualizar la URL base en el panel de Owncast:
- Administración > General > URL del servidor:
https://stream.tu-dominio.com
Solución de Problemas
Owncast no inicia:
# Ver logs del servicio
sudo journalctl -u owncast -f
# Verificar que FFmpeg está disponible
sudo -u owncast which ffmpeg
sudo -u owncast ffmpeg -version
# Comprobar permisos del directorio
ls -la /opt/owncast/
OBS no puede conectar (error RTMP):
# Verificar que el puerto RTMP está abierto
nc -zv TU-SERVIDOR 1935
# Comprobar que Owncast está escuchando en el puerto
sudo ss -tlnp | grep 1935
# Ver logs en tiempo real mientras intentas conectar desde OBS
sudo journalctl -u owncast -f
El stream se ve pixelado o con lag:
# Monitorear el uso de CPU durante el stream
top -u owncast
# Reducir la calidad en el panel Owncast:
# Administración > Calidad > Cambiar a resolución menor o preset más rápido
# Verificar el ancho de banda disponible
# El bitrate de OBS no debe superar el 80% del ancho de banda de subida
El chat no carga:
# Los WebSockets deben estar configurados correctamente en Nginx
# Verificar la configuración del proxy (Upgrade y Connection headers)
sudo nginx -t
# Probar WebSocket directamente
curl -I -H "Upgrade: websocket" -H "Connection: Upgrade" https://stream.tu-dominio.com/ws
Conclusión
Owncast te da control total sobre tu infraestructura de streaming en vivo sin depender de plataformas que pueden censurar contenido o cambiar sus condiciones. Con soporte para OBS, chat en tiempo real y almacenamiento en la nube para grabaciones, es una solución completa para streamers independientes que valoran la autonomía de su servidor.


