Education·8 min

Kirjoittaja Shamir

Miltä XMLTV EPG -tiedosto oikeasti näyttää (esimerkkien kera)

Nopein tapa päästä eroon ohjelmaoppaiden aiheuttamasta hämmennyksestä on avata sellainen ja lukea sitä. XMLTV on pelkkää XML:ää — laveasanaista mutta ei monimutkaista — ja kymmenen minuuttia oikean esimerkin parissa säästää tuntikausia arvailua siitä, miksi opas on tyhjä.

Tässä julkaisussa näytetään oikea tiedosto, puretaan se tagi tagilta ja käytetään tätä ymmärrystä yleisimmän opasongelman selittämiseen.

Rehellisesti sanottuna: Tuneline on mediasoitin sisällölle, jonka sinä toimitat. Se näyttää ohjelmaoppaan aikataululähteestä, jonka sinä annat. Sen mukana ei toimiteta opasta eikä sisältöä.

Rakenne yhdellä lauseella

XMLTV-tiedostossa on täsmälleen kahdenlaisia asioita: <channel>-elementtejä, jotka ilmoittavat mitä on olemassa, ja <programme>-elementtejä, jotka kertovat mitä milloinkin esitetään.

Siinä kaikki. Kaikki muu on yksityiskohtia.

Pieni mutta täydellinen esimerkki

<?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>

Tämä on kelvollinen, täydellinen opas, joka kuvaa yhtä lähdettä ja yhden tunnin ohjelma-aikataulun. Oikeassa tiedostossa nämä kaksi rakennetta vain toistuvat tuhansia kertoja.

Tagien purku tagi tagilta

ElementtiMitä se tekee
<tv>Juuri. Kaikki sijaitsee sen sisällä.
<channel id="…">Ilmoittaa lähteen. id on tärkeä osa — se toimii yhdistämisavaimena.
<display-name>Oppaassa näkyvä ihmiselle luettava nimi.
<icon src="…">Logon URL-osoite.
<programme start stop channel>Yksi aikataulutettu ohjelma. channel-arvon on vastattava <channel id>-arvoa.
<title>Ohjelman nimi.
<desc>Tiivistelmä.
<category>Laji. Tähän perustuvat -ikärajoitukset ja suodattimet.

Aikaleimojen muoto yllättää kaikki

start="20260806180000 +0000"

Luetaan muodossa YYYYMMDDHHMMSS, jota seuraa UTC-poikkeama. Kyseessä on siis 6. elokuuta 2026 klo 18.00.00 UTC.

Poikkeama on se osa, jolla on merkitystä. Jos se puuttuu tiedostosta tai ilmoitettu poikkeama ei vastaa todellisuutta, opas latautuu ongelmitta mutta näyttää kaiken väärään aikaan. Tämä on täysin eri ongelma kuin tyhjä opas, ja se korjataan aikavyöhykeasetuksista, ei lähteitä vaihtamalla. (Väärien aikojen korjaaminen.)

Yhdistäminen: miksi opas on tyhjä, vaikka tiedosto latautui

Tämä kannattaa ymmärtää, koska se selittää suurimman osan opasta koskevista ongelmailmoituksista.

Soittolistasi ja oppaasi ovat kaksi erillistä tiedostoa, jotka on yhdistettävä toisiinsa. Yhdistäminen tapahtuu tunnisteen perusteella.

M3U-tiedostossa:

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

XMLTV-tiedostossa:

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

tvg-id-arvon on oltava sama kuin channel id-arvo. Täsmälleen sama — kirjainkoko ja välimerkit mukaan lukien.

Kun ne täsmäävät, kohde näyttää ohjelma-aikataulunsa. Kun ne eivät täsmää, kohteella näkyy tyhjä opas, eikä vika ollut tiedostossa. (Tämän M3U-puoli.)

Siksi ”Lisäsin oppaan, mutta mitään ei tapahtunut” ei yleensä johdu soittolistasta eikä oppaasta. Ongelma on siinä, ettei niiden tunnisteita ole sovitettu yhteen. Eri alueen kattava opas kuin soittolistasi lataa tuhansia ohjelmia, joista yksikään ei vastaa kohteitasi.

Opaslähteen lisääminen

Opaslähteen tarkistaminen ennen siihen luottamista

Ennen kuin syytät soitinta, tarkista tiedosto.

1. Onko se pakattu? Monet lähteet toimitetaan muodossa .xml.gz. Se on normaalia — useimmat soittimet käsittelevät sen. Jos tarkistat tiedoston käsin, pura pakkaus ensin.

2. Sisältääkö se todella lähteesi? Hae tiedostosta yhtä tvg-id-arvoistasi. Jos sitä ei löydy, opas ei kata listaasi, eikä mikään asetus muuta asiaa.

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"

Ensimmäinen kertoo, kuinka monta lähdettä tiedosto ilmoittaa. Toinen kertoo, kuuluuko omasi niiden joukkoon.

3. Kattaako se hyödyllisen ajanjakson? Tarkista aikaisimmat ja myöhäisimmät start-arvot. Jotkin ilmaiset oppaat sisältävät vain 24 tuntia, jotkin kaksi viikkoa. Eilen päättynyt opas näyttää aivan samalta kuin rikkinäinen opas.

