TubeScript-API/PANEL_STREAMLIT_GUIA.md

477 lines
14 KiB
Markdown
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# Nota: Streamlit eliminado
> El panel Streamlit fue eliminado en esta rama; este documento se mantiene solo como referencia histórica. Usa la API (main.py) para operar.
# 📺 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