Documentación de ComusThumbz
Iniciar Sesión

Configuración de transmisión de vídeo

Configuración del servidor de vídeo

Ubicación: N/A (Server Configuration)
Camino del menú: N/A - Configuración del lado del servidor
Nivel de acceso: System Administrator / Acceso a la raíz del servidor
Última actualización: 2026-01-02


Sinopsis

Esta guía cubre la configuración completa del servidor de streaming WebRTC de LiveKit para la función de streaming de webcam en vivo de ComusThumbz. LiveKit permite streaming de vídeo de ultra-bajo-latencia (sub-segundo) de navegador a navegador, permitiendo a los creadores transmitir en directo desde sus webcams sin requerir software de streaming de terceros.

La función de streaming en vivo permite:

  • Creadores para transmitir en directo desde settings/golive.php
  • Visores para ver las corrientes en watchstream.php
  • Chat interactivo con mensajes en tiempo real y consejos
  • Shows privados con facturación por minuto token
  • Control de acceso (libre, contraseña, sólo para suscriptores, PPV, puntas)

Estado: Diagrama mostrando: Navegador → Servidor LiveKit → Visores
Anotaciones: Mostrar el flujo WebRTC de la emisora al servidor a los espectadores
--


Requisitos del sistema

Configuración Necesario:
LiveKit requiere un servidor dedicado o VPS con puertos y recursos específicos. No puede funcionar en alojamiento compartido.

Requisitos del servidor

RequisitosMínimoRecomendadoNotas
OSUbuntu 20.04 / Debian 10Ubuntu 22.04 / Debian 12Linux
RAM2 GB4+ GBEscalas con espectadores concurrentes
CPU2 núcleos4+ núcleosTranscodificación de vídeo es intensivo en CPU
Almacenamiento20 GB50+ GBPara registros y archivos temporales
Red100 Mbps1 GbpsEscalas de ancho de banda con visores

Puertos requeridos

Advertencia:
Estos puertos deben estar abiertos en su cortafuegos para que LiveKit funcione:
PuertoProtocoloPropósitoNecesario
7880TCPWebSocket signalingSí.
7881TCPRTC sobre el retroceso TCPSí.
50000-60000UDPTransporte de medios WebRTCSí.
443TCPHTTPS (producción)Recomendado

Requisitos de PHP (ComusThumbz Server)

RequisitosMínimoNotas
Versión PHP8.0+Necesario para la generación de token JWT
hashhmac()NecesarioPara la firma HS256 JWT
jsonencode()NecesarioPara carga útil de token
al azarbytes()NecesarioPara la generación de clave de flujo

PHP requerido Extensiones

ExtensiónNecesarioPropósito
jsonSí.JWT encoding
openslSí.Generación clave aleatoria
mbstringSí.Manejo de cuerdas

Herramientas externas

HerramientaNecesarioVersiónComando de control
DockerSí.20.10+docker --version
Docker ComposeSí.2.0+docker compose version
curlSí.Cualquiercurl --version
openslSí.Cualquieropenssl version

Requisitos de instalación

Configuración de Config (dat/config.inc.php)

VariableTipoDefaultDescripción
LIVEKITHOSTcuerdawss://your-domain/livekit/URL LiveKit WebSocket
LIVEKITAPIKEYcuerda(generado)Clave de API para la firma de fichas
LIVEKITAPISECRETcuerda(generado)Secreto para firmar fichas

Entradas de configuración de ejemplo:

// LiveKit WebRTC Streaming Configuration
define('LIVEKITHOST', 'wss://streaming.yourdomain.com/livekit/');
define('LIVEKITAPIKEY', 'APIxxxxxxxxxxxxx');
define('LIVEKITAPISECRET', 'your-secret-key-here');

Dependencias de archivos

