Education·8 min

Av Shamir

Hvordan en XMLTV EPG-fil faktisk ser ut (med eksempler)

Den raskeste måten å slutte å være forvirret av programguider på er å åpne en og lese den. XMLTV er ren XML — ordrik, men ikke komplisert — og ti minutter med et reelt eksempel vil spare deg for timer med å gjette på hvorfor guiden din er tom.

Dette innlegget viser en reell fil, dekoder den tag for tag, og bruker deretter denne forståelsen til å forklare den eneste vanligste guidefeilingen.

Ærligheten talt: Tuneline er en mediespiller for innhold du leverer. Den viser en guide fra en tidsplan-kilde du oppgir. Den leveres uten guide og uten innhold.

Strukturen i en setning

En XMLTV-fil inneholder nøyaktig to typer ting: <channel>-elementer som erklærer hva som finnes, og <programme>-elementer som sier hva som vises når.

Det er det. Alt annet er detaljer.

Et minimalt, fullstendig eksempel

<?xml version="1.0" encoding="UTF-8"?>
<tv generator-info-name="example-grabber">

  <channel id="example.news.us">
    <display-name>Example News</display-name>
    <icon src="http://logos.example/news.png" />
  </channel>

  <programme start="20260806180000 +0000"
             stop="20260806190000 +0000"
             channel="example.news.us">
    <title lang="en">Evening Report</title>
    <desc lang="en">The day's headlines and analysis.</desc>
    <category lang="en">News</category>
  </programme>

</tv>

Det er en gyldig, fullstendig guide som beskriver én kilde og én times tidsplan. En reell fil er de samme to formene gjentatt tusenvis av ganger.

Dekodert tag for tag

ElementHva det gjør
<tv>Roten. Alt lever inne i den.
<channel id="…">Erklærer en kilde. id er den viktige delen — det er sammenføyingsnøkkelen.
<display-name>Menneskeleselig navn som vises i guiden.
<icon src="…">Logo-URL.
<programme start stop channel>Én planlagt gjenstand. channel må samsvare med en <channel id>.
<title>Programnavn.
<desc>Sammendrag.
<category>Sjanger. Dette er hva foreldrekontroller og filtre virker på.

Tidsformatet snapper alle

start="20260806180000 +0000"

Les som YYYYMMDDHHMMSS fulgt av en UTC-offset. Så det er 6. aug 2026, 18:00:00 UTC.

Offseten er delen som betyr noe. Hvis en fil utelater den, eller erklærer en som ikke stemmer med virkeligheten, lastes guiden din inn perfekt og viser alt på feil tid. Det er et helt annet problem enn en tom guide, og det fikses i tidssone-innstillingene dine, ikke ved å endre kilder. (Rettelse av feil tider.)

Sammenføyingen: Hvorfor guiden din er tom selv om filen lastet inn

Her er noe som er verdt å forstå, fordi det forklarer de fleste guideklager.

Spillelisten din og guiden din er to separate filer som må samsvare. Samsvaringen skjer på en ID.

I M3U:

#EXTINF:-1 tvg-id="example.news.us" tvg-logo="…",Example News
http://example.com/news.m3u8

I XMLTV:

<channel id="example.news.us">

tvg-id må være lik channel id. Nøyaktig — inkludert store/små bokstaver og tegnsetting.

Når de samsvarer, viser oppføringen sin tidsplan. Når de ikke gjør det, får du en oppføring med en tom guide, og filen var aldri skyldig. (M3U-siden av dette.)

Dette er hvorfor "jeg la til en guide og ingenting skjedde" vanligvis verken er spillelisten sin eller guidens feil. Det er at ingen fikk dem til å være enige om identifikatorer. En guide som dekker en annen region enn spillelisten din vil laste inn tusenvis av programmer som ikke samsvarer med noen av oppføringene dine.

Legge til en guidekilde

Hvordan inspisere en guidekilde før du stoler på den

Før du skylder på spilleren din, se på filen.

1. Er den komprimert? Mange kilder leveres .xml.gz. Det er normalt — de fleste spillere håndterer det. Hvis du inspiserer for hånd, dekomprimerer du først.

2. Inneholder den faktisk kildene dine? Søk i filen etter en av tvg-id-verdiene dine. Hvis den ikke er der, dekker den guiden ikke listen din, og ingen innstilling vil endre det.

curl -s "https://example.com/guide.xml.gz" | gunzip | grep -c "<channel "
curl -s "https://example.com/guide.xml.gz" | gunzip | grep "example.news.us"

Den første forteller deg hvor mange kilder den erklærer. Den andre forteller deg om din er en av dem.

