"EPG no carga" es la queja más común entre quienes configuran IPTV en Android TV, y casi todas las causas se ven idénticas desde el lado del usuario: la lista de canales va bien, el vídeo se reproduce, pero la guía está en blanco. La buena noticia es que los modos de fallo son acotados. Hay unos seis, y la mayoría se pueden descartar en un par de minutos.

Esta guía recorre cada uno en el orden en que merece la pena comprobarlos. Si puedes pegar tu URL XMLTV en el validador de EPG antes de empezar, te saltas directamente los pasos 2 a 4.

Dos paneles uno al lado del otro: un fragmento M3U con tvg-id="bbc1" y un fragmento XMLTV cuyo id de canal alterna entre "BBC1" y "bbc1". Un conector entre ellos cambia de una cruz roja a un tick verde según los IDs coincidan o no.

Los IDs de canal se comparan byte a byte: basta una sola letra mayúscula para dejar un canal con la guía en blanco.

1. Comprueba que tienes realmente una URL de EPG

Lo primero que hay que verificar es si siquiera tienes una fuente de guía configurada. Algunos proveedores IPTV entregan la lista de canales (M3U) y la guía (XMLTV) como dos URLs separadas, y bastante gente configura una y da por hecho que la otra venía con ella.

Abre los ajustes de fuente de tu reproductor y busca dos campos distintos. La URL M3U termina en .m3u, .m3u8 o contiene type=m3u_plus. La URL XMLTV suele terminar en .xml, .xml.gz o contener xmltv.php. Si solo hay uno relleno, ahí está tu problema. La mayoría de proveedores de tipo Xtream exponen el XMLTV en el mismo host que la lista; la ruta es típicamente /xmltv.php?username=…&password=… con las mismas credenciales.

2. Confirma que la URL devuelve XMLTV de verdad

Pega la URL en un navegador. Deberías ver XML: texto que empieza por <?xml o <tv> y lleno de etiquetas <channel> y <programme>. Si en su lugar ves una página HTML, tu proveedor te ha redirigido a un login o a un portal cautivo, y tu reproductor está recibiendo la misma respuesta. La solución está en el lado del proveedor: la URL necesita otras credenciales o un token nuevo.

Si ves XML pero es minúsculo —menos de unos pocos KB—, tu proveedor ha devuelto un documento vacío. Eso también es problema suyo; la mayoría de archivos XMLTV para unos miles de canales pesan entre 5 y 50 MB.

3. Comprueba la estructura del archivo

Aquí es donde el validador de EPG se gana el sueldo. Pega la URL en el validador y mira los cuatro números de arriba:

  • Canales. Debería coincidir aproximadamente con el número de canales de tu M3U. Si es una décima parte, el archivo no es la guía completa de tu proveedor.
  • Programas. Deberían ser muchos miles. Una guía con menos de 100 programas en total no va a mostrar nada útil.
  • Próximas 24 h. El número más importante. Si es cero, tu guía está desfasada: el archivo se parsea, pero todas las entradas están en el pasado. El reproductor no tiene nada que mostrar.
  • Horas en total. Una EPG sana cubre entre 24 y 168 horas a partir de ahora. Menos de 24 significa que la guía se quedará sin contenido a lo largo del día.

4. Mira el panel de problemas

Si los números parecen correctos pero la guía sigue vacía, la lista de problemas del validador es el siguiente sitio donde mirar. Tres problemas son habituales en lo que devuelven los proveedores reales:

Programas huérfanos. Hay programas que referencian IDs de canal que no están declarados como <channel> en el mismo archivo. Los reproductores estrictos (la mayoría de los modernos en Android TV) los descartan al importar: el programa no tiene canal al que engancharse, así que desaparece. Si tu proveedor manda unos pocos cientos de huérfanos, es normal y no pasa nada. Si manda decenas de miles, ahí tienes la razón de que haya grandes secciones de tu guía vacías.

Canales duplicados. El mismo ID de canal aparece más de una vez en <channel>. La mayoría de parsers se quedan con la primera declaración y descartan el resto en silencio. Si el descartado tenía un nombre visible distinto, el canal aparece en la guía pero con la etiqueta equivocada.

Sin cobertura "ahora". La comprobación estrella del validador: ¿hay algún canal con un programa emitiéndose ahora mismo? Si la respuesta es cero, la guía aparecerá completamente en blanco en cualquier reproductor que se porte bien, aunque el archivo XMLTV sea técnicamente válido. Guía rancia. El proveedor tiene que refrescar.

5. Verifica la coincidencia de IDs de canal

Esto le pasa a casi todo el mundo. El valor de <channel id="…"> del XMLTV tiene que coincidir exactamente con el tvg-id="…" de tu M3U. Sensible a mayúsculas, sin coincidencias aproximadas. Si tu M3U dice tvg-id="bbc1" y tu XMLTV dice <channel id="BBC1">, el reproductor no tiene forma de conectarlos y el canal muestra una celda de guía vacía.

Para comprobarlo, abre tu M3U en un editor de texto y mira cualquier valor de tvg-id. Luego mira el mismo canal en la tabla "Top canales" del validador. Los IDs deberían ser byte a byte idénticos. Si no lo son, tienes tres opciones:

  1. Conseguir un archivo de mapeo de tvg-id de tu proveedor (algunos lo publican).
  2. Editar manualmente tu M3U para que los IDs coincidan con los de la EPG.
  3. Cambiar a un reproductor que haga emparejamiento aproximado por nombre visible. Klipa lo hace; la mayoría no.

6. Comprueba la zona horaria

La especificación XMLTV usa marcas de tiempo AAAAMMDDHHMMSS +ZZZZ. Algunos proveedores eliminan el offset y dejan marcas de tiempo "desnudas", sin zona horaria. Los parsers estrictos las tratan como UTC; los permisivos adivinan según la configuración regional del sistema; ambos se equivocan a veces, y el resultado es una guía desplazada varias horas: los programas aparecen en franjas equivocadas, o los de anoche aparecen como de hoy.

Si las entradas de la guía se ven bien pero desplazadas, esa es casi con seguridad la causa. La solución es fea: necesitas una herramienta que desplace cada marca de tiempo N horas. Hasta que publiquemos el desplazador de zona horaria de EPG como herramienta, el apaño es abrir una incidencia con tu proveedor pidiéndole que incluya el offset en lo que devuelve.

Cuando nada de lo anterior funciona

Si has revisado los seis puntos y la guía sigue sin cargar, el fallo está en el propio reproductor. La mayoría de reproductores IPTV modernos cachean la EPG de forma agresiva, a veces durante horas tras un refresco. Fuerza el vaciado de la caché de EPG, o desinstala y reinstala la app para forzar una importación limpia.

Klipa no cachea EPG obsoleta: la vuelve a descargar cada seis horas por defecto, y puedes refrescarla a mano desde los ajustes. Si quieres un reproductor que ya gestione los seis modos de fallo correctamente desde el primer momento, este es el argumento.