Sendero de archivoTipo de dependenciaNecesarioNotas
ct/api/v1/controllers/LiveStreamController.phpAPI EndpointSí.API de transmisión principal
ct/api/v1/helpers/LiveKitHelper.phpClase de ayudaSí.JWT token generation
ct/includes/TokenBalanceManager.phpIncluidoSí.Token transactions
settings/golive.phpPáginaSí.Página de difusión del Creador
watchstream.phpPáginaSí.Viewer page
livestreams.phpPáginaSí.Directorio de Stream
livekit-client.umd.min.jsCDN ScriptSí.LiveKit navegador SDK

Carpetas requeridas

CarpetaPermisoCreado porNotas
ct/config/755Configuración ScriptArchivo de config LiveKit
ct/logs/livekit/755Instala ScriptLogros de LiveKit

Architecture Overview

Cómo funciona LiveKit Streaming

┌─────────────────┐     ┌──────────────────┐     ┌─────────────────┐
│   BROADCASTER   │     │  LIVEKIT SERVER  │     │    VIEWERS      │
│  (Creator)      │────▶│  (Media Server)  │────▶│  (Subscribers)  │
│  golive.php    │     │  Docker Container│     │ watchstream.php│
└─────────────────┘     └──────────────────┘     └─────────────────┘
        │                        │                        │
        │                        │                        │
        ▼                        ▼                        ▼
   WebRTC Publish          SFU Routing            WebRTC Subscribe

Video Track - Room Management - Video TrackAudio Track - Participant Auth - Audio Track

  • Data Channel - Media Relay - Chat Messages

Resumen de los componentes

ComponenteUbicaciónPropósito
Servidor LiveKitDocker (Port 7880)RedRTC media routing
LiveStreamControllerct/api/v1/Stream management API
LiveKitHelperct/api/v1/helpers/JWT token generation
Vamos.vivo.phpsettings/Interfaz de transmisión creador
watchstream.phpProject rootInterfaz de visualización
vivostreams.phpProject rootDirectorio de Stream

Métodos de instalación

Sugerencia:
El script automatizado maneja la instalación, configuración y generación de clave API automáticamente.

Paso 1: Subir el script de configuración

Subir tools/setuplivekitserver.sh a su servidor de streaming.

Paso 2: Hacer ejecutable y correr

# Make the script executable
chmod +x setuplivekitserver.sh

Corre con sudo

sudo ./setuplivekitserver.sh

Paso 3: Seguir los problemas interactivos

El guión:

  1. Detectar su sistema operativo (Ubuntu/Debian)
  2. Instalar Docker si no está presente
  3. Configurar reglas de cortafuegos
  4. Autodetecta a tu público IP
  5. Generar claves de API
  6. Crear en vivo Configuración del kit
  7. Iniciar el contenedor LiveKit
  8. Actualice su configuración PHP

Paso 4: Tenga en cuenta sus credenciales

Al final, el script sale:

API Credentials:

  API Key: APIxxxxxxxxxxxxxxxx

  API Secret: xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
Advertencia:
Guarda estas credenciales inmediatamente! Los necesitará para la configuración de PHP.

Método 2: Instalación manual (Debian 12)

Para el control manual o solución de problemas, siga estos pasos:

Paso 1: Instalar Docker

# Update system
sudo apt update && sudo apt upgrade -y

Instalar requisitos

sudo apt install -y apt-transport-https ca-certificates curl gnupg lsb-release

Añadir Docker GPG llave

curl -fsSL https://download.docker.com/linux/debian/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg

Agregar el repositorio Docker

echo "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/debian $(lsbrelease -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null

Instala Docker

sudo apt update
sudo apt install -y docker-ce docker-ce-cli containerd.io docker-compose-plugin

Inicio y habilitar Docker

sudo systemctl start docker
sudo systemctl enable docker

Verificar la instalación

docker --version

Paso 2: Configure Firewall

# UFW (Ubuntu/Debian)
sudo ufw allow 7880/tcp comment "LiveKit WebSocket"
sudo ufw allow 7881/tcp comment "LiveKit RTC TCP"
sudo ufw allow 50000:60000/udp comment "LiveKit WebRTC Media"

