╔══════════════════════════════════════════════════════════════════════╗ ║ ║ ║ ✅ SOLUCIÓN COMPLETA: Error de yt-dlp ║ ║ ║ ║ Estrategia Multi-Formato + Actualización + Fallback ║ ║ ║ ╚══════════════════════════════════════════════════════════════════════╝ ## 🐛 ERROR DETECTADO ``` Error de yt-dlp: Traceback (most recent call last): File "/usr/local/bin/yt-dlp", line 8, in sys.exit(main()) ``` **Causas Posibles:** 1. yt-dlp está desactualizado o corrupto 2. Incompatibilidad con la versión de Python 3. Dependencias faltantes 4. YouTube cambió su API 5. Formato de video no compatible --- ## ✅ SOLUCIONES IMPLEMENTADAS ### 1️⃣ **Función get_stream_url() Mejorada con Estrategia de Fallback** **streamlit_app.py - Nueva implementación:** ✅ **Múltiples formatos:** Intenta 4 formatos diferentes automáticamente ✅ **Cliente Android:** Usa `player_client=android` (más compatible con YouTube) ✅ **Fallback automático:** Si un formato falla, intenta el siguiente ✅ **Mejor UI:** Muestra progreso de cada intento ✅ **Mensajes detallados:** Ayuda al usuario a diagnosticar el problema **Formatos que intenta (en orden):** 1. `best` - Mejor calidad disponible 2. `best[ext=mp4]` - Mejor calidad MP4 3. `bestvideo+bestaudio` - Video y audio separados 4. `worst` - Menor calidad (más compatible) **Características adicionales:** - Variable de entorno `PYTHONIOENCODING=utf-8` para evitar errores de encoding - `--extractor-args youtube:player_client=android` para mejor compatibilidad - Manejo robusto de errores con continue en lugar de fallar --- ### 2️⃣ **Dockerfile Mejorado** **Cambios implementados:** ```dockerfile # Variable de entorno para encoding ENV PYTHONIOENCODING=utf-8 # Actualizar pip, setuptools y wheel antes de instalar RUN pip install --no-cache-dir --upgrade pip setuptools wheel # Instalar yt-dlp con upgrade explícito RUN pip install --no-cache-dir --upgrade yt-dlp # Verificación mejorada RUN python3 -c "import yt_dlp; print(f'yt-dlp OK')" ``` **Beneficios:** - Asegura que yt-dlp esté actualizado desde el inicio - Verifica la instalación correctamente - Evita problemas de encoding --- ### 3️⃣ **Script de Actualización Rápida** **Creado: `docker-update-ytdlp.sh`** Actualiza yt-dlp en los contenedores SIN necesidad de rebuild completo. **Uso:** ```bash ./docker-update-ytdlp.sh ``` **Beneficios:** - Actualización rápida (segundos vs minutos) - No requiere reconstruir imágenes - Actualiza ambos contenedores - Muestra versión instalada --- ## 🚀 CÓMO USAR LAS SOLUCIONES ### Opción 1: Actualización Rápida (RECOMENDADO) Si los contenedores ya están corriendo: ```bash # 1. Actualizar yt-dlp en contenedores ./docker-update-ytdlp.sh # 2. Reiniciar streamlit (opcional) docker-compose restart streamlit-panel # 3. Probar http://localhost:8501 ``` **Tiempo estimado:** 30 segundos ⏱️ --- ### Opción 2: Rebuild Completo Si quieres empezar desde cero: ```bash # 1. Detener contenedores docker-compose down # 2. Reconstruir sin cache docker-compose build --no-cache # 3. Iniciar docker-compose up -d # 4. Verificar docker-compose ps ``` **Tiempo estimado:** 5-10 minutos ⏱️⏱️ --- ### Opción 3: Rebuild con Script ```bash ./docker-rebuild.sh ``` El script te guiará paso a paso. --- ## 🧪 PROBAR QUE FUNCIONA ### 1. Verificar Versión de yt-dlp ```bash # En streamlit_panel docker exec streamlit_panel python3 -c "import yt_dlp; print(yt_dlp.version.__version__)" # En tubescript_api docker exec tubescript_api python3 -c "import yt_dlp; print(yt_dlp.version.__version__)" ``` **Debe mostrar:** Una versión reciente (ej: 2026.01.29) --- ### 2. Probar con Video en Vivo **Canales 24/7 recomendados para probar:** 1. **DW News (Alemán):** ``` https://www.youtube.com/@DWNews Buscar: "DW News live" ``` 2. **France 24 English:** ``` Buscar: "France 24 English live" ``` 3. **Al Jazeera English:** ``` Buscar: "Al Jazeera English live" ``` 4. **NBC News NOW:** ``` Buscar: "NBC News NOW live" ``` --- ### 3. Probar Manualmente en Contenedor ```bash # Entrar al contenedor docker exec -it streamlit_panel bash # Probar yt-dlp directamente yt-dlp -g -f best "URL_VIDEO_YOUTUBE_LIVE" # Debe mostrar una URL HTTP/HTTPS ``` --- ## 💡 ESTRATEGIA DE FALLBACK EXPLICADA La nueva función intenta formatos en este orden: ``` 1. "-f best" └─ Mejor calidad disponible └─ Si falla → 2. "-f best[ext=mp4]" └─ Mejor calidad en formato MP4 └─ Si falla → 3. "-f bestvideo+bestaudio" └─ Mejor video + mejor audio por separado └─ Si falla → 4. "-f worst" └─ Menor calidad (última opción, más compatible) └─ Si falla → ❌ Muestra error detallado con sugerencias ``` **Beneficios:** - Si un formato no funciona, automáticamente intenta otro - Maximiza compatibilidad - Usuario ve progreso de cada intento --- ## 🔧 CARACTERÍSTICAS ADICIONALES ### Cliente Android ```python "--extractor-args", "youtube:player_client=android" ``` **¿Por qué?** - YouTube es más permisivo con el cliente Android - Menos restricciones de extracción - Mayor tasa de éxito ### Encoding UTF-8 ```python env={**os.environ, "PYTHONIOENCODING": "utf-8"} ``` **¿Por qué?** - Evita errores con caracteres especiales - Compatible con títulos en otros idiomas - Previene fallos de encoding --- ## 📊 INTERFAZ MEJORADA ### Mensajes que Verás: **Durante extracción:** ``` 🔄 Intentando: Mejor calidad disponible... ✅ URL obtenida con: Mejor calidad disponible ✅ Stream listo para transmitir ``` **Si falla:** ``` ❌ No se pudo obtener la URL del stream con ningún formato 🔍 Ver detalles del error ▼ ⚠️ Posibles causas: 1. El video no está EN VIVO 🔴 - Verifica que el video tenga el indicador rojo "EN VIVO" 2. Video con restricciones - Restricciones geográficas 3. Problema con yt-dlp - yt-dlp puede estar desactualizado 💡 Soluciones: 1. Intenta con un canal de noticias 24/7 2. Agrega cookies de YouTube 3. Actualiza el contenedor ``` --- ## 🐛 SOLUCIÓN A ERRORES ESPECÍFICOS ### Error: "Traceback... yt-dlp" **Solución 1: Actualizar yt-dlp** ```bash ./docker-update-ytdlp.sh ``` **Solución 2: Rebuild** ```bash docker-compose down docker-compose build --no-cache docker-compose up -d ``` --- ### Error: "No se pudo obtener la URL" **Solución: Verificar el video** 1. ✅ Debe estar 🔴 EN VIVO 2. ✅ Debe ser público 3. ✅ No debe tener restricciones de edad 4. ✅ Preferir canales de noticias 24/7 --- ### Error: "Timeout" **Solución: Ya está resuelto** - Timeout aumentado a 60s - Múltiples intentos con formatos diferentes --- ### Error: "ImportError: yt_dlp" **Solución:** ```bash # Reinstalar yt-dlp en contenedor docker exec streamlit_panel pip install --force-reinstall yt-dlp # O rebuild completo ./docker-rebuild.sh ``` --- ## 📋 CHECKLIST DE VERIFICACIÓN Después de aplicar las soluciones: - [ ] yt-dlp actualizado: `./docker-update-ytdlp.sh` - [ ] Contenedores corriendo: `docker-compose ps` - [ ] Versión correcta: `docker exec streamlit_panel python3 -c "import yt_dlp; print(yt_dlp.version.__version__)"` - [ ] Panel accesible: http://localhost:8501 - [ ] Probar con video 24/7 (DW News, etc.) - [ ] Ver mensajes de progreso en UI - [ ] Verificar que muestra "✅ Stream listo" --- ## 🎯 COMANDOS RÁPIDOS ```bash # Actualización rápida (RECOMENDADO) ./docker-update-ytdlp.sh # Ver versión de yt-dlp docker exec streamlit_panel python3 -c "import yt_dlp; print(yt_dlp.version.__version__)" # Probar manualmente docker exec streamlit_panel yt-dlp -g -f best "URL_VIDEO" # Ver logs en tiempo real docker-compose logs -f streamlit-panel # Reiniciar panel docker-compose restart streamlit-panel # Rebuild completo ./docker-rebuild.sh # Entrar al contenedor para debug docker exec -it streamlit_panel bash ``` --- ## 📚 ARCHIVOS MODIFICADOS | Archivo | Cambios | |---------|---------| | `streamlit_app.py` | ✅ Función con estrategia de fallback | | `Dockerfile` | ✅ Mejor instalación de yt-dlp | | `docker-update-ytdlp.sh` | ⭐ NUEVO - Actualización rápida | --- ## 🎉 RESULTADO ESPERADO Después de aplicar estas soluciones: 1. ✅ yt-dlp actualizado a última versión 2. ✅ Múltiples formatos intentados automáticamente 3. ✅ Mejor compatibilidad con YouTube 4. ✅ Mensajes de error claros y útiles 5. ✅ Fácil actualización sin rebuild **El error debe estar completamente resuelto! 🚀** --- ╔══════════════════════════════════════════════════════════════════════╗ ║ ║ ║ ✅ SOLUCIÓN COMPLETA LISTA ║ ║ ║ ║ EJECUTA UNO DE ESTOS: ║ ║ ║ ║ Opción Rápida (30s): ║ ║ ./docker-update-ytdlp.sh ║ ║ ║ ║ Opción Completa (10min): ║ ║ ./docker-rebuild.sh ║ ║ ║ ║ Luego prueba con: ║ ║ http://localhost:8501 ║ ║ ║ ║ ¡Busca "DW News live" para probar! 📺 ║ ║ ║ ╚══════════════════════════════════════════════════════════════════════╝