Guía de integración: API, visor, reproductor y ejemplos

Manual ELI STREAMING

Un solo mapa de lo que hace la aplicación. Cada módulo va aparte. Lo privado no se pinta: solo el video.

1. Checklist único

  1. Arranque con INICIAR.bat. Queda en http://127.0.0.1:4174.
  2. El visor incorpora las nueve fuentes, de TB1 a TB9, según su disponibilidad. Los filtros van en una fila. La lista a la izquierda y el video a la derecha.
  3. Las fuentes con video HLS (TB1, TB2, TB3, TB7, TB8 y TB9) se reproducen con el reproductor propio.
  4. TB4 no abre la URL del video sola. La página permitida va por dentro y no se muestra. En pantalla solo queda el video, sin selector ni revistas.
  5. Por defecto existe sala1 con todas las fuentes (TB1 a TB9). sala2 y sala3 son otras pantallas y no se pisan.
  6. El mando está en /remoto. La imagen está en /sala?player=sala1.
  7. El JSON local sirve para armar otro front en esta PC: total, por sala o por una sola TV. Para otros equipos usa la API pública y consulta la guía de integración.
  8. Iframe y Exportar siguen para embeber sin la barra de la aplicación.
  9. Este manual sale del botón Manual. No cambia el visor.

2. Carpetas que se mantienen

eli/servidor.py

Abre el puerto, reparte rutas y, si hace falta, el puente de TB4.

iniciar.py

Reserva el puerto antes de iniciar tareas. Usa 127.0.0.1:4174 por defecto y reconoce una instancia ELI ya abierta sin duplicarla.

eli/fuentes.py

Una carpeta, nueve fuentes (TB1 a TB9). Cada una trae catálogo y resuelve su canal. El deporte de cada fuente se traduce a un solo catálogo común (por ejemplo, «Football» de TB1 pasa a Fútbol).

eli/motor.py

Junta las nueve fuentes y guarda la última copia buena.

eli/salud.py y eli/motor.py

Prueba señales en segundo plano. No tumba el video que ya se ve.

eli/api.py y eli/motor.py

Memoria de salas. Cada nombre guarda su fuente y su canal.

eli/api.py

JSON del visor, de la API y del control.

public

Visor, reproductor, remoto, sala, manual y prueba.

3. Las fuentes

TB1

Catálogo de partidos. El video es HLS y pasa por el proxy /v/…/m.m3u8. La URL de origen no sale al navegador.

TB2

Otra lista de canales. Mismo reproductor. Se elige sola o junto con las demás.

TB3

Lista de streamxhd.st. Mismo reproductor HLS.

TB4

Canales con reproductor propio. La página permitida queda detrás. El visor recorta el menú interno. No se escribe la dirección, ni en el visor ni en la sala.

TB5

Eventos con configuración privada en datos\tb5-privado.json. Sin canales configurados queda en reposo.

TB6

Canal con enlace firmado en datos\tb6-privado.json. Cuando el enlace vence hay que renovarlo.

TB7

Agenda de partidos. Solo se marca EN VIVO cuando entrega video comprobable.

TB8

Canales y partidos por país. Mismo reproductor HLS.

TB9

Catálogo amplio. Su señal se obtiene con un navegador interno, por eso se comprueba al abrir el evento y no en el barrido general.

4. Sincronía

  1. Al abrir, se leen las nueve fuentes. Si una falla, se conserva el catálogo anterior y el video que ya estaba.
  2. El visor vuelve a pedir la lista cada 12 segundos. No recarga el iframe si el canal no cambió.
  3. TB4 se comprueba con un navegador y avance real de video. Su lista distingue la última prueba de la reproducción actual. El barrido comparte una sola reproducción entre clientes, respeta pausas y revisa gradualmente; consultar el catálogo no reproduce todos los canales.
  4. Elegir un canal en el visor no cambia la sala remota. Son dos mandos distintos.
  5. La sala pregunta cada segundo qué canal le toca. Si el mando no cambió, no reinicia el video.

5. Remoto y WebView

Hay dos direcciones. No son la misma ventana.

En el mando se elige la sala, luego «todas» o una sola TV, y el canal. La sala abierta en otra ventana, o dentro de un WebView, cambia sola.

WebView de sala1
http://127.0.0.1:4174/sala?player=sala1