O iptables directamente

sudo iptables -A INPUT -p tcp --dport 7880 -j ACCEPT
sudo iptables -A INPUT -p tcp --dport 7881 -j ACCEPT
sudo iptables -A INPUT -p udp --dport 50000:60000 -j ACCEPT

Paso 3: Generar claves de API

# Generate API Key (16 bytes, base64)
APIKEY=$(openssl rand -base64 16 | tr -d '/' | tr '+' '-')
echo "API Key: $APIKEY"

Generar Secret de API (32 bytes, base64)

APISECRET=$(openssl rand -base64 32 | tr -d '/' | tr '+' '-')
echo "API Secret: $APISECRET"

Paso 4: Crear configuración de LiveKit

Crear /opt/livekit/livekit-config.yaml:

# LiveKit Media Server Configuration
port: 7880
rtc:
portrangestart: 50000
portrangeend: 60000
tcpport: 7881
nodeip: YOURPUBLICIP

llaves:

YOURAPIKEY: YOURAPISECRET

habitación:

autocreate: true
emptytimeout: 300
maxparticipants: 1000

logging:
level: info
sample: false

Advertencia:
Reemplazamiento YOUR
PUBLICIP, YOURAPIKEY, y YOURAPISECRET con sus valores reales!

Paso 5: Crear archivo Docker Compose

Crear /opt/livekit/docker-compose.yml:

version: '3.9'

servicios:

livekit:
image: livekit/livekit-server:latest
containername: livekit
restart: unless-stopped
networkmode: host
command: --config /livekit.yaml
volumes:
  • ./livekit-config.yaml:/livekit.yaml:ro

Paso 6: Comience LiveKit

cd /opt/livekit
docker compose up -d

Verifica que está funcionando.

docker ps
docker logs livekit

Configuración de producción

SSL/TLS Configuración con Nginx

Configuración Necesario:
Para la producción, Live Kit DEBE ser accedido a través de HTTPS/WSS para WebRTC para trabajar en los navegadores modernos.

Paso 1: Instalar Nginx y Certbot

sudo apt install -y nginx certbot python3-certbot-nginx

Paso 2: Crear configuración Nginx

Crear /etc/nginx/sites-available/livekit:

# LiveKit WebRTC Streaming Proxy

Lugar en /etc/nginx/sites-disponible/livekit

upstream livekit {
server 127.0.0.1:7880;
}

server {
listen 80;
servername streaming.yourdomain.com;
# Redirect HTTP to HTTPS
return 301 https://$host$requesturi;
}
server {
listen 443 ssl http2;
servername streaming.yourdomain.com;
# SSL certificates (Let's Encrypt)
sslcertificate /etc/letsencrypt/live/streaming.yourdomain.com/fullchain.pem;
sslcertificatekey /etc/letsencrypt/live/streaming.yourdomain.com/privkey.pem;
# SSL settings
sslprotocols TLSv1.2 TLSv1.3;
sslpreferserverciphers on;
sslciphers XXXXX-XXXXX-AES128-XXX-SHA256:XXXXX-RSA-AES128-GCM-SHA256;
# LiveKit WebSocket proxy
location /livekit/ {
proxypass http://livekit/;
proxyhttpversion 1.1;
# WebSocket upgrade headers
proxysetheader Upgrade $httpupgrade;
proxysetheader Connection "upgrade";
# Standard proxy headers
proxysetheader Host $host;
proxysetheader X-Real-IP $remoteaddr;
proxysetheader X-Forwarded-For $proxyaddxforwardedfor;
proxysetheader X-Forwarded-Proto $scheme;
# Timeouts for long-lived connections
proxyreadtimeout 86400s;
proxysendtimeout 86400s;
# Disable buffering for real-time
proxybuffering off;
}
}

Paso 3: Habilitar y obtener certificado SSL

