Este proyecto proporciona un servidor de streaming en Docker que garantiza que tu stream en Kick nunca se caiga. Utiliza Nginx-RTMP para recibir tu señal (desde OBS, vMix, etc.) y FFmpeg para reenviarla a Kick.
Si tu señal de origen se interrumpe, el servidor cambia automáticamente a un video de fallback (fondo) sin cerrar la conexión con Kick.
- Docker
- Docker Compose
- Una cuenta de Kick con Stream URL y Stream Key.
| Nivel | CPU | RAM | FPS | Bitrate recomendado | Preset recomendado |
|---|---|---|---|---|---|
| Mínimo | 1–2 vCPU | 1 GB | 30 | 4500k–6000k | superfast o ultrafast |
| Recomendado | 2–4 vCPU | 2–4 GB | 60 | 6000k–8000k | veryfast |
| Óptimo | 4+ vCPU | 4+ GB | 60 | 8000k–12000k | veryfast o fast |
Configura FFMPEG_BITRATE, FFMPEG_PRESET y STREAM_FPS en tu .env según el nivel de tu VPS. Si el stream va a tirones o la CPU va al 100%, baja el bitrate, reduce los FPS (ej. 30) o usa un preset más rápido (ultrafast < superfast < veryfast < fast).
- Clonar/Descargar los archivos en una carpeta.
- Configurar credenciales:
Copia el archivo de ejemplo:
Edita
cp .env.example .env
.envy añade tus datos de Kick:KICK_STREAM_URL=rtmps://tu-servidor-de-kick KICK_STREAM_KEY=sk_tu-clave-de-retransmision
- Video de Fallback:
Coloca un video llamado
fallback.mp4en la carpetaassets/(o configuraFALLBACK_VIDEOen.env). Si el archivo no existe, el servidor generará automáticamente video negro con silencio para que la conexión con Kick no se corte. - Calidad de video (opcional): Si la imagen se ve pixelada, ajusta en
.env:FFMPEG_BITRATE=10000k # Bitrate (10000k recomendado para 1080p60 gaming) FFMPEG_BUFSIZE=20000k # Buffer (2× bitrate) FFMPEG_PRESET=veryfast # veryfast, superfast, ultrafast (más rápido = menos calidad) GOP_SIZE=15 # Más bajo = más keyframes = menos pixelación en movimientos bruscos
- Movimientos bruscos / caídas (gaming): Si el stream se cae o se pixela al mover la cámara rápido:
En OBS, usa la misma tasa de bits (10000) y 60 FPS.
FFMPEG_BITRATE=10000k # O 12000k si tu VPS y Kick lo permiten GOP_SIZE=15 # Keyframes más frecuentes = recuperación más rápida UDP_FIFO_SIZE=5000000 # Buffer UDP mayor (o 10000000 si sigue glitcheando)
- Bandas horizontales / tearing (opcional): Si el stream se ve "glitcheado" o con bandas, aumenta el buffer UDP:
UDP_FIFO_SIZE=5000000 # Default para gaming. Prueba 10000000 si persiste STREAM_FPS=60 # Debe coincidir con OBS (60 para gaming, 30 para ahorrar)
- Cortes entre OBS y fallback (opcional): Si el stream parpadea entre tu señal y el fallback, aumenta el debounce. Si el fallback tarda en aparecer, bájalo o ponlo a 0:
FALLBACK_DELAY=0.5 # Segundos antes de activar fallback (default 0.5). 0 = inmediato. Más alto = menos parpadeo
- Levantar el servidor:
docker compose up -d --build
- Configurar OBS:
- Codificador: x264 o NVIDIA NVENC H.264
- Tasa de bits: La misma que
FFMPEG_BITRATEen tu.env(ej. 10000 para10000k, 8000 para8000k) - Servicio: Personalizado
- Servidor:
rtmp://localhost:1935/live(ortmp://localhost:1935si OBS pide servidor y app por separado) - Clave de retransmisión:
stream
- El servidor Docker está "siempre encendido", transmitiendo el video de fallback a Kick.
- Cuando empiezas a emitir desde OBS a
rtmp://localhost:1935/live/stream, el servidor detecta la señal. - Tu señal en vivo sustituye al video de fallback en el pipe hacia Kick.
- Si dejas de transmitir, el servidor vuelve a enviar el video de fallback (o video negro si no hay archivo); el proceso que envía datos a Kick no se detiene.
- Ver logs en tiempo real:
docker logs -f kick-stream-server - Detener el servidor:
docker compose down - Reiniciar el servidor:
docker compose restart
Hecho con con fines de streaming ininterrumpido.