WebView de sala2
http://127.0.0.1:4174/sala?player=sala2

Si no hay un canal seleccionado, el televisor muestra una animación de espera. La operadora selecciona el canal en el remoto de caja; la pantalla no ofrece botones. Cada sala conserva su propia selección.

6. JSON vivo para otro front

Solo responde en esta PC. Sirve para armar su propia pantalla y cambiar el canal en el momento.

GET  http://127.0.0.1:4174/api/json
GET  http://127.0.0.1:4174/api/json/sala/sala1
GET  http://127.0.0.1:4174/api/json/fuente/TB1
POST http://127.0.0.1:4174/api/json/sala/sala1
{"fuente":"TB4","evento_id":"ID_PUBLICADO_EN_EL_CATALOGO"}

Volver a todas las fuentes:
{"fuente":"todas","evento_id":null}

El total trae sala1 y el recuento de TB1 a TB9. Una sala trae solo lo que esa sala está usando. Una fuente trae solo esa TV. El botón JSON del visor muestra lo mismo, sin sustituir la lista ni el video.

7. Meterlo en otra aplicación

Panel local de operación
http://127.0.0.1:4174

Visor público insertable, sin la barra de administración
http://127.0.0.1:4174/embed

Un partido ya elegido
http://127.0.0.1:4174/embed?evento=EVENTO

Iframe del botón Iframe
copia el marco del canal que está en pantalla

Exportar abre una ventana con el video del tamaño del contenedor. No fija un tamaño de escritorio.

Estas direcciones 127.0.0.1 son locales. En otra página usa la dirección accesible del servidor ELI. Consulta la guía de integración para autenticación, IDs, LIVE y las limitaciones de HLS directo. El feed disponible es JSON/API; no hay un feed RSS o M3U permanente independiente.

8. Audio de TB4

El video de TB4 lo pinta la página permitida, dentro de un marco. El navegador suele empezarlo en silencio hasta que hay un clic en esa imagen. Un clic sobre el video habilita el sonido. ELI no puede subir el volumen desde fuera de ese marco: es la misma cerradura que impide llevarse el video.

9. Referencia Python

Esta edición ejecuta el servidor, la API, las fuentes y el puente TB4 en Python. El navegador conserva el visor y el reproductor web. Instale con INSTALAR.bat y arranque con INICIAR.bat. Para detener esta copia, presione Ctrl+C en su ventana.

10. Qué no se toca al mantener

11. Mantenimiento y pruebas

La guía técnica completa está en MANTENIMIENTO.md, en la carpeta del proyecto. Ejecutar PROBAR.bat para las pruebas locales; los informes guardan fecha y resultados. Las pruebas reales de proveedores son separadas y deben hacerse secuencialmente. No borrar datos ni toda la carpeta informes: contienen estado y archivos utilizados por la aplicación.

12. Seguridad del video

Botón Seguridad del panel. Está activa por defecto y no agrega retraso: el video sigue el mismo camino.

13. Cómo se decide EN VIVO

13b. Menú de la TV y estados

Una sola regla, calculada en el servidor (eli/duracion.py), decide el estado de cada elemento, y toda la TV la usa.

Menú: Inicio · En vivo · Por comenzar · Próximos · Canales 24 h · Mi lista · Guía. «Para ti» y «Tendencias» están dentro de Inicio. Los canales se agrupan por cadena (ESPN, Fox Sports, DSports, TNT, DAZN, beIN, Sky, TyC, TUDN, Win, Perú, LaLiga, Brasil, Portugal, regional, TV abierta, Hípica, Streamers) en Canales 24 h y en filas de Inicio. Un canal que no emite muestra «Fuera del aire». Cuando la fuente informa logos de los equipos (TB3), la tarjeta los muestra; si no cargan, usa el monograma propio.

13c. Guía en parrilla

Como la guía de Disney+/ESPN: columnas de 30 min con la línea de «ahora», una fila por deporte (los partidos simultáneos bajan a otra línea) y, debajo, los canales en vivo por cadena. Cada bloque dice EN VIVO con el tiempo restante, EMPIEZA a qué hora, PRÓXIMO o FINALIZADO. OK abre una ficha con imagen, horario y «VER EN VIVO»; ‹ › mueven 2 h y ⚡ vuelve a ahora. Funciona con control remoto (Android TV), teclado, mouse, táctil y móvil. TB8 y TB9 solo publican la hora: si a esa hora de hoy el partido ya habría terminado, es de mañana.