# Enable site
sudo ln -s /etc/nginx/sites-available/livekit /etc/nginx/sites-enabled/

Configuración de prueba

sudo nginx -t

Obtenga certificado SSL

sudo certbot --nginx -d streaming.yourdomain.com

Restart Nginx

sudo systemctl restart nginx

Configuración de PHP

Actualización config.inc.php

Añadir estas líneas a ct/dat/config.inc.php:

// =====================================================
// LiveKit WebRTC Streaming Configuration
// =====================================================
// LiveKit WebSocket URL
// Development: ws://YOURIP:7880
// Production: wss://streaming.yourdomain.com/livekit/
define('LIVEKITHOST', 'wss://streaming.yourdomain.com/livekit/');

// API credentials (from setup script)
define('LIVEKITAPIKEY', 'APIxxxxxxxxxxxxx');
define('LIVEKITAPISECRET', 'your-32-byte-secret-key-here');

Enable Live Streaming Feature

Navigate a Panel de Admin → Ajustes → Modos de Característica y permitir:

  • featurelivestreaming - Activar/desactivar transmisión en vivo

O añadir directamente a la base de datos:

INSERT INTO tblFeatureToggles (featurekey, featureenabled, featuregroup)
VALUES ('featurelivestreaming', 1, 'creatorfeatures')
ON DUPLICATE KEY UPDATE featureenabled = 1;

API Endpoints

El sistema de streaming en vivo proporciona estos puntos finales de API:

Stream Management

MétodoEndpointDescripción
POST/api/v1/live/startIniciar una nueva secuencia
POST/api/v1/live/{id}/endFinalizar una secuencia
#/api/v1/live/activeLista de corrientes activas
#/api/v1/live/{id}Obtener detalles de la secuencia
POST/api/v1/live/{id}/joinÚnase como espectador
POST/api/v1/live/{id}/leaveDeja la corriente

Chat " Interacciones

MétodoEndpointDescripción
#/api/v1/live/{id}/chatObtener mensajes de chat
POST/api/v1/live/{id}/chatEnviar mensaje de chat
POST/api/v1/live/{id}/tipEnviar propina
POST/api/v1/live/{id}/private-requestSolicitud de show privado

Control de acceso

MétodoEndpointDescripción
POST/api/v1/live/{id}/unlockDesbloquear la corriente PPV
POST/api/v1/live/{id}/verify-passwordVerificar contraseña de flujo

Páginas de Frontend

Página de transmisión del Creador (settings/golive.php)

Características:

  • Webcam vista previa y selección
  • Selección de micrófonos
  • Título y descripción de la secuencia
  • Selección de tipo de acceso (gratuito, contraseña, suscriptores, PPV, punta)
  • Panel de chat en tiempo real
  • Notificaciones de propina
  • Gestión de solicitudes privadas
  • Visualización de cuenta de espectador

Requisitos de acceso:

  • El usuario debe estar conectado
  • El usuario debe tener iscreator = 1 tblCMSUsers
  • featurelivestreaming debe estar habilitado

Página de visualización (watchstream.php)

Características:

  • Reproductor de vídeo en vivo
  • Chat en tiempo real
  • Tip enviando
  • Solicitudes de demostración privadas
  • Contador
  • Barra lateral de perfil creador

Stream Directorylivestreams.php)

Características:

  • Grid de corrientes activas
  • Insignias de cuenta de espectador
  • Creador avatares
  • Avances de corriente (snapshots)
  • Filtro por categoría

Prueba tu configuración

Paso 1: Verificar Servidor LiveKit

# Check container status
docker ps | grep livekit

Registros de comprobación

docker logs livekit

Prueba WebSocket (debería devolver el error, lo que significa que está respondiendo)

curl http://localhost:7880

Expected: {"code":"InvalidArgument"...}

Paso 2: Prueba de la consola del navegador

Abrir herramientas dev del navegador y ejecutar:

