TubeScript-API/SOLUCION_YTDLP_ERROR.md
2026-01-29 22:49:00 -07:00

429 lines
11 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.

╔══════════════════════════════════════════════════════════════════════╗
║ ║
║ ✅ 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:**
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! 📺 ║
║ ║
╚══════════════════════════════════════════════════════════════════════╝