11 KiB
╔══════════════════════════════════════════════════════════════════════╗ ║ ║ ║ ✅ 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 <module>
sys.exit(main())
Causas Posibles:
- yt-dlp está desactualizado o corrupto
- Incompatibilidad con la versión de Python
- Dependencias faltantes
- YouTube cambió su API
- 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):
best- Mejor calidad disponiblebest[ext=mp4]- Mejor calidad MP4bestvideo+bestaudio- Video y audio separadosworst- Menor calidad (más compatible)
Características adicionales:
- Variable de entorno
PYTHONIOENCODING=utf-8para evitar errores de encoding --extractor-args youtube:player_client=androidpara mejor compatibilidad- Manejo robusto de errores con continue en lugar de fallar
2️⃣ Dockerfile Mejorado
Cambios implementados:
# 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:
./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:
# 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:
# 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
./docker-rebuild.sh
El script te guiará paso a paso.
🧪 PROBAR QUE FUNCIONA
1. Verificar Versión de yt-dlp
# 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:
-
DW News (Alemán):
https://www.youtube.com/@DWNews Buscar: "DW News live" -
France 24 English:
Buscar: "France 24 English live" -
Al Jazeera English:
Buscar: "Al Jazeera English live" -
NBC News NOW:
Buscar: "NBC News NOW live"
3. Probar Manualmente en Contenedor
# 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
"--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
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
./docker-update-ytdlp.sh
Solución 2: Rebuild
docker-compose down
docker-compose build --no-cache
docker-compose up -d
Error: "No se pudo obtener la URL"
Solución: Verificar el video
- ✅ Debe estar 🔴 EN VIVO
- ✅ Debe ser público
- ✅ No debe tener restricciones de edad
- ✅ 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:
# 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
# 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:
- ✅ yt-dlp actualizado a última versión
- ✅ Múltiples formatos intentados automáticamente
- ✅ Mejor compatibilidad con YouTube
- ✅ Mensajes de error claros y útiles
- ✅ 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! 📺 ║ ║ ║ ╚══════════════════════════════════════════════════════════════════════╝