473 lines
13 KiB
Markdown
473 lines
13 KiB
Markdown
# 📺 TubeScript - Panel de Control Web
|
||
|
||
Panel de control web interactivo para gestionar transmisiones en vivo desde YouTube hacia múltiples plataformas de redes sociales simultáneamente.
|
||
|
||
## 🎯 Características Principales
|
||
|
||
### ✨ Funcionalidades
|
||
|
||
- **🔍 Búsqueda de Videos en Vivo**: Busca transmisiones en vivo de YouTube por palabra clave
|
||
- **📺 Preview de Video**: Visualiza el video seleccionado con miniatura y datos del canal
|
||
- **🎛️ Control Multi-Plataforma**: Gestiona transmisiones a múltiples redes sociales simultáneamente
|
||
- **🔴 Switches de Activación**: Controles tipo toggle para iniciar/detener transmisiones por plataforma
|
||
- **📊 Monitoreo en Tiempo Real**: Visualiza el estado de cada transmisión con semáforos de estado
|
||
- **🔍 Seguimiento de PIDs**: Monitorea los procesos FFmpeg activos con sus identificadores
|
||
- **⚙️ Configuración Fácil**: Panel lateral intuitivo para configurar cada plataforma
|
||
|
||
---
|
||
|
||
## 🖥️ Interfaz del Usuario
|
||
|
||
### 1. Barra Lateral - Configuración de Plataformas
|
||
|
||
```
|
||
⚙️ CONFIGURACIÓN
|
||
├── Plataformas de Streaming
|
||
│ ├── YouTube
|
||
│ │ ├── [Switch] Habilitar esta plataforma
|
||
│ │ ├── 🔑 Stream Key (Requerido)
|
||
│ │ └── 🌐 RTMP URL (Opcional)
|
||
│ ├── Facebook
|
||
│ ├── Twitch
|
||
│ ├── X (Twitter)
|
||
│ ├── Instagram
|
||
│ └── TikTok
|
||
└── [Botón] 💾 Guardar Configuración
|
||
```
|
||
|
||
**URLs RTMP por Defecto:**
|
||
- **YouTube**: `rtmp://a.rtmp.youtube.com/live2`
|
||
- **Facebook**: `rtmps://live-api-s.facebook.com:443/rtmp/`
|
||
- **Twitch**: `rtmp://live.twitch.tv/app`
|
||
- **X (Twitter)**: `rtmps://fa.contribute.live-video.net/app`
|
||
- **Instagram**: `rtmps://live-upload.instagram.com:443/rtmp/`
|
||
- **TikTok**: `rtmp://push.live.tiktok.com/live/`
|
||
|
||
### 2. Pestaña: 🔍 Búsqueda
|
||
|
||
**Funcionalidades:**
|
||
- Buscar videos en vivo por palabra clave
|
||
- Ingresar URL directa de YouTube
|
||
- Ver resultados con título y canal
|
||
- Seleccionar video para transmitir
|
||
|
||
**Ejemplo de búsqueda:**
|
||
```
|
||
🔍 Buscar Video en Vivo
|
||
[Buscar transmisión en vivo de YouTube] [🔍 Buscar]
|
||
|
||
O ingresa la URL directa del video
|
||
[https://www.youtube.com/watch?v=...]
|
||
```
|
||
|
||
### 3. Pestaña: 🎛️ Control
|
||
|
||
**Vista Principal:**
|
||
```
|
||
📺 Video Seleccionado
|
||
┌─────────────────────────────────────┐
|
||
│ [Miniatura] Título del Video │
|
||
│ Canal: NombreCanal │
|
||
│ 🔴 EN VIVO │
|
||
└─────────────────────────────────────┘
|
||
|
||
🎯 Plataformas Configuradas (3)
|
||
[▶️ Iniciar Todas las Transmisiones]
|
||
[⏹️ Detener Todas las Transmisiones]
|
||
[Transmitiendo: 2/3]
|
||
|
||
📋 Redes Habilitadas y Listas para Transmitir
|
||
┌──────────────┬──────────┬─────┬────────────┬──────────────┐
|
||
│ Red Social │ Estado │ PID │ Habilitada │ Configurada │
|
||
├──────────────┼──────────┼─────┼────────────┼──────────────┤
|
||
│ YouTube │ 🟢 Activo│ 1234│ ✅ Sí │ ✅ Sí │
|
||
│ Facebook │ 🟢 Activo│ 1235│ ✅ Sí │ ✅ Sí │
|
||
│ Twitch │ ⚪ Listo │ - │ ✅ Sí │ ✅ Sí │
|
||
└──────────────┴──────────┴─────┴────────────┴──────────────┘
|
||
```
|
||
|
||
**Tarjetas de Control Individual:**
|
||
```
|
||
┌─────────────────────────────────────┐
|
||
│ 🎥 YouTube 🟢 PID: 1234│
|
||
│ │
|
||
│ Estado: TRANSMITIENDO │
|
||
│ Transmisión activa (PID: 1234) │
|
||
│ │
|
||
│ [🔴] Transmitir a YouTube │
|
||
│ │
|
||
│ ⏱️ Tiempo Activo 🔍 Proceso │
|
||
│ 00:15:32 ✅ Activo │
|
||
│ │
|
||
│ ℹ️ Detalles de Configuración ▼ │
|
||
└─────────────────────────────────────┘
|
||
```
|
||
|
||
### 4. Pestaña: 📊 Monitor
|
||
|
||
**Monitoreo en Tiempo Real:**
|
||
- Auto-refresh cada 5 segundos
|
||
- Resumen general de todas las transmisiones
|
||
- Detalle por plataforma con métricas
|
||
- Verificación de estado de procesos (PIDs)
|
||
|
||
```
|
||
📈 Resumen General
|
||
┌──────────────┬──────────┬────────────┬─────────────┐
|
||
│ Total Trans. │ 🟢 Activas│ 🔴 Errores │ ⚪ Detenidas│
|
||
│ 3 │ 2 │ 0 │ 1 │
|
||
└──────────────┴──────────┴────────────┴─────────────┘
|
||
|
||
🔍 Detalle por Plataforma
|
||
┌─────────────────────────────────────┐
|
||
│ 🟢 YouTube [⏹️ Det.] │
|
||
│ PID: 1234 │
|
||
│ Transmisión activa (PID: 1234) │
|
||
│ │
|
||
│ ⏱️ 00:15:32 ✅ Vivo 🕐 14:30:00 │
|
||
│ │
|
||
│ ℹ️ Información Técnica ▼ │
|
||
└─────────────────────────────────────┘
|
||
```
|
||
|
||
---
|
||
|
||
## 🎨 Semáforos de Estado
|
||
|
||
Los semáforos indican el estado de cada transmisión en tiempo real:
|
||
|
||
| Semáforo | Estado | Descripción |
|
||
|----------|--------|-------------|
|
||
| 🟢 | **TRANSMITIENDO** | La transmisión está activa y funcionando correctamente |
|
||
| ⚪ | **LISTO** | La plataforma está configurada pero no está transmitiendo |
|
||
| 🔴 | **ERROR** | Hubo un error en la transmisión o el proceso se detuvo |
|
||
| ⚠️ | **DESHABILITADA** | La plataforma está configurada pero deshabilitada |
|
||
|
||
---
|
||
|
||
## 🔄 Flujo de Trabajo Completo
|
||
|
||
### Paso 1: Configurar Plataformas
|
||
|
||
1. Abre el panel lateral (⚙️ Configuración)
|
||
2. Para cada plataforma:
|
||
- Activa el switch "Habilitar esta plataforma"
|
||
- Ingresa tu **Stream Key** (obligatorio)
|
||
- (Opcional) Personaliza la **RTMP URL**
|
||
3. Haz clic en "💾 Guardar Configuración"
|
||
|
||
### Paso 2: Buscar Video en Vivo
|
||
|
||
Ve a la pestaña **🔍 Búsqueda** y:
|
||
|
||
**Opción A: Buscar por palabra clave**
|
||
```
|
||
1. Escribe: "noticias" o "gaming"
|
||
2. Clic en "🔍 Buscar"
|
||
3. Selecciona un video de los resultados
|
||
```
|
||
|
||
**Opción B: URL directa**
|
||
```
|
||
1. Pega la URL completa: https://www.youtube.com/watch?v=VIDEO_ID
|
||
2. El sistema la detectará automáticamente
|
||
```
|
||
|
||
### Paso 3: Iniciar Transmisiones
|
||
|
||
Ve a la pestaña **🎛️ Control**:
|
||
|
||
**Opción A: Iniciar todas**
|
||
```
|
||
1. Clic en "▶️ Iniciar Todas las Transmisiones"
|
||
2. Todas las plataformas habilitadas comenzarán a transmitir
|
||
```
|
||
|
||
**Opción B: Iniciar individualmente**
|
||
```
|
||
1. Busca la tarjeta de la plataforma deseada
|
||
2. Activa el switch "🔴 Transmitir a [Plataforma]"
|
||
3. La transmisión comenzará en esa plataforma
|
||
```
|
||
|
||
### Paso 4: Monitorear Transmisiones
|
||
|
||
Ve a la pestaña **📊 Monitor**:
|
||
- El panel se actualiza automáticamente cada 5 segundos
|
||
- Verás el PID de cada proceso FFmpeg
|
||
- Tiempo activo de cada transmisión
|
||
- Estado del proceso (✅ Vivo / ❌ Muerto)
|
||
|
||
### Paso 5: Detener Transmisiones
|
||
|
||
**Opción A: Detener todas**
|
||
```
|
||
En la pestaña Control:
|
||
Clic en "⏹️ Detener Todas las Transmisiones"
|
||
```
|
||
|
||
**Opción B: Detener individualmente**
|
||
```
|
||
1. Desactiva el switch de la plataforma, O
|
||
2. En la pestaña Monitor, clic en "⏹️ Detener"
|
||
```
|
||
|
||
---
|
||
|
||
## 🔧 Configuración Avanzada
|
||
|
||
### Personalizar RTMP URL
|
||
|
||
Por defecto, cada plataforma tiene una URL RTMP predefinida. Si necesitas usar un servidor personalizado:
|
||
|
||
1. En la configuración de la plataforma
|
||
2. Marca "Usar URL RTMP personalizada"
|
||
3. Ingresa la URL completa: `rtmp://tu-servidor.com/live`
|
||
4. Guarda los cambios
|
||
|
||
### Usar con API Externa
|
||
|
||
Si tu API está en otro servidor:
|
||
|
||
1. Edita el archivo `.env`:
|
||
```env
|
||
API_URL=https://api.tudominio.com
|
||
```
|
||
|
||
2. Reinicia el contenedor:
|
||
```bash
|
||
docker-compose restart streamlit-panel
|
||
```
|
||
|
||
---
|
||
|
||
## 🎯 Características Técnicas
|
||
|
||
### Gestión de Procesos
|
||
|
||
El panel gestiona procesos FFmpeg en segundo plano:
|
||
|
||
**Comando FFmpeg usado:**
|
||
```bash
|
||
ffmpeg -re -i "URL_M3U8" -c copy -f flv RTMP_URL/STREAM_KEY
|
||
```
|
||
|
||
**Parámetros:**
|
||
- `-re`: Lee el input a velocidad nativa (importante para streaming)
|
||
- `-i`: URL m3u8 obtenida de YouTube
|
||
- `-c copy`: Copia sin recodificar (menor latencia y CPU)
|
||
- `-f flv`: Formato FLV para RTMP
|
||
|
||
### Almacenamiento de Datos
|
||
|
||
El sistema guarda tres archivos JSON:
|
||
|
||
1. **`stream_config.json`**: Configuración de plataformas
|
||
```json
|
||
{
|
||
"platforms": {
|
||
"YouTube": {
|
||
"rtmp_url": "rtmp://...",
|
||
"stream_key": "xxxxx",
|
||
"enabled": true
|
||
}
|
||
}
|
||
}
|
||
```
|
||
|
||
2. **`process_state.json`**: Estado de procesos activos
|
||
```json
|
||
{
|
||
"YouTube": {
|
||
"pid": 1234,
|
||
"platform": "YouTube",
|
||
"start_time": "2026-01-30T14:30:00",
|
||
"status": "running",
|
||
"rtmp_url": "rtmp://...",
|
||
"enabled": true
|
||
}
|
||
}
|
||
```
|
||
|
||
3. **`streams_state.json`**: Estado de transmisiones
|
||
|
||
### Verificación de PIDs
|
||
|
||
El sistema verifica constantemente que los procesos FFmpeg estén vivos:
|
||
|
||
```python
|
||
def check_process_alive(pid):
|
||
try:
|
||
os.kill(pid, 0) # Señal 0 = verificar existencia
|
||
return True
|
||
except OSError:
|
||
return False
|
||
```
|
||
|
||
---
|
||
|
||
## 🛠️ Solución de Problemas
|
||
|
||
### Problema: "No se pudo obtener la URL del stream"
|
||
|
||
**Posibles causas:**
|
||
1. El video no está EN VIVO (🔴)
|
||
2. El video tiene restricciones geográficas
|
||
3. yt-dlp está desactualizado
|
||
|
||
**Soluciones:**
|
||
```bash
|
||
# Actualizar yt-dlp en el contenedor
|
||
docker exec streamlit_panel pip install --upgrade yt-dlp
|
||
|
||
# O reconstruir contenedor
|
||
docker-compose down
|
||
docker-compose build --no-cache
|
||
docker-compose up -d
|
||
```
|
||
|
||
### Problema: "La transmisión se detuvo"
|
||
|
||
**Verificar:**
|
||
1. Que el video de YouTube siga en vivo
|
||
2. Que la Stream Key sea correcta
|
||
3. Los logs del proceso:
|
||
```bash
|
||
docker logs streamlit_panel
|
||
```
|
||
|
||
### Problema: "Switch no responde"
|
||
|
||
**Solución:**
|
||
1. Refresca la página (F5)
|
||
2. Verifica que el API esté funcionando:
|
||
```bash
|
||
curl http://localhost:8080/docs
|
||
```
|
||
|
||
### Problema: "Plataforma deshabilitada"
|
||
|
||
**Verificar en la configuración:**
|
||
1. El switch "Habilitar esta plataforma" debe estar activo
|
||
2. Debe tener Stream Key configurada
|
||
3. Debe tener RTMP URL configurada
|
||
|
||
---
|
||
|
||
## 📊 Métricas y KPIs
|
||
|
||
El panel proporciona las siguientes métricas en tiempo real:
|
||
|
||
| Métrica | Descripción | Ubicación |
|
||
|---------|-------------|-----------|
|
||
| **Total Plataformas** | Número de plataformas configuradas | Control |
|
||
| **Transmitiendo** | Cuántas están activas | Control/Monitor |
|
||
| **Listas** | Configuradas pero inactivas | Control |
|
||
| **Errores** | Con problemas | Control/Monitor |
|
||
| **Tiempo Activo** | Duración de cada transmisión | Control/Monitor |
|
||
| **Estado del Proceso** | Si el PID está vivo | Monitor |
|
||
| **PID** | Identificador del proceso FFmpeg | Control/Monitor |
|
||
|
||
---
|
||
|
||
## 🔐 Seguridad
|
||
|
||
### Stream Keys
|
||
|
||
- Los Stream Keys se almacenan en `stream_config.json`
|
||
- En la interfaz solo se muestran los últimos 4 caracteres
|
||
- No se registran en logs
|
||
|
||
### Volúmenes Docker
|
||
|
||
```yaml
|
||
volumes:
|
||
- ./stream_config.json:/app/stream_config.json # Configuración
|
||
- ./cookies.txt:/app/cookies.txt:ro # Solo lectura
|
||
```
|
||
|
||
### Variables de Entorno
|
||
|
||
```yaml
|
||
environment:
|
||
- API_URL=${API_URL} # URL del API
|
||
- PYTHONUNBUFFERED=1 # Logs en tiempo real
|
||
```
|
||
|
||
---
|
||
|
||
## 📝 Requisitos del Sistema
|
||
|
||
### Mínimos
|
||
- **RAM**: 2 GB
|
||
- **CPU**: 2 cores
|
||
- **Disco**: 5 GB
|
||
- **Red**: 10 Mbps upload por transmisión
|
||
|
||
### Recomendados
|
||
- **RAM**: 4 GB
|
||
- **CPU**: 4 cores
|
||
- **Disco**: 10 GB SSD
|
||
- **Red**: 25 Mbps upload por transmisión
|
||
|
||
---
|
||
|
||
## 🚀 Próximas Funcionalidades
|
||
|
||
- [ ] Programación de transmisiones
|
||
- [ ] Grabación local simultánea
|
||
- [ ] Estadísticas de ancho de banda
|
||
- [ ] Alertas por email/Telegram
|
||
- [ ] Múltiples fuentes de video
|
||
- [ ] Overlays y filtros en tiempo real
|
||
- [ ] Soporte para OBS Studio
|
||
|
||
---
|
||
|
||
## 📚 Recursos Adicionales
|
||
|
||
### Obtener Stream Keys
|
||
|
||
- [YouTube Studio](https://studio.youtube.com) → Emisión en Vivo → Stream
|
||
- [Facebook Creator Studio](https://business.facebook.com/creatorstudio) → Emisión en vivo
|
||
- [Twitch Dashboard](https://dashboard.twitch.tv/settings/stream) → Configuración del canal
|
||
- [X Media Studio](https://studio.twitter.com) → Crear → En vivo
|
||
|
||
### Documentación
|
||
|
||
- [FastAPI Backend](README.md)
|
||
- [Comandos Docker](DOCKER_COMANDOS_SEPARADOS_COMPLETO.md)
|
||
- [Configuración de URLs](API_URL_CONFIG.md)
|
||
|
||
---
|
||
|
||
## 🐛 Reportar Problemas
|
||
|
||
Si encuentras algún problema:
|
||
|
||
1. Verifica los logs:
|
||
```bash
|
||
docker logs streamlit_panel
|
||
docker logs tubescript_api
|
||
```
|
||
|
||
2. Recopila información:
|
||
- Versión de Docker
|
||
- Sistema operativo
|
||
- Mensaje de error completo
|
||
|
||
3. Crea un issue con toda la información
|
||
|
||
---
|
||
|
||
## 📞 Soporte
|
||
|
||
- 📧 Email: soporte@tubescript.com
|
||
- 💬 Discord: [TubeScript Community](https://discord.gg/tubescript)
|
||
- 📖 Docs: [docs.tubescript.com](https://docs.tubescript.com)
|
||
|
||
---
|
||
|
||
**TubeScript Panel de Control © 2026**
|
||
Desarrollado con ❤️ usando Streamlit y FastAPI
|