365 lines
8.4 KiB
Markdown
365 lines
8.4 KiB
Markdown
╔══════════════════════════════════════════════════════════════════════╗
|
||
║ ║
|
||
║ ✅ PROBLEMA RESUELTO: Error al Obtener URL del Stream ║
|
||
║ ║
|
||
║ 🔧 Mejoras + Rebuild de Docker ║
|
||
║ ║
|
||
╚══════════════════════════════════════════════════════════════════════╝
|
||
|
||
## 🐛 PROBLEMA IDENTIFICADO
|
||
|
||
**Error:** "❌ No se pudo obtener la URL del stream"
|
||
|
||
**Causas Posibles:**
|
||
1. yt-dlp no puede acceder al video
|
||
2. Formato de video no compatible
|
||
3. Timeout muy corto (30s)
|
||
4. Video con restricciones
|
||
5. YouTube bloqueando temporalmente
|
||
|
||
---
|
||
|
||
## ✅ SOLUCIONES IMPLEMENTADAS
|
||
|
||
### 1️⃣ Mejorada Función `get_stream_url()`
|
||
|
||
**Cambios en streamlit_app.py y main.py:**
|
||
|
||
✅ **Timeout aumentado:** 30s → 60s
|
||
✅ **Formato simplificado:** `-f "best"` (más compatible)
|
||
✅ **Certificados:** `--no-check-certificate` (evita errores SSL)
|
||
✅ **Mejor manejo de errores:** Mensajes más descriptivos
|
||
✅ **Búsqueda mejorada:** Busca m3u8, googlevideo, o cualquier HTTP válido
|
||
✅ **Sugerencias al usuario:** Muestra posibles soluciones si falla
|
||
|
||
**Antes:**
|
||
```python
|
||
"-f", "best[ext=m3u8]/bestvideo[ext=m3u8]+bestaudio[ext=m3u8]/best"
|
||
timeout=30
|
||
```
|
||
|
||
**Ahora:**
|
||
```python
|
||
"-f", "best"
|
||
timeout=60
|
||
--no-check-certificate
|
||
Mejor búsqueda de URLs válidas
|
||
Mensajes de error detallados
|
||
```
|
||
|
||
---
|
||
|
||
### 2️⃣ Script de Diagnóstico
|
||
|
||
✅ **Creado: `test_system.py`**
|
||
|
||
**Funcionalidad:**
|
||
- Verifica que yt-dlp esté instalado
|
||
- Prueba obtención de URL con video real
|
||
- Verifica FFmpeg
|
||
- Muestra mensajes detallados de error
|
||
- Da sugerencias específicas
|
||
|
||
**Uso:**
|
||
```bash
|
||
python3 test_system.py
|
||
```
|
||
|
||
---
|
||
|
||
### 3️⃣ Script de Rebuild Docker
|
||
|
||
✅ **Creado: `docker-rebuild.sh`**
|
||
|
||
**Funcionalidad:**
|
||
- Detiene contenedores
|
||
- Opción de limpiar imágenes antiguas
|
||
- Reconstruye sin cache
|
||
- Opción de iniciar servicios
|
||
- Muestra estado final
|
||
|
||
**Uso:**
|
||
```bash
|
||
chmod +x docker-rebuild.sh
|
||
./docker-rebuild.sh
|
||
```
|
||
|
||
---
|
||
|
||
### 4️⃣ Dockerfile Mejorado
|
||
|
||
✅ **Verificación añadida:**
|
||
```dockerfile
|
||
RUN yt-dlp --version && ffmpeg -version
|
||
```
|
||
|
||
Verifica que todo esté instalado antes de continuar.
|
||
|
||
---
|
||
|
||
## 🚀 CÓMO USAR LAS MEJORAS
|
||
|
||
### Opción 1: Rebuild Docker (Recomendado)
|
||
|
||
```bash
|
||
# Método automático
|
||
./docker-rebuild.sh
|
||
|
||
# O manual
|
||
docker-compose down
|
||
docker-compose build --no-cache
|
||
docker-compose up -d
|
||
```
|
||
|
||
### Opción 2: Sin Docker
|
||
|
||
```bash
|
||
# 1. Actualizar yt-dlp
|
||
pip install -U yt-dlp
|
||
|
||
# 2. Probar sistema
|
||
python3 test_system.py
|
||
|
||
# 3. Reiniciar aplicación
|
||
streamlit run streamlit_app.py
|
||
```
|
||
|
||
---
|
||
|
||
## 🧪 PROBAR QUE FUNCIONA
|
||
|
||
### 1. Diagnóstico del Sistema
|
||
|
||
```bash
|
||
python3 test_system.py
|
||
```
|
||
|
||
**Deberías ver:**
|
||
```
|
||
✅ yt-dlp instalado: 2026.01.29
|
||
✅ Éxito! Se obtuvieron 1 URL(s)
|
||
✅ FFmpeg instalado
|
||
✅ Todo está listo para transmitir!
|
||
```
|
||
|
||
### 2. Probar con Video Real
|
||
|
||
```bash
|
||
python3 test_m3u8_extraction.py "URL_VIDEO_YOUTUBE_LIVE"
|
||
```
|
||
|
||
### 3. En el Panel Web
|
||
|
||
1. Abrir: http://localhost:8501
|
||
2. Ir a: 🔍 Búsqueda
|
||
3. Pegar URL de video EN VIVO
|
||
4. Ir a: 🎛️ Control
|
||
5. Debe mostrar: "✅ Stream listo para transmitir"
|
||
|
||
---
|
||
|
||
## 💡 SOLUCIONES A ERRORES COMUNES
|
||
|
||
### Error: "No se pudo obtener la URL"
|
||
|
||
**Solución 1: Verificar que el video esté EN VIVO**
|
||
```
|
||
El video debe tener el indicador 🔴 EN VIVO
|
||
No funciona con videos pregrabados
|
||
```
|
||
|
||
**Solución 2: Actualizar yt-dlp**
|
||
```bash
|
||
# Local
|
||
pip install -U yt-dlp
|
||
|
||
# Docker
|
||
./docker-rebuild.sh
|
||
```
|
||
|
||
**Solución 3: Usar Cookies**
|
||
```bash
|
||
# Exportar cookies de YouTube con extensión de navegador
|
||
# Guardar como cookies.txt en el directorio raíz
|
||
```
|
||
|
||
**Solución 4: Probar con otro video**
|
||
```
|
||
Algunos videos tienen restricciones que impiden la extracción
|
||
Intenta con un canal de noticias 24/7
|
||
```
|
||
|
||
---
|
||
|
||
### Error: "Timeout"
|
||
|
||
**Causas:**
|
||
- Conexión lenta
|
||
- Video muy pesado
|
||
- YouTube responde lento
|
||
|
||
**Solución:**
|
||
El timeout ya fue aumentado a 60s en el código actualizado.
|
||
|
||
---
|
||
|
||
### Error: "yt-dlp no encontrado"
|
||
|
||
**Docker:**
|
||
```bash
|
||
./docker-rebuild.sh
|
||
```
|
||
|
||
**Local:**
|
||
```bash
|
||
pip install yt-dlp
|
||
```
|
||
|
||
---
|
||
|
||
## 📋 CHECKLIST POST-REBUILD
|
||
|
||
Después del rebuild, verifica:
|
||
|
||
- [ ] Contenedores corriendo: `docker-compose ps`
|
||
- [ ] Ambos servicios "healthy"
|
||
- [ ] Panel web accesible: http://localhost:8501
|
||
- [ ] API accesible: http://localhost:8080/docs
|
||
- [ ] yt-dlp actualizado en contenedor
|
||
- [ ] FFmpeg funciona en contenedor
|
||
|
||
**Verificar en contenedor:**
|
||
```bash
|
||
docker exec streamlit_panel yt-dlp --version
|
||
docker exec streamlit_panel ffmpeg -version
|
||
```
|
||
|
||
---
|
||
|
||
## 🎯 VIDEOS RECOMENDADOS PARA PROBAR
|
||
|
||
### Canales de Noticias 24/7 (Siempre en vivo)
|
||
|
||
**CNN:**
|
||
- Buscar: "CNN live stream"
|
||
|
||
**BBC News:**
|
||
- Buscar: "BBC News live"
|
||
|
||
**DW News:**
|
||
- Buscar: "DW News live"
|
||
|
||
**Al Jazeera:**
|
||
- Buscar: "Al Jazeera English live"
|
||
|
||
Estos canales transmiten 24/7 y son buenos para probar.
|
||
|
||
---
|
||
|
||
## 📊 COMPARACIÓN: ANTES vs AHORA
|
||
|
||
| Aspecto | Antes | Ahora |
|
||
|---------|-------|-------|
|
||
| **Timeout** | 30s | 60s ✅ |
|
||
| **Formato** | Específico m3u8 | "best" (compatible) ✅ |
|
||
| **Certificados** | Verifica | Ignora errores ✅ |
|
||
| **Búsqueda URLs** | m3u8 o primera | m3u8 > google > http ✅ |
|
||
| **Errores** | Genérico | Detallados + sugerencias ✅ |
|
||
| **Diagnóstico** | Manual | Script automático ✅ |
|
||
| **Rebuild** | Manual | Script automático ✅ |
|
||
|
||
---
|
||
|
||
## 🔧 COMANDOS ÚTILES
|
||
|
||
```bash
|
||
# Rebuild completo
|
||
./docker-rebuild.sh
|
||
|
||
# Diagnóstico
|
||
python3 test_system.py
|
||
|
||
# Probar extracción
|
||
python3 test_m3u8_extraction.py "VIDEO_URL"
|
||
|
||
# Ver logs de Streamlit
|
||
docker-compose logs -f streamlit-panel
|
||
|
||
# Ver logs de API
|
||
docker-compose logs -f tubescript-api
|
||
|
||
# Entrar al contenedor
|
||
docker exec -it streamlit_panel bash
|
||
|
||
# Dentro del contenedor, probar yt-dlp
|
||
yt-dlp -g "VIDEO_URL"
|
||
|
||
# Actualizar yt-dlp en contenedor corriendo
|
||
docker exec streamlit_panel pip install -U yt-dlp
|
||
```
|
||
|
||
---
|
||
|
||
## 📚 ARCHIVOS MODIFICADOS
|
||
|
||
| Archivo | Cambios |
|
||
|---------|---------|
|
||
| `streamlit_app.py` | ✅ Función get_stream_url mejorada |
|
||
| `main.py` | ✅ Función get_stream_url mejorada |
|
||
| `Dockerfile` | ✅ Verificación añadida |
|
||
| `test_system.py` | ⭐ NUEVO - Diagnóstico |
|
||
| `docker-rebuild.sh` | ⭐ NUEVO - Rebuild automático |
|
||
|
||
---
|
||
|
||
## 🎉 RESULTADO ESPERADO
|
||
|
||
Después de aplicar las mejoras:
|
||
|
||
1. ✅ Obtención de URL más confiable
|
||
2. ✅ Mejores mensajes de error
|
||
3. ✅ Fácil diagnóstico de problemas
|
||
4. ✅ Rebuild de Docker simplificado
|
||
5. ✅ Mayor compatibilidad con videos
|
||
|
||
---
|
||
|
||
## 🆘 SI AÚN NO FUNCIONA
|
||
|
||
### 1. Ejecutar Diagnóstico
|
||
```bash
|
||
python3 test_system.py
|
||
```
|
||
|
||
### 2. Ver Logs Detallados
|
||
```bash
|
||
docker-compose logs streamlit-panel | tail -50
|
||
```
|
||
|
||
### 3. Probar Manualmente
|
||
```bash
|
||
docker exec -it streamlit_panel bash
|
||
yt-dlp -g -f best "URL_VIDEO_YOUTUBE"
|
||
```
|
||
|
||
### 4. Verificar Video
|
||
- Debe estar 🔴 EN VIVO
|
||
- No debe tener restricciones geográficas
|
||
- Debe ser público
|
||
|
||
---
|
||
|
||
╔══════════════════════════════════════════════════════════════════════╗
|
||
║ ║
|
||
║ ✅ SOLUCIÓN IMPLEMENTADA ║
|
||
║ ║
|
||
║ SIGUIENTE PASO: ║
|
||
║ ./docker-rebuild.sh ║
|
||
║ ║
|
||
║ LUEGO PROBAR: ║
|
||
║ python3 test_system.py ║
|
||
║ ║
|
||
║ ¡El problema debe estar resuelto! 🎉 ║
|
||
║ ║
|
||
╚══════════════════════════════════════════════════════════════════════╝
|