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

18 KiB
Raw Permalink Blame History

╔══════════════════════════════════════════════════════════════════════╗ ║ ║ ║ 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

# 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

# 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

# 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

{
  "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

  • Switch ON/OFF por plataforma
  • Inicio automático al activar switch
  • Detención automática al desactivar switch
  • Tabla de redes preparadas
  • Resumen con métricas
  • PIDs guardados para cada proceso
  • PIDs visibles en UI
  • Verificación de PIDs en tiempo real
  • Persistencia de estado en JSON
  • Monitor mejorado con PIDs
  • Auto-refresh en monitor
  • Verificación de proceso vivo/muerto
  • Comando FFmpeg visible
  • Tiempo activo por proceso
  • 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 ║ ║ ║ ╚══════════════════════════════════════════════════════════════════════╝