4. Kuinka suuri se on? Täydet valtakunnalliset oppaat ovat pakkaamattomina kymmeniä tai satoja megatavuja. Se on normaalia ja siksi ensimmäinen lataus voi kestää televisioboksilla minuutteja. (Ilmaiset XMLTV-lähteet.)

Yleiset virheet

Oikean maailman opastiedostot rikkoutuvat ennakoitavilla tavoilla:

  • HTML-virhesivu tallennettuna muodossa .xml. Avaa tiedosto. Jos ensimmäinen rivi on <!DOCTYPE html>, lataus epäonnistui ja virhe tallentui tiedostoon.
  • Escapettomat et-merkit. Otsikossa oleva paljas & merkkien &amp; sijaan tekee XML:stä virheellistä ja voi keskeyttää koko jäsennyksen. Yksi virheellinen otsikko, eikä opasta ole lainkaan.
  • Päällekkäiset <channel id>-merkinnät. Sama tunniste on ilmoitettu kahdesti; toiminta riippuu soittimesta.
  • Ohjelmat, joilla ei ole vastaavaa kanavaa. Aikataulumerkinnät, joiden channel-attribuutti ei vastaa mitään ilmoitettua <channel id>-attribuuttia. Ne hylätään hiljaisesti.
  • Puuttuvat stop-ajat. Jotkin kerääjät jättävät ne pois ja olettavat seuraavan ohjelman alkamisajan määrittävän päättymisajan. Kaikki soittimet eivät päättele sitä, jolloin aikatauluun jää aukkoja.

Voinko kirjoittaa tai muokata oppaan itse?

Kyllä. Kyseessä on XML, joten mikä tahansa tekstieditori käy, ja pieneen, itse kuratoituun kokoonpanoon se on täysin käytännöllinen ratkaisu.

Hyödyllisiä muokkauksia:

  • Vaihda <channel id>-arvo vastaamaan tvg-id-arvoa, jota soittolistasi jo käyttää — usein helpompaa kuin satojen soittolistarivien muokkaaminen.
  • Karsi tiedostoa. Poista tarpeettomat <channel>- ja <programme>-elementit. Pienempi tiedosto latautuu paljon nopeammin rajoitetuilla laitteilla.
  • Korjaa poikkeama, jos kaikki ajat ovat tasaisesti väärässä.

Kaksi sääntöä: tallenna UTF-8-muodossa ja pidä tiedosto hyvin muodostettuna — yksi escapetoimaton & voi viedä koko oppaan.

UKK

Miltä EPG-tiedosto näyttää?

Pelkkää XML:ää, jossa on kahdenlaisia elementtejä: <channel> ilmoittaa jokaisen lähteen ja <programme> antaa jokaisen aikataulutetun kohteen alkuajan, päättymisajan ja nimen.

Missä muodossa XMLTV on?

XML-muodossa, yleensä muodossa .xml tai gzip-pakattuna muodossa .xml.gz. Aikaleimat ovat muodossa YYYYMMDDHHMMSS, jota seuraa UTC-poikkeama.

Miksi opas latautuu mutta ei näytä mitään?

Lähes aina siksi, etteivät soittolistasi tvg-id-arvot vastaa oppaan <channel id>-arvoja. Tiedosto latautui normaalisti, mutta sille ei ollut mitään yhdistettävää.

Miten tarkistan, kattaako opas lähteeni?

Lataa tiedosto, pura pakkaus tarvittaessa ja hae yhtä tvg-id-merkkijonoistasi. Jos sitä ei löydy tiedostosta, opas ei kuvaa listaasi.

Miksi opastiedostoni on niin suuri?

Kansallinen opas, jossa on kahden viikon aikataulut sadoille lähteille, on luonnostaan kymmeniä tai satoja megatavuja. Se on odotettua ja siksi ensimmäinen lataus on hidas.

Voinko muokata XMLTV-tiedostoa?

Kyllä, millä tahansa tekstieditorilla. Tallenna tiedosto UTF-8-muodossa ja pidä XML hyvin muodostettuna — yksi escapetoimaton & voi rikkoa koko jäsennyksen.

Yhteenveto

  • XMLTV sisältää täsmälleen kaksi asiaa: <channel>-määritykset ja <programme>-merkinnät.
  • Aikaleimat ovat muodossa YYYYMMDDHHMMSS + UTC-poikkeama — väärä poikkeama tarkoittaa, että data on oikein mutta ajat väärin.
  • Opas yhdistyy soittolistaasi täsmälleen ehdolla tvg-id = channel id. Yhteensopimattomuus on tyhjän oppaan yleisin syy.
  • Tarkista ennen kuin syytät: pura pakkaus, etsi tunnistettasi grepillä ja tarkista päivämääräalue.
  • Yksi escapetoimaton & voi tehdä koko opastiedostosta virheellisen.

Onko sinulla soittolista ja opas-URL? Lataa Tuneline — lisää molemmat, niin ohjelmaopas täyttyy. Ilmainen ja ilman mainoksia.

— Shamir

Jaa artikkeli

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.

Lue tämä artikkeli toisella kielellä

Tuneline on mediasoitinsovellus. Se ei tarjoa, isännöi eikä jaa mitään sisältöä. Tuot oman soittolistasi itse, aivan kuten VLC:ssä.