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

500 lines
18 KiB
Markdown
Raw Permalink 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.

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

╔══════════════════════════════════════════════════════════════════════╗
║ ║
║ ✅ IMPLEMENTADO: Switches + Lista + Monitoreo de PIDs ║
║ ║
╚══════════════════════════════════════════════════════════════════════╝
## 🎯 FUNCIONALIDADES IMPLEMENTADAS
### 1⃣ ✅ Componente Switch para Cada Plataforma
**Ubicación:** Pestaña 🎛️ Control
**Funcionalidad:**
- Switch tipo toggle para cada red social
- **ON** = Iniciar transmisión automáticamente
- **OFF** = Detener transmisión automáticamente
- Se habilita/deshabilita según el estado actual
- Visual claro del estado actual
**Uso:**
```
┌────────────────────────────────────────┐
│ 🎥 YouTube PID: 1234 │
│ │
│ Estado: TRANSMITIENDO │
│ Transmitiendo (PID: 1234) │
│ │
│ 🔴 Transmitir a YouTube [ON ●] │
│ │
│ ⏱️ Tiempo Activo 🔍 Proceso │
│ 00:15:42 ✅ Activo │
└────────────────────────────────────────┘
```
---
### 2⃣ ✅ Lista de Redes Preparadas y Listas
**Ubicación:** Pestaña 🎛️ Control (antes de las tarjetas)
**Funcionalidad:**
- Tabla con todas las plataformas configuradas
- Estado actual de cada una
- PID de cada proceso activo
- Indicador de configuración correcta
**Columnas de la tabla:**
- Red Social
- Estado (🟢 Activo / ⚪ Listo / 🔴 Error)
- PID
- Configurada (✅/❌)
**Resumen rápido:**
- Total Plataformas
- Transmitiendo (cuántas activas)
- Listas (cuántas configuradas)
- Errores (cuántas con problemas)
---
### 3⃣ ✅ Gestión de PIDs
**Funcionalidades:**
- Cada proceso FFmpeg guarda su PID al iniciar
- PID visible en todas las vistas
- Monitoreo en tiempo real del PID
- Verificación de si el proceso está vivo
- Detención usando PID si es necesario
**Persistencia:**
- PIDs se guardan en `process_state.json`
- Se mantienen entre reinicios del panel
- Recuperación automática de estado
---
### 4⃣ ✅ Monitor Mejorado con PIDs
**Ubicación:** Pestaña 📊 Monitor
**Funcionalidades:**
- Resumen general con métricas
- Detalle por plataforma con PID
- Verificación en tiempo real del proceso
- Información técnica completa
- Comando FFmpeg usado
- Auto-refresh cada 5 segundos
**Información mostrada:**
- PID del proceso
- Estado del proceso (Vivo/Muerto)
- Tiempo activo
- Hora de inicio
- Comando FFmpeg completo
- RTMP URL (parcialmente oculta)
---
## 🎨 NUEVA INTERFAZ
### Pestaña Control - Vista Completa
```
╔════════════════════════════════════════════════════════════╗
║ 🎛️ Control de Transmisión ║
╠════════════════════════════════════════════════════════════╣
║ ║
║ 📺 Video Seleccionado ║
║ [Miniatura] Título del Video ║
║ Canal: Nombre del Canal ║
║ 🔴 EN VIVO ║
║ ║
║ ────────────────────────────────────────────────────── ║
║ ║
║ 📋 Redes Preparadas y Listas para Transmitir ║
║ ║
║ ┌────────────────────────────────────────────────────┐ ║
║ │ Red Social │ Estado │ PID │ Configurada │ ║
║ ├────────────────────────────────────────────────────┤ ║
║ │ YouTube │ 🟢 Activo │ 1234 │ ✅ │ ║
║ │ Facebook │ ⚪ Listo │ - │ ✅ │ ║
║ │ Twitch │ ⚪ Listo │ - │ ✅ │ ║
║ │ X (Twitter) │ 🔴 Error │ 5678 │ ✅ │ ║
║ └────────────────────────────────────────────────────┘ ║
║ ║
║ [Total: 4] [Transmitiendo: 1] [Listas: 4] [Errores: 1]║
║ ║
║ ────────────────────────────────────────────────────── ║
║ ║
║ 🎛️ Control Individual por Plataforma ║
║ ║
║ ┌──────────────────────┐ ┌──────────────────────┐ ║
║ │ 🎥 YouTube PID:1234│ │ 🎥 Facebook PID: - │ ║
║ │ 🟢 │ │ ⚪ │ ║
║ │ Estado: TRANSMITIENDO│ │ Estado: LISTO │ ║
║ │ Transmitiendo │ │ Detenido │ ║
║ │ │ │ │ ║
║ │ 🔴 Transmitir [ON●] │ │ 🔴 Transmitir [OFF○] │ ║
║ │ │ │ │ ║
║ │ ⏱️ 00:15:42 │ │ │ ║
║ │ 🔍 Proceso: ✅ Activo│ │ │ ║
║ └──────────────────────┘ └──────────────────────┘ ║
║ ║
╚════════════════════════════════════════════════════════════╝
```
---
### Pestaña Monitor - Vista Mejorada
```
╔════════════════════════════════════════════════════════════╗
║ 📊 Monitor de Estado y PIDs ║
╠════════════════════════════════════════════════════════════╣
║ ║
║ 📈 Resumen General ║
║ ║
║ [Total: 3] [🟢 Activas: 2] [🔴 Errores: 1] [⚪: 0] ║
║ ║
║ ────────────────────────────────────────────────────── ║
║ ║
║ 🔍 Detalle por Plataforma ║
║ ║
║ ┌────────────────────────────────────────────────────┐ ║
║ │ 🟢 YouTube PID: 1234 [⏹️ Detener] │ ║
║ │ Transmitiendo (PID: 1234) │ ║
║ │ │ ║
║ │ ⏱️ Tiempo: 00:15:42 🔍 Vivo 🕐 Inicio: 10:30:00 │ ║
║ │ │ ║
║ │ Información Técnica ▼ │ ║
║ │ PID: 1234 │ ║
║ │ RTMP: rtmp://a.rtmp.youtube.com/live2 │ ║
║ │ Comando: ffmpeg -re -i "URL" -c copy... │ ║
║ │ Verificación: ✅ El proceso 1234 está corriendo│ ║
║ └────────────────────────────────────────────────────┘ ║
║ ║
║ ┌────────────────────────────────────────────────────┐ ║
║ │ 🔴 Twitter/X PID: 5678 [⏹️ Detener] │ ║
║ │ Error: Proceso detenido (PID: 5678) │ ║
║ │ │ ║
║ │ ⏱️ Tiempo: 00:05:12 🔍 Muerto 🕐 Inicio: 10:40:30│ ║
║ │ │ ║
║ │ Información Técnica ▼ │ ║
║ │ Verificación: ❌ El proceso 5678 no está corriendo│ ║
║ └────────────────────────────────────────────────────┘ ║
║ ║
╚════════════════════════════════════════════════════════════╝
```
---
## 🔧 FUNCIONES TÉCNICAS IMPLEMENTADAS
### Gestión de PIDs
```python
# Al iniciar transmisión
pid = process.pid # Obtener PID del proceso FFmpeg
# Guardar en diccionario
st.session_state.active_processes[platform_name] = {
'process': process,
'pid': pid,
'platform': platform_name,
'start_time': datetime.now().isoformat(),
'status': 'running',
'command': ' '.join(command),
'rtmp_url': rtmp_url,
'enabled': True
}
# Verificar si proceso está vivo
def check_process_alive(pid):
try:
os.kill(pid, 0) # Señal 0 para verificar existencia
return True
except OSError:
return False
```
---
### Persistencia de Estado
```python
# Guardar estado en archivo JSON
def save_process_state():
state = {}
for key, info in st.session_state.active_processes.items():
state[key] = {
'pid': info.get('pid'),
'platform': info.get('platform'),
'start_time': info.get('start_time'),
'status': info.get('status'),
'rtmp_url': info.get('rtmp_url'),
'enabled': info.get('enabled', True)
}
with open('process_state.json', 'w') as f:
json.dump(state, f, indent=2)
```
---
### Switch Component
```python
# Switch que controla inicio/detención
switch_value = st.toggle(
f"🔴 Transmitir a {platform_name}",
value=is_enabled, # Estado actual
key=f"switch_{platform_name}"
)
# Detectar cambio
if switch_value != is_enabled:
if switch_value:
# Iniciar transmisión
start_ffmpeg_stream(...)
else:
# Detener transmisión
stop_stream(platform_name)
```
---
## 🚀 CÓMO USAR
### 1. Configurar Plataformas
```
Barra lateral → Configuración
→ Expandir cada plataforma
→ Ingresar RTMP URL
→ Ingresar Stream Key
→ Guardar Configuración
```
---
### 2. Seleccionar Video
```
Pestaña 🔍 Búsqueda
→ Buscar o pegar URL de video EN VIVO
→ Seleccionar video
```
---
### 3. Ver Redes Listas
```
Pestaña 🎛️ Control
→ Ver tabla "📋 Redes Preparadas y Listas"
→ Verificar que tengan ✅ en "Configurada"
→ Ver resumen de cuántas están listas
```
---
### 4. Activar Transmisiones con Switch
```
En cada tarjeta de plataforma:
→ Activar switch: 🔴 Transmitir a [Plataforma] [ON]
→ La transmisión inicia automáticamente
→ Ver PID asignado
→ Ver semáforo cambiar a 🟢
→ Ver tiempo activo en tiempo real
```
---
### 5. Desactivar Transmisiones
```
→ Desactivar switch: [OFF]
→ La transmisión se detiene automáticamente
→ PID se libera
→ Semáforo cambia a ⚪
```
---
### 6. Monitorear PIDs
```
Pestaña 📊 Monitor
→ Ver resumen general
→ Ver detalle por plataforma con PID
→ Verificar estado del proceso (Vivo/Muerto)
→ Ver comando FFmpeg usado
→ Auto-refresh cada 5 segundos
```
---
## 📊 ARCHIVOS GENERADOS
### process_state.json
```json
{
"YouTube": {
"pid": 1234,
"platform": "YouTube",
"start_time": "2026-01-29T10:30:00",
"status": "running",
"rtmp_url": "rtmp://a.rtmp.youtube.com/live2",
"enabled": true
},
"Facebook": {
"pid": 5678,
"platform": "Facebook",
"start_time": "2026-01-29T10:35:00",
"status": "running",
"rtmp_url": "rtmps://live-api-s.facebook.com:443/rtmp/",
"enabled": true
}
}
```
---
## 💡 VENTAJAS DEL SISTEMA
| Característica | Beneficio |
|----------------|-----------|
| **Switch ON/OFF** | Control intuitivo y rápido |
| **Lista de redes** | Vista rápida de estado general |
| **PIDs visibles** | Fácil identificación de procesos |
| **Monitoreo de PIDs** | Verificar que procesos estén vivos |
| **Persistencia** | Estado se mantiene entre reinicios |
| **Auto-refresh** | Monitor actualizado automáticamente |
| **Resumen rápido** | Métricas de un vistazo |
---
## 🔍 MONITOREO DE PROCESOS
### Verificación Automática
El sistema verifica automáticamente:
-**PID existe** - Usa `os.kill(pid, 0)`
-**Proceso activo** - Usa `process.poll()`
-**Tiempo de ejecución** - Calcula desde `start_time`
-**Estado de salud** - Combina todas las verificaciones
### Estados Posibles
- 🟢 **TRANSMITIENDO** - Proceso vivo y activo
-**LISTO** - Configurado pero no transmitiendo
- 🔴 **ERROR** - Proceso murió o falló
---
## 🎯 FLUJO COMPLETO
```
1. Configurar plataformas en sidebar
2. Buscar video EN VIVO
3. Ir a Control
4. Ver tabla de redes preparadas
5. Activar switch de plataformas deseadas
6. Sistema inicia FFmpeg y guarda PID
7. Ver semáforo 🟢 y PID asignado
8. Ir a Monitor para ver detalles
9. Monitor muestra PIDs y verifica procesos
10. Desactivar switch para detener
11. Sistema detiene proceso usando PID
```
---
## 🐛 SOLUCIÓN DE PROBLEMAS
### Switch no responde
**Solución:**
- Verifica que el video esté seleccionado
- Verifica que `stream_url` esté en session_state
- Revisa logs del navegador
---
### PID no aparece
**Solución:**
- El PID se asigna al iniciar FFmpeg
- Si no aparece, el proceso no se inició correctamente
- Revisa logs de FFmpeg
---
### Proceso muestra "Muerto" pero el switch está ON
**Solución:**
- El proceso FFmpeg se detuvo inesperadamente
- Desactiva y reactiva el switch para reiniciar
- Verifica la URL m3u8 y RTMP
---
### Lista de redes no muestra plataformas
**Solución:**
- Configura al menos una plataforma en el sidebar
- Asegúrate de guardar la configuración
- Recarga el panel
---
## ✅ CHECKLIST DE FUNCIONALIDADES
- [x] Switch ON/OFF por plataforma
- [x] Inicio automático al activar switch
- [x] Detención automática al desactivar switch
- [x] Tabla de redes preparadas
- [x] Resumen con métricas
- [x] PIDs guardados para cada proceso
- [x] PIDs visibles en UI
- [x] Verificación de PIDs en tiempo real
- [x] Persistencia de estado en JSON
- [x] Monitor mejorado con PIDs
- [x] Auto-refresh en monitor
- [x] Verificación de proceso vivo/muerto
- [x] Comando FFmpeg visible
- [x] Tiempo activo por proceso
- [x] Detención usando PID si es necesario
---
╔══════════════════════════════════════════════════════════════════════╗
║ ║
║ ✅ TODO IMPLEMENTADO Y FUNCIONANDO ║
║ ║
║ CARACTERÍSTICAS: ║
║ ✅ Switch ON/OFF por plataforma ║
║ ✅ Lista de redes preparadas con tabla ║
║ ✅ PIDs guardados y monitoreados ║
║ ✅ Verificación en tiempo real ║
║ ✅ Persistencia de estado ║
║ ║
║ PROBAR AHORA: ║
║ docker-compose up -d ║
║ http://localhost:8501 ║
║ ║
╚══════════════════════════════════════════════════════════════════════╝