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):

  1. Cambiar contraseña de administrador
  2. Configurar nombre del stream y descripción
  3. Subir logo e imagen de portada
  4. 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) a slow (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.