// Test WebSocket connection
const ws = new WebSocket('wss://streaming.yourdomain.com/livekit/');
ws.onopen = () => console.log('Connected to LiveKit');
ws.onerror = (e) => console.error('Connection error:', e);

Paso 3: Prueba el flujo de trabajo completo

Inicie sesión como una cuenta creadora

  1. Navigate a settings/golive.php
  2. Haga clic en "Go Live" para empezar a emitir
  3. Abra una segunda ventana navegador/incognito
  4. Navigate a livestreams.php
  5. Haga clic en su flujo para ver

Tareas comunes

Restaring LiveKit

# Restart container
docker restart livekit

O reinicio completo

docker compose down
docker compose up -d

Ver los registros

# Real-time logs
docker logs -f livekit

Últimas 100 líneas

docker logs --tail 100 livekit

Actualizar LiveKit

# Pull latest image
docker pull livekit/livekit-server:latest

Reinicie con nueva imagen

docker compose down
docker compose up -d

Checking Active Rooms

# Using LiveKit CLI (if installed)
livekit-cli list-rooms --url ws://localhost:7880 --api-key YOURKEY --api-secret YOURSECRET

Solución de problemas

Errores comunes

Error:
Error: "LiveKit API key y secret must be configured"

Causa: LIVEKITAPIKEY o LIVEKITAPISECRET no definido en config.inc.php

Solución: Añada la configuración LiveKit a su archivo config.inc.php:

define('LIVEKITHOST', 'wss://streaming.yourdomain.com/livekit/');

define('LIVEKITAPIKEY', 'your-api-key');

define('LIVEKITAPISECRET', 'your-api-secret');

Error:
Error: "La conexión de WebSocket falló" o "Connection refused"

Causa: Puertos de bloqueo de cortafuegos o LiveKit no se ejecuta

Solución:

  1. Verificar en vivo Kit está corriendo: docker ps | grep livekit
  2. Comprueba el cortafuegos: sudo ufw status
  3. Puertos abiertos requeridos: sudo ufw allow 7880/tcp
  4. Compruebe la configuración proxy Nginx

Error:
Error: "Sólo los creadores activos pueden ir en directo"

Causa: El usuario no tiene estado creador

Solución:

  1. Check user has iscreator = 1 tblCMSUsers
  2. Check tblCreatorProfiles tiene una entrada con status = 'active'

Error:
Error: "Stream not connecting" (video no aparece)

Causa:Generalmente SSL/WSS desajustes o problemas de CORS

Solución:

  1. Asegurar la vida útilHOST utiliza wss:// para sitios HTTPS
  2. Check Nginx Los encabezados WebSocket están configurados
  3. Verificar certificado SSL es válido
  4. Controle la consola del navegador para errores específicos

Error:
Error: "Token expired" o fallas de autenticación

Causa: Tiempo del servidor deriva o secreto de API incorrecto

Solución:

  1. Tiempo del servidor Sync: sudo ntpdate pool.ntp.org
  2. Verificar APILos partidos de SECRET en config.yaml y config.inc.php
  3. Tokens regenerados por la corriente de reiniciación

Lista de verificación de depuración

  1. LiveKit Container Running?
docker ps | grep livekit
  1. ¿Portuajes abiertos?
sudo netstat -tlnp | grep -E '7880|7881'
  1. ¿Config Values Match?
  • Check livekit-config.yaml API key/secret
  • Check config.inc.php API key/secret
  • Deben ser idénticos.
  1. Nginx Proxying ¿Correcto?
curl -v https://streaming.yourdomain.com/livekit/
  1. ¿Valide de certificado SSL?
openssl sclient -connect streaming.yourdomain.com:443

Performance Tuning

Para los espectadores concurrentes

Modificar livekit-config.yaml:

# Increased limits for production
rtc:
  portrangestart: 40000
  portrangeend: 50000  # 10,000 ports for more viewers

