18 KiB
╔══════════════════════════════════════════════════════════════════════╗ ║ ║ ║ ✅ 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_urlesté 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 ║ ║ ║ ╚══════════════════════════════════════════════════════════════════════╝