Introducción
TDT Spain es compatible con listas M3U estándar, pero además incorpora una serie de extensiones propias identificadas mediante directivas #EXTV-.
Estas extensiones permiten trabajar con streams dinámicos, añadir cabeceras HTTP personalizadas, extraer automáticamente URLs ocultas dentro de páginas web o integrar plataformas especiales como YouTube.
Estructura básica de un canal
#EXTM3U
#EXTINF:-1 tvg-id="canal" tvg-name="canal" group-title="General",Mi Canal
#EXTV-index: 1
https://servidor.com/stream.m3u8
¿Qué significa cada línea?
#EXTM3U indica el inicio de la lista.
#EXTINF contiene toda la información descriptiva del canal.
#EXTV-index almacena un índice interno utilizado por TDT Spain.
La última línea corresponde a la URL que será reproducida.
Ejemplo 1: Canal con URL directa
#EXTINF:-1 tvg-id="euroindiemusic" tvg-epgid="euroindiemusic.TV" tvg-name="euroindiemusic" tvg-logo="https://graph.facebook.com/euroindiemusic/picture?width=200&height=200" group-title="Musica",Euro Indie Music Chart TV
#EXTV-index: 1
https://57068da1deb21.streamlock.net/euroindiemusic/euroindiemusic/playlist.m3u8
#EXTINF
El valor -1 indica una duración indefinida. Es el valor habitual para canales de televisión en directo.
tvg-id
Identificador interno único utilizado para identificar el canal dentro de la lista.
tvg-epgid
Identificador utilizado para relacionar el canal con una guía electrónica de programación (EPG).
tvg-name
Nombre interno asociado al canal.
tvg-logo
URL de la imagen que se mostrará como logotipo.
group-title
Permite clasificar el canal dentro de una categoría.
Nombre visible
El texto situado después de la coma será el nombre que verá el usuario.
#EXTV-index
Índice interno utilizado para organizar los elementos de la lista.
URL directa
Al tratarse de una URL M3U8 real, la aplicación puede reproducirla directamente sin procesamiento adicional.
Ejemplo 2: Emisora de radio
#EXTINF:-1 tvg-id="kissfm" tvg-logo="https://graph.facebook.com/kissfm.es/picture?width=200&height=200" group-title="Radio;Musica" tvg-name="Kiss FM",Kiss FM
#EXTV-index: 1
#EXTV-radio: "true"
https://bbkissfm.kissfmradio.cires21.com/bbkissfm.mp3
#EXTINF
El valor -1 indica una emisión en directo sin duración definida.
tvg-id
Identificador único de la emisora dentro de la lista.
tvg-logo
URL de la imagen utilizada como logotipo de la emisora.
group-title
Permite clasificar la emisora en una o varias categorías. En este ejemplo aparece en los grupos Radio y Musica.
tvg-name
Nombre interno de la emisora.
Nombre visible
El texto situado después de la coma será el nombre mostrado al usuario.
#EXTV-index
Índice interno utilizado para organizar los elementos de la lista.
#EXTV-radio
Marca el elemento como una emisora de radio. Cuando el valor es "true", la aplicación puede aplicar un comportamiento específico para radios, como mostrar un visualizador de audio, utilizar configuraciones de buffer optimizadas o desactivar funciones exclusivas de televisión.
URL del stream
URL directa del flujo de audio. Puede apuntar a emisiones MP3, AAC, HLS u otros formatos compatibles con el reproductor.
Ejemplo 3: Extracción dinámica de URL
Algunas webs no muestran directamente la URL de reproducción. En estos casos TDT Spain puede localizarla automáticamente.
#EXTV-streamtype: "geturl"
Funcionamiento
- Se descarga la página web indicada.
- Se analiza su contenido.
- Se aplica una expresión regular.
- Se obtiene la URL real del stream.
- Se inicia la reproducción.
Cabeceras HTTP
#EXTV-headers: user-agent="Mozilla/5.0" referer="https://ejemplo.com" origin="https://ejemplo.com"
User-Agent: identifica el dispositivo o cliente.
Referer: indica desde qué página se accede.
Origin: identifica el origen de la solicitud.
Base URL
#EXTV-baseurl: "https:"
Permite completar enlaces relativos.
Patrón de extracción
#EXTV-patron: "expresion_regular"
Define el patrón utilizado para localizar el stream. Debe estar en codificación URL Encode.
Ejemplo 4: Streams de YouTube
#EXTINF:-1 tvg-id="IB3 2" group-title="Baleares",IB3 2
#EXTV-index: 1
#EXTV-streamtype: "youtube"
https://www.youtube.com/IB3/live
Cuando se utiliza el tipo youtube, TDT Spain detecta automáticamente el directo activo y recupera el stream real.
Proceso interno
- Acceso al canal de YouTube.
- Detección del directo activo.
- Obtención del stream.
- Inicio de la reproducción.
URLs compatibles
https://www.youtube.com/@usuario/live
https://www.youtube.com/c/canal/live
https://www.youtube.com/channel/ID/live
https://www.youtube.com/usuario/live
Referencia rápida
| Directiva | Descripción |
|---|---|
| #EXTINF | Información descriptiva del canal |
| #EXTV-index | Índice interno |
| #EXTV-streamtype | Tipo de procesamiento del stream |
| #EXTV-headers | Cabeceras HTTP personalizadas |
| #EXTV-baseurl | Prefijo para URLs relativas |
| #EXTV-patron | Expresión regular de extracción en codificación URL Encode |
| tvg-id | Identificador del canal |
| tvg-epgid | Identificador EPG |
| tvg-logo | URL del logotipo |
| group-title | Categoría del canal |
Buenas prácticas
- Utilizar siempre URLs HTTPS cuando sea posible.
- Asignar un tvg-id único a cada canal.
- Organizar los canales mediante group-title.
- Verificar periódicamente los logos.
- Evitar expresiones regulares excesivamente genéricas.
Errores frecuentes
- Olvidar la cabecera #EXTM3U.
- URLs M3U8 incorrectas o caducadas.
- User-Agent inadecuado.
- Expresiones regulares sin grupo de captura.
- Referer u Origin incorrectos.