habitación:
maxparticipantes: 5000 # Aumento de 1000

logging:
level: warn # Reduce logging overhead

Límites de recursos de Docker

Actualización docker-compose.yml:

services:
  livekit:
    image: livekit/livekit-server:latest
    containername: livekit
    restart: unless-stopped
    networkmode: host
    command: --config /livekit.yaml
    volumes:
  • ./livekit-config.yaml:/livekit.yaml:ro
    deploy:
      resources:
        limits:
          cpus: '4'
          memory: 4G
        reservations:
          cpus: '2'
          memory: 2G

Consideraciones de seguridad

Advertencia:
La transmisión en vivo implica video en tiempo real - la seguridad es crítica.

Buenas prácticas

  1. Utilice siempre HTTPS/WSS en producción
  • WebRTC requiere contextos seguros en los navegadores modernos
  • Usemos Encrypt para certificados SSL gratuitos
  1. Proteger las credenciales de API
  • Nunca exponga LIVEKITAPISECRET en código de frontend
  • Las fichas son generadas lado servidor solamente
  1. Limitación de la tasa de ejecución
  • Prevención de chat basura
  • Intentes de inicio de corriente limitada
  1. Monitor for abuse
  • Metadatos de flujo de registro
  • Examen de las corrientes comunicadas
  1. Configuración de firewall
  • Sólo puertos abiertos requeridos
  • Considere geoblocking si es necesario

  • Aplicación en curso - .docs/LIVESTREAMINGIMPLEMENTATION.md
  • Configuración de LiveKit Inicio rápido - .docs/LIVEKITSETUP.md
  • Guía de instalación de Debian 12 - .docs/LIVEKITINSTALLDEBIAN12.md
  • Corrientes de corriente - .docs/LIVESTREAMINGFIXES.md
  • Configuración Script - tools/setuplivekitserver.sh

Pendientes translatables

Las siguientes claves de traducción son utilizadas por la función de streaming en vivo:

ClaveInglés predeterminadoUsado
livestreaming.title"Viva"Golive. Título de php
livestreaming.watchtitle"Watch Live"relojstream.php título
livestreaming.browsetitle"Live Streams"livestreams.php título
livestreaming.startstream"Comienza a Streaming"Botón de inicio
livestreaming.endstream"End Stream"Botón final
livestreaming.viewers"Vistas"Etiquetas de cuenta de espectador
livestreaming.chatplaceholder"Escribe un mensaje..."Entrada de chat
livestreaming.sendtip"Send Tip"Tip botón
livestreaming.privaterequest"Request Private Show"Botón privado
livestreaming.accessfree"Libre"Tipo de acceso
livestreaming.accesspassword"Password Protected"Tipo de acceso
livestreaming.accesssubscribers"Solamente Suscribientes"Tipo de acceso
livestreaming.accessppv"Pay-Per-View"Tipo de acceso
livestreaming.accesstipgoal"Tip Goal"Tipo de acceso

Instala la lista de verificación Script

  • [ ] Docker instalado y funcionando
  • [ ] Puertos de cortafuegos abiertos (7880, 7881, 50000-51000) --- Para el 50000-51000, esto puede necesitar ajustado como apertura tantos puertos no sólo un problema de seguridad, pero causará que el servidor de streaming falle en carga.
  • [ ] Vivir Archivo de configuración de kit creado
  • [ ] Docker Se ha creado un archivo
  • [ ] Vivir Kit contenedor iniciado
  • [ ] credenciales de API agregadas a config.inc.php
  • [ ] Migración de bases de datos 018 aplicadas
  • [ ] Migración de bases de datos 019 aplicadas (campos LiveKit)
  • [ ] Proxy inverso Nginx configurado (producción)
  • [ ] Certificado SSL obtenido (producción)
  • [ ] Función activada
  • [ ] Prueba de flujo exitoso

Cambio

FechaVersiónCambios
2026-01-021.0Guía inicial creada