# 📺 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