3. Dekker den et nyttig tidsintervall? Sjekk de tidligste og seneste start-verdiene. Noen gratis guider inneholder bare 24 timer; noen inneholder to uker. En guide som endte i går ser identisk ut som en brukket.

4. Hvor stor er den? Fulle nasjonale guider går opp til titalls eller hundrevis av megabyte ukomprimert. Det er normalt, og det er hvorfor første innlasting kan ta minutter på en TV-boks. (Gratis XMLTV-kilder.)

Vanlige misformasjoner

Virkelige guidefiler bryter på forutsigelige måter:

  • En HTML-feilside lagret som .xml. Åpne den. Hvis den første linjen er <!DOCTYPE html>, mislyktes nedlastingen og lagret feilen.
  • Ampersander uten escape. En enkelt & i stedet for &amp; i en tittel er ugyldig XML og kan avbryte hele analysen. Én dårlig tittel, ingen guide i det hele tatt.
  • Dupliserte <channel id>-oppføringer. To erklæringer av samme ID; atferden avhenger av spilleren.
  • Programmer uten samsvarende kanal. Tidsplanoppføringer hvis channel-attributt ikke samsvarer med noen erklært <channel id>. De blir stille droppet.
  • Manglende stop-tider. Noen grabbere utelater dem og forventer at neste programs start underforstår slutten. Noen spillere utleder ikke det, noe som etterlater hull.

Kan jeg skrive eller redigere en selv?

Ja. Det er XML, så en hvilken som helst tekstredigerer fungerer, og for et lite kuratert oppsett er det helt praktisk.

Nyttige redigeringer:

  • Endre en <channel id> for å samsvare med tvg-id som spillelisten din allerede bruker — ofte enklere enn å redigere hundrevis av spillelistelinjer.
  • Trim det ned. Slett <channel> og <programme>-elementer du ikke trenger. En mindre fil lastes mye raskere på begrensede enheter.
  • Rett offseten hvis hver gang er jevnt feil.

To regler: lagre som UTF-8, og hold det velformet — ett uomslutt & kan koste deg hele guiden.

Ofte stilte spørsmål

Hvordan ser en EPG-fil ut?

Ren XML med to typer elementer: <channel> som erklærer hver kilde, og <programme> som gir starttid, stoppid og tittel for hver planlagt gjenstand.

Hvilket format er XMLTV i?

XML, vanligvis servert som .xml eller gzip-komprimert .xml.gz. Tidsmerker er YYYYMMDDHHMMSS pluss en UTC-offset.

Hvorfor lastes guiden min inn men viser ingenting?

Nesten alltid fordi spillelisten din tvg-id-verdier ikke samsvarer med guidens <channel id>-verdier. Filen lastet fint; det var ingenting å sammenføye den med.

Hvordan sjekker jeg om en guide dekker kildene mine?

Last den ned, dekomprimere hvis nødvendig, og søk etter en av tvg-id-strengene dine. Hvis den ikke er i filen, beskriver den guiden ikke listen din.

Hvorfor er guidefilen min så stor?

En nasjonal guide med to ukers tidsplan for hundrevis av kilder er virkelig titalls eller hundrevis av megabyte. Det er forventet, og det er hvorfor første innlasting er treg.

Kan jeg redigere en XMLTV-fil?

Ja, i en hvilken som helst tekstredigerer. Lagre som UTF-8 og hold XML velformet — et enkelt uomslutt & kan bryte hele analysen.

Konklusjon

  • XMLTV inneholder nøyaktig to ting: <channel>-erklæringer og <programme>-oppføringer.
  • Tidsmerker er YYYYMMDDHHMMSS + UTC-offset — en feil offset betyr riktige data, feil tider.
  • Guiden sammenføyer med spillelisten din på tvg-id = channel id, nøyaktig. Missamsvaring er topårsaken til en tom guide.
  • Inspiser før du skylder: dekomprimere, søk etter ID-en din, sjekk datointervallet.
  • Én uomslutt & kan ugyldiggjøre en hele guidefilen.

Har du en spilling og en guide-URL? Last ned Tuneline — legg til begge og rutenettet fylles inn. Gratis og uten annonser.

— Shamir

Del denne artikkelen

The fast fix

Get Tuneline free

A clean, no-account media player for macOS, Windows, Linux, Android, TV, and iOS. Bring your own playlist.

Download free

The cross-platform media player behind these answers — new platforms, sync updates, the honest build story. No spam, unsubscribe anytime.

Les denne artikkelen på et annet språk

Tuneline er en mediespiller. Den leverer, er ikke vert for og distribuerer ikke noe innhold. Du tar med din egen spilleliste, akkurat som med VLC.