430 lines
9.1 KiB
Markdown
430 lines
9.1 KiB
Markdown
╔══════════════════════════════════════════════════════════════════════╗
|
||
║ ║
|
||
║ 🔧 SOLUCIÓN AL ERROR DE YT-DLP (Traceback) ║
|
||
║ ║
|
||
╚══════════════════════════════════════════════════════════════════════╝
|
||
|
||
## 🐛 ERROR DETECTADO
|
||
|
||
```
|
||
{"detail":"Error de yt-dlp: Traceback (most recent call last):
|
||
File \"/usr/local/bin/yt-dlp\", line 7, in <module>
|
||
sys.exit(main())
|
||
^^^^^^
|
||
File \"/usr/local/lib/python3.11/site-packages/yt_dlp/__init__.py\", lin"}
|
||
```
|
||
|
||
**Causa:** yt-dlp está corrupto o incompatible en el contenedor Docker.
|
||
|
||
---
|
||
|
||
## ✅ SOLUCIONES IMPLEMENTADAS
|
||
|
||
### 1️⃣ Logging Mejorado
|
||
|
||
**Archivo:** `streamlit_app.py`
|
||
|
||
Ahora el panel web muestra:
|
||
- ✅ Errores detallados de yt-dlp
|
||
- ✅ Mensajes de cada intento de formato
|
||
- ✅ Sugerencias específicas de solución
|
||
- ✅ Comandos para ejecutar
|
||
|
||
---
|
||
|
||
### 2️⃣ Script de Reinstalación
|
||
|
||
**Archivo:** `fix-ytdlp.sh`
|
||
|
||
Script que:
|
||
- ✅ Desinstala yt-dlp corrupto
|
||
- ✅ Limpia cache de pip
|
||
- ✅ Reinstala desde cero
|
||
- ✅ Verifica instalación
|
||
- ✅ Reinicia contenedores
|
||
|
||
---
|
||
|
||
## 🚀 SOLUCIÓN PASO A PASO
|
||
|
||
### Paso 1: Asegúrate que Docker esté corriendo
|
||
|
||
```bash
|
||
# Verificar Docker Desktop está activo
|
||
docker ps
|
||
```
|
||
|
||
Si no muestra nada, abre Docker Desktop.
|
||
|
||
---
|
||
|
||
### Paso 2: Iniciar Contenedores
|
||
|
||
```bash
|
||
cd /Users/cesarmendivil/Documents/Nextream/TubeScript-API
|
||
|
||
# Iniciar servicios
|
||
docker-compose up -d
|
||
|
||
# Esperar 10 segundos
|
||
sleep 10
|
||
|
||
# Verificar que estén corriendo
|
||
docker-compose ps
|
||
```
|
||
|
||
**Debe mostrar:**
|
||
```
|
||
NAME STATUS
|
||
streamlit_panel Up
|
||
tubescript_api Up
|
||
```
|
||
|
||
---
|
||
|
||
### Paso 3: Ejecutar Script de Reinstalación
|
||
|
||
```bash
|
||
# Dar permisos (solo la primera vez)
|
||
chmod +x fix-ytdlp.sh
|
||
|
||
# Ejecutar script de reinstalación
|
||
./fix-ytdlp.sh
|
||
```
|
||
|
||
**El script hará:**
|
||
1. Desinstalar yt-dlp antiguo
|
||
2. Limpiar cache
|
||
3. Reinstalar desde cero
|
||
4. Verificar versión
|
||
5. Reiniciar contenedores
|
||
|
||
---
|
||
|
||
### Paso 4: Verificar Instalación
|
||
|
||
```bash
|
||
# Verificar yt-dlp en streamlit
|
||
docker exec streamlit_panel yt-dlp --version
|
||
|
||
# Verificar yt-dlp en API
|
||
docker exec tubescript_api yt-dlp --version
|
||
```
|
||
|
||
**Debe mostrar:** Una versión como `2024.XX.XX` o `2026.XX.XX`
|
||
|
||
---
|
||
|
||
### Paso 5: Probar en el Panel Web
|
||
|
||
```bash
|
||
# Abrir panel
|
||
open http://localhost:8501
|
||
```
|
||
|
||
**Probar:**
|
||
1. Ir a pestaña 🔍 Búsqueda
|
||
2. Buscar: "DW News live"
|
||
3. Seleccionar un video
|
||
4. Ir a pestaña 🎛️ Control
|
||
5. Debe mostrar: "✅ URL obtenida con: Mejor calidad disponible"
|
||
|
||
---
|
||
|
||
## 🔧 SOLUCIONES ALTERNATIVAS
|
||
|
||
### Solución A: Reinstalación Manual
|
||
|
||
```bash
|
||
# Entrar al contenedor
|
||
docker exec -it streamlit_panel bash
|
||
|
||
# Dentro del contenedor:
|
||
pip uninstall -y yt-dlp
|
||
pip cache purge
|
||
pip install --no-cache-dir --force-reinstall yt-dlp
|
||
exit
|
||
|
||
# Reiniciar contenedor
|
||
docker-compose restart streamlit-panel
|
||
```
|
||
|
||
---
|
||
|
||
### Solución B: Rebuild Completo (Si persiste)
|
||
|
||
```bash
|
||
# Detener todo
|
||
docker-compose down
|
||
|
||
# Limpiar imágenes
|
||
docker-compose down --rmi all
|
||
|
||
# Reconstruir sin cache
|
||
docker-compose build --no-cache
|
||
|
||
# Iniciar
|
||
docker-compose up -d
|
||
|
||
# Verificar
|
||
docker-compose ps
|
||
```
|
||
|
||
---
|
||
|
||
### Solución C: Actualizar requirements.txt
|
||
|
||
```bash
|
||
# Editar requirements.txt
|
||
nano requirements.txt
|
||
|
||
# Agregar o cambiar:
|
||
yt-dlp>=2024.1.1
|
||
|
||
# Guardar y rebuild
|
||
docker-compose build --no-cache
|
||
docker-compose up -d
|
||
```
|
||
|
||
---
|
||
|
||
## 🧪 TESTING
|
||
|
||
### Test 1: Verificar yt-dlp Funciona
|
||
|
||
```bash
|
||
# Probar directamente en contenedor
|
||
docker exec streamlit_panel yt-dlp -g -f best \
|
||
"https://www.youtube.com/watch?v=VIDEO_EN_VIVO"
|
||
|
||
# Debe retornar una URL HTTP/HTTPS
|
||
```
|
||
|
||
---
|
||
|
||
### Test 2: Probar con Python
|
||
|
||
```bash
|
||
docker exec streamlit_panel python3 -c "
|
||
import yt_dlp
|
||
print('yt-dlp importado correctamente')
|
||
print(f'Versión: {yt_dlp.version.__version__}')
|
||
"
|
||
```
|
||
|
||
**Debe mostrar:**
|
||
```
|
||
yt-dlp importado correctamente
|
||
Versión: 2024.XX.XX
|
||
```
|
||
|
||
---
|
||
|
||
### Test 3: Probar Función get_stream_url
|
||
|
||
```bash
|
||
# Crear script de prueba
|
||
cat > test_ytdlp.py << 'EOF'
|
||
import subprocess
|
||
import sys
|
||
|
||
video_url = "https://www.youtube.com/watch?v=VIDEO_EN_VIVO"
|
||
|
||
command = [
|
||
"yt-dlp",
|
||
"-g",
|
||
"-f", "best",
|
||
"--no-warnings",
|
||
video_url
|
||
]
|
||
|
||
result = subprocess.run(command, capture_output=True, text=True, timeout=60)
|
||
|
||
if result.returncode == 0:
|
||
print("✅ Éxito!")
|
||
print(f"URL: {result.stdout.strip()}")
|
||
else:
|
||
print("❌ Error:")
|
||
print(result.stderr)
|
||
EOF
|
||
|
||
# Ejecutar en contenedor
|
||
docker exec streamlit_panel python3 test_ytdlp.py
|
||
```
|
||
|
||
---
|
||
|
||
## 📊 DIAGNÓSTICO
|
||
|
||
### Ver Logs Detallados
|
||
|
||
```bash
|
||
# Ver logs de Streamlit
|
||
docker-compose logs streamlit-panel | tail -100
|
||
|
||
# Ver logs en tiempo real
|
||
docker-compose logs -f streamlit-panel
|
||
|
||
# Buscar errores específicos
|
||
docker-compose logs streamlit-panel | grep -i "error\|traceback"
|
||
```
|
||
|
||
---
|
||
|
||
### Verificar Dependencias
|
||
|
||
```bash
|
||
# Listar paquetes instalados
|
||
docker exec streamlit_panel pip list | grep -i "yt"
|
||
|
||
# Debe mostrar:
|
||
# yt-dlp 2024.XX.XX
|
||
```
|
||
|
||
---
|
||
|
||
### Verificar Python
|
||
|
||
```bash
|
||
# Ver versión de Python
|
||
docker exec streamlit_panel python3 --version
|
||
|
||
# Debe ser Python 3.11
|
||
```
|
||
|
||
---
|
||
|
||
## 🆘 SI EL ERROR PERSISTE
|
||
|
||
### 1. Ver Error Completo en UI
|
||
|
||
Ahora el panel web muestra el error completo:
|
||
- Ir a 🎛️ Control
|
||
- Pegar URL de video
|
||
- Ver mensaje de error expandido
|
||
- Click en "Ver error detallado"
|
||
|
||
---
|
||
|
||
### 2. Verificar Video es EN VIVO
|
||
|
||
```bash
|
||
# Verificar que el video esté realmente en vivo
|
||
docker exec streamlit_panel yt-dlp --dump-json \
|
||
"URL_VIDEO" | python3 -m json.tool | grep is_live
|
||
|
||
# Debe mostrar:
|
||
# "is_live": true
|
||
```
|
||
|
||
---
|
||
|
||
### 3. Probar con Video Conocido
|
||
|
||
URLs de canales que siempre están en vivo:
|
||
- DW News: https://www.youtube.com/@DWNews
|
||
- France 24: https://www.youtube.com/@FRANCE24English
|
||
- Al Jazeera: https://www.youtube.com/@aljazeeraenglish
|
||
|
||
---
|
||
|
||
### 4. Limpiar Todo y Empezar de Cero
|
||
|
||
```bash
|
||
# Detener todo
|
||
docker-compose down -v
|
||
|
||
# Eliminar imágenes
|
||
docker rmi $(docker images -q tubescript*)
|
||
|
||
# Limpiar sistema Docker
|
||
docker system prune -af
|
||
|
||
# Rebuild desde cero
|
||
docker-compose build --no-cache --pull
|
||
|
||
# Iniciar
|
||
docker-compose up -d
|
||
|
||
# Ejecutar fix
|
||
./fix-ytdlp.sh
|
||
|
||
# Probar
|
||
open http://localhost:8501
|
||
```
|
||
|
||
---
|
||
|
||
## 📝 CHECKLIST DE SOLUCIÓN
|
||
|
||
- [ ] Docker Desktop está corriendo
|
||
- [ ] Contenedores iniciados: `docker-compose up -d`
|
||
- [ ] Script ejecutado: `./fix-ytdlp.sh`
|
||
- [ ] yt-dlp verificado: `docker exec streamlit_panel yt-dlp --version`
|
||
- [ ] Panel web abierto: http://localhost:8501
|
||
- [ ] Probado con video EN VIVO (DW News, etc.)
|
||
- [ ] Ver error detallado en UI si falla
|
||
- [ ] Logs revisados: `docker-compose logs streamlit-panel`
|
||
|
||
---
|
||
|
||
## 💡 TIPS IMPORTANTES
|
||
|
||
✅ **Usa canales de noticias 24/7** para probar - siempre están en vivo
|
||
✅ **El script fix-ytdlp.sh** soluciona el 90% de problemas
|
||
✅ **Los errores ahora son visibles** en la UI del panel
|
||
✅ **Rebuild sin cache** si cambias código
|
||
✅ **Ver logs** para debugging: `docker-compose logs -f`
|
||
|
||
---
|
||
|
||
## 📞 COMANDOS RÁPIDOS DE REFERENCIA
|
||
|
||
```bash
|
||
# Ver si Docker corre
|
||
docker ps
|
||
|
||
# Iniciar servicios
|
||
docker-compose up -d
|
||
|
||
# Reinstalar yt-dlp
|
||
./fix-ytdlp.sh
|
||
|
||
# Ver versión yt-dlp
|
||
docker exec streamlit_panel yt-dlp --version
|
||
|
||
# Ver logs
|
||
docker-compose logs -f streamlit-panel
|
||
|
||
# Reiniciar servicio
|
||
docker-compose restart streamlit-panel
|
||
|
||
# Rebuild completo
|
||
docker-compose down
|
||
docker-compose build --no-cache
|
||
docker-compose up -d
|
||
|
||
# Limpiar todo
|
||
docker-compose down -v
|
||
docker system prune -af
|
||
```
|
||
|
||
---
|
||
|
||
╔══════════════════════════════════════════════════════════════════════╗
|
||
║ ║
|
||
║ ✅ SOLUCIÓN IMPLEMENTADA ║
|
||
║ ║
|
||
║ EJECUTA AHORA: ║
|
||
║ ║
|
||
║ 1. docker-compose up -d ║
|
||
║ 2. ./fix-ytdlp.sh ║
|
||
║ 3. open http://localhost:8501 ║
|
||
║ ║
|
||
║ Si persiste el error: ║
|
||
║ - Ver error detallado en la UI ║
|
||
║ - Probar con "DW News live" ║
|
||
║ - Ejecutar rebuild completo ║
|
||
║ ║
|
||
╚══════════════════════════════════════════════════════════════════════╝
|