14. Diagnóstico de red

DIAGNOSTICO-RED.bat (con ELI abierto) prueba DNS, conexión y video de cada fuente, y luego pide señales nuevas a ELI solo de partidos ya empezados (fútbol primero). El resultado queda en informes\diagnostico-red.json.

15. Portadas y escudos

Botón Portadas del panel. Las fotos nuevas quedan pendientes hasta aprobarlas; las rechazadas no vuelven. La actualización semanal (escudos, portadas y optimización de imágenes) es automática.

15b. Hipódromos: país y portada propia

Las señales de hípica solo traen el nombre de la pista (por ejemplo «11:20 A.M. GULFSTREAM PARK»). ELI reconoce más de 110 hipódromos de Estados Unidos, Canadá, Latinoamérica y el resto del mundo (archivo eli/hipodromos.py) y les asigna país y región, así ya no aparecen como «Sin país informado». Las siglas que publica la fuente, como (UK), (AUS), (NZ) o (KRA), también indican el país.

Cada pista tiene su propia carpeta de portadas (img/portadas/hipica-gulfstream, etc.). DESCARGAR-PORTADAS.bat busca hasta 3 fotos por pista en Wikimedia Commons, primero las de América; quedan pendientes en Revisión de portadas hasta que las apruebes. Mientras una pista no tenga portada aprobada, usa las fotos generales de hípica.

15c. Portadas de canales

Los canales usan su portada oficial desde public/img/canales/ (formato SVG, nítido en 4K). El servidor reconoce las variantes del nombre: «ESPN2», «ESPN 2 HD» → espn-2.svg; «DirecTV Sports 2» → dsports-2.svg; «FOX SPORTS 1 ARG» → fox-sports-1.svg. La lista está en eli/canales_portada.py. Para un canal nuevo basta copiar su portada con el nombre del canal (liga1-max.jpg) o agregar una línea a esa lista.

Los canales de hípica (TVG, Capital OTB, INHTV) usan su logo como portada desde img/portadas/hipica-tvg, hipica-capital-otb e hipica-inhtv.

15d. Fuentes en cascada (TB8 y sus espejos)

TB8 lee la agenda de todos sus espejos a la vez (rojadirecta, tarjeta roja, pirlotv, elitegol, pelotalibre, futbol libre, viperplay, televisión libre, rústico TV…). Lo que publica cada espejo se suma: un evento junta las señales de todos y nunca se pisan. De una misma señal repetida en varios espejos se guardan dos (principal y respaldo). Si un espejo cae, los demás siguen; el caído se vuelve a probar en 5 minutos y, si sigue caído, la espera sube hasta 1 hora. El estado de cada espejo queda en informes/espejos-tb8.json.

15e. Herramientas de seguridad (panel de Seguridad)

Todas activas por defecto; cada una se apaga con su interruptor en /seguridad/panel.html (carpeta del módulo: eli/seguridad/ y public/seguridad/; ver eli/seguridad/LEEME-SEGURIDAD.md).

Ningún sitio web puede impedir del todo las herramientas de desarrollador: esto frena y registra a la mayoría; la defensa principal sigue siendo el servidor (tokens atados a IP, navegador, sesión y clave de página).

16. Versión

Edición 6.8.76. Los archivos reemplazados en cada entrega se guardan en ELI-STREAMING-HISTORICO.

Filtros de deporte y liga en todas las vistas

El principal y el remoto ajustan deportes y ligas al catálogo seleccionado. Cambiar de fuente limpia filtros incompatibles. El visor integrado ofrece deporte y liga sobre sus señales disponibles.

JSON y remoto incluyen deporte, deporte_id, liga y liga_id. Puedes consultar /api/json/fuente/TB3?deporte=F%C3%BAtbol%20americano&liga=NFL. El API de videos admite los mismos filtros: /api/videos?deporte=B%C3%A9isbol&liga=MLB. El API público solo publica señales comprobadas, por lo que puede tener menos eventos que el catálogo del remoto.

Los nombres de liga deben existir en el catálogo; no se inventan ligas ni partidos. En TV2 el grupo original es un país, no una liga; ESPN y otros canales mixtos no informan qué deporte emiten en este instante. Los filtros no cambian la sala ni ordenan reproducir un canal.