# TubeScript-API ## 🎥 Panel de Control de Retransmisión Multi-Plataforma Sistema completo para capturar transmisiones en vivo de YouTube y retransmitirlas simultáneamente a múltiples plataformas (YouTube, Facebook, Twitch, X/Twitter, Instagram, TikTok) con monitoreo en tiempo real. ## ✨ Características - 🔍 **Búsqueda de Videos en Vivo**: Busca transmisiones en vivo de YouTube o ingresa URL directa - ⚙️ **Configuración Multi-Plataforma**: Configura fácilmente RTMP para múltiples redes sociales - 🎛️ **Control Individual**: Activa/desactiva la retransmisión a cada plataforma independientemente - 📊 **Monitoreo en Tiempo Real**: Semáforos visuales que indican el estado de cada transmisión - ⏱️ **Métricas**: Tiempo de actividad y estado de salud de cada stream - 🔄 **Auto-refresh**: Actualización automática del monitor cada 5 segundos - 🐳 **Docker Ready**: Despliegue fácil con Docker y Docker Compose ## 🚀 Inicio Rápido con Docker (Recomendado) La forma más rápida de empezar es usar Docker: ```bash # 1. Dar permisos al script chmod +x docker-start.sh # 2. Iniciar servicios ./docker-start.sh # 3. Abrir en navegador # Panel Web: http://localhost:8501 # API: http://localhost:8080 ``` 📚 Ver [DOCKER_README.md](DOCKER_README.md) para más información. ## 🚀 Instalación ### Opción 1: Con Docker (Recomendado) **Prerequisitos:** - Docker Desktop instalado - Docker Compose **Pasos:** ```bash # Iniciar stack completo (FastAPI + Streamlit) ./docker-start.sh ``` Esto iniciará: - **Panel Web Streamlit**: http://localhost:8501 - **API FastAPI**: http://localhost:8080 - **Documentación API**: http://localhost:8080/docs 📚 Documentación completa: [DOCKER_GUIDE.md](DOCKER_GUIDE.md) ### Opción 2: Instalación Local **Prerequisitos:** - Python 3.11+ - FFmpeg - yt-dlp **Pasos:** 1. **Clonar el repositorio** ```bash git clone cd TubeScript-API ``` 2. **Instalar dependencias** ```bash pip install -r requirements.txt ``` 3. **Instalar FFmpeg** (si no está instalado) **macOS:** ```bash brew install ffmpeg ``` **Linux:** ```bash sudo apt-get install ffmpeg ``` **Windows:** Descarga desde [ffmpeg.org](https://ffmpeg.org/download.html) ## 📖 Uso ### 1. Iniciar el Panel Web ```bash streamlit run streamlit_app.py ``` El panel se abrirá automáticamente en tu navegador en `http://localhost:8501` ### 2. Iniciar la API (Opcional) ```bash python main.py ``` O con uvicorn: ```bash uvicorn main:app --reload --host 0.0.0.0 --port 8000 ``` ### 3. Configurar Plataformas En la barra lateral del panel web: 1. Expande la sección de cada plataforma 2. Ingresa la **RTMP URL** de la plataforma 3. Ingresa tu **Stream Key** (clave de transmisión) 4. Haz clic en **Guardar Configuración** #### Plantillas RTMP Comunes: **YouTube:** ``` RTMP URL: rtmp://a.rtmp.youtube.com/live2 Stream Key: Tu clave desde YouTube Studio > Emisión en directo ``` **Facebook:** ``` RTMP URL: rtmps://live-api-s.facebook.com:443/rtmp/ Stream Key: Tu clave desde Creator Studio > Video en directo ``` **Twitch:** ``` RTMP URL: rtmp://live.twitch.tv/app Stream Key: Tu clave desde Dashboard > Configuración > Preferencias de stream ``` **X (Twitter):** ``` RTMP URL: rtmps://fa.contribute.live-video.net/app Stream Key: Tu clave desde Media Studio ``` ### 4. Buscar y Seleccionar Video En la pestaña **"🔍 Búsqueda"**: 1. **Opción A - Buscar**: Ingresa términos de búsqueda (ej: "noticias", "deportes") y haz clic en "Buscar" 2. **Opción B - URL Directa**: Pega la URL del video de YouTube directamente 3. Selecciona el video deseado de los resultados ### 5. Controlar Transmisiones En la pestaña **"🎛️ Control"**: 1. Verás tarjetas para cada plataforma configurada 2. Cada tarjeta muestra: - 🟢 **Verde**: Transmitiendo correctamente - 🔴 **Rojo**: Error en la transmisión - ⚫ **Gris**: Detenido 3. Haz clic en **▶️ Iniciar** para comenzar a transmitir a esa plataforma 4. Haz clic en **⏹️ Detener** para detener la transmisión ### 6. Monitorear Estado En la pestaña **"📊 Monitor"**: - Visualiza todas las transmisiones activas - Ver tiempo de actividad de cada stream - Estado en tiempo real con actualización automática cada 5 segundos - Detener streams individuales desde el monitor ## 🐳 Uso con Docker ### Método 1: Script Automático (Recomendado) ```bash # Dar permisos chmod +x docker-start.sh docker-stop.sh docker-logs.sh # Iniciar servicios ./docker-start.sh # Ver logs ./docker-logs.sh # Detener servicios ./docker-stop.sh ``` ### Método 2: Docker Compose Manual ```bash # Construir imágenes docker-compose build # Iniciar servicios en background docker-compose up -d # Ver logs docker-compose logs -f # Ver estado docker-compose ps # Detener servicios docker-compose down ``` ### Servicios Disponibles Esto iniciará: - **Panel Streamlit**: http://localhost:8501 (Frontend) - **API FastAPI**: http://localhost:8080 (Backend) - **Docs API**: http://localhost:8080/docs (Swagger UI) ### Características Docker - ✅ Health checks automáticos - ✅ Auto-restart si falla - ✅ Red compartida entre servicios - ✅ Volúmenes persistentes para configuración - ✅ FFmpeg incluido en la imagen 📚 **Documentación completa**: [DOCKER_GUIDE.md](DOCKER_GUIDE.md) ## 📁 Estructura del Proyecto ``` TubeScript-API/ ├── main.py # API FastAPI con endpoints ├── streamlit_app.py # Panel web de control ├── requirements.txt # Dependencias Python ├── Dockerfile # Imagen Docker optimizada ├── docker-compose.yml # Orquestación de servicios ├── docker-start.sh # Script de inicio automático ├── docker-stop.sh # Script para detener ├── docker-logs.sh # Script para ver logs ├── Dockerfile # Configuración Docker ├── docker-compose.yml # Orquestación de servicios ├── stream_config.json # Configuración de plataformas (generado) ├── streams_state.json # Estado de transmisiones (generado) └── cookies.txt # Cookies de YouTube (opcional) ``` ## 🔧 Configuración Avanzada ### Cookies de YouTube Para acceder a videos con restricciones, puedes proporcionar cookies: 1. Instala la extensión "Get cookies.txt" en tu navegador 2. Visita youtube.com e inicia sesión 3. Exporta las cookies como `cookies.txt` 4. Coloca el archivo en la raíz del proyecto ### Personalizar Calidad de Video Edita el comando FFmpeg en `streamlit_app.py` función `start_ffmpeg_stream()`: ```python command = [ "ffmpeg", "-re", "-i", source_url, "-c:v", "libx264", # Codificar video con x264 "-preset", "veryfast", # Preset de codificación "-b:v", "4000k", # Bitrate de video "-maxrate", "4000k", "-bufsize", "8000k", "-c:a", "aac", # Codificar audio con AAC "-b:a", "128k", # Bitrate de audio "-f", "flv", full_rtmp ] ``` ## 🔐 Seguridad - Las Stream Keys se guardan localmente en `stream_config.json` - **IMPORTANTE**: Agrega `stream_config.json` a `.gitignore` para no subir tus claves al repositorio - No compartas tus Stream Keys con nadie ## 🐛 Solución de Problemas ### Error: "No se pudo obtener la URL del stream" - Verifica que el video esté realmente en vivo - Intenta agregar cookies de YouTube - Verifica tu conexión a internet ### Error: "Transmisión con estado error" - Verifica que la RTMP URL y Stream Key sean correctas - Asegúrate de que FFmpeg esté instalado - Revisa que la plataforma permita transmisiones desde aplicaciones externas ### El video se corta o tiene problemas - Verifica tu ancho de banda de subida - Reduce la calidad del stream en la configuración de FFmpeg - Limita el número de plataformas simultáneas ## 📊 API Endpoints ### GET /transcript/{video_id} Obtiene la transcripción de un video de YouTube. **Parámetros:** - `video_id`: ID del video de YouTube - `lang`: Idioma de subtítulos (default: "es") **Respuesta:** ```json { "video_id": "abc123", "count": 150, "segments": [ { "start": 0.0, "duration": 2.5, "text": "Hola mundo" } ] } ``` ### GET /stream/{video_id} Obtiene la URL del stream de un video de YouTube. **Parámetros:** - `video_id`: ID del video de YouTube **Respuesta:** ```json { "video_id": "abc123", "stream_url": "https://manifest.googlevideo.com/..." } ``` ## 🤝 Contribuciones Las contribuciones son bienvenidas. Por favor: 1. Fork el proyecto 2. Crea una rama para tu feature (`git checkout -b feature/AmazingFeature`) 3. Commit tus cambios (`git commit -m 'Add some AmazingFeature'`) 4. Push a la rama (`git push origin feature/AmazingFeature`) 5. Abre un Pull Request ## 📄 Licencia Este proyecto es de código abierto y está disponible bajo la licencia MIT. ## 📧 Contacto Para preguntas o soporte, abre un issue en el repositorio. --- **⚠️ Advertencia Legal**: Asegúrate de tener los derechos necesarios para retransmitir el contenido. Este software es solo para uso educativo y personal. El uso indebido puede violar los términos de servicio de las plataformas.