Education·8 min

Από Shamir

Πώς μοιάζει στην πραγματικότητα ένα αρχείο XMLTV EPG (με παραδείγματα)

Ο γρηγορότερος τρόπος να σταματήσετε να μπερδεύεστε με τους οδηγούς προγράμματος είναι να ανοίξετε έναν και να τον διαβάσετε. Το XMLTV είναι απλή XML — αναλυτική, αλλά όχι περίπλοκη — και δέκα λεπτά με ένα πραγματικό παράδειγμα θα σας γλιτώσουν ώρες εικασιών για το γιατί ο οδηγός σας είναι κενός.

Αυτή η ανάρτηση παρουσιάζει ένα πραγματικό αρχείο, το αποκωδικοποιεί ετικέτα προς ετικέτα και στη συνέχεια αξιοποιεί αυτή την κατανόηση για να εξηγήσει την πιο συνηθισμένη αστοχία οδηγού.

Η ειλικρινής εικόνα: Tuneline είναι ένα πρόγραμμα αναπαραγωγής πολυμέσων για περιεχόμενο που παρέχετε εσείς. Εμφανίζει έναν οδηγό από μια πηγή προγράμματος που εσείς παρέχετε. Δεν περιλαμβάνει ούτε οδηγό ούτε περιεχόμενο.

Η δομή με μία πρόταση

Ένα αρχείο XMLTV περιέχει ακριβώς δύο είδη στοιχείων: στοιχεία <channel> που δηλώνουν τι υπάρχει και στοιχεία <programme> που αναφέρουν τι προβάλλεται και πότε.

Αυτό είναι όλο. Όλα τα υπόλοιπα είναι λεπτομέρειες.

Ένα ελάχιστο, πλήρες παράδειγμα

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

Αυτό είναι ένας έγκυρος, πλήρης οδηγός που περιγράφει μία πηγή και μία ώρα προγράμματος. Ένα πραγματικό αρχείο αποτελείται από τις ίδιες δύο μορφές, επαναλαμβανόμενες χιλιάδες φορές.

Αποκωδικοποίηση ετικέτα προς ετικέτα

ΣτοιχείοΤι κάνει
<tv>Η ρίζα. Όλα βρίσκονται μέσα σε αυτήν.
<channel id="…">Δηλώνει μια πηγή. Το id είναι το σημαντικότερο μέρος — είναι το κλειδί σύνδεσης.
<display-name>Το αναγνώσιμο από τον άνθρωπο όνομα που εμφανίζεται στον οδηγό.
<icon src="…">URL λογότυπου.
<programme start stop channel>Ένα προγραμματισμένο στοιχείο. Το channel πρέπει να αντιστοιχεί σε ένα <channel id>.
<title>Όνομα προγράμματος.
<desc>Σύνοψη.
<category>Είδος. Σε αυτό βασίζονται οι γονικοί έλεγχοι και τα φίλτρα.

Η μορφή της χρονικής σήμανσης μπερδεύει τους πάντες

start="20260806180000 +0000"

Διαβάζεται ως YYYYMMDDHHMMSS ακολουθούμενο από μια μετατόπιση UTC. Επομένως πρόκειται για τις 6 Αυγούστου 2026, στις 18:00:00 UTC.

Η μετατόπιση είναι το σημαντικό σημείο. Αν το αρχείο την παραλείπει ή δηλώνει μια τιμή που δεν αντιστοιχεί στην πραγματικότητα, ο οδηγός σας φορτώνεται κανονικά αλλά εμφανίζει τα πάντα σε λάθος ώρα. Αυτό είναι εντελώς διαφορετικό πρόβλημα από έναν κενό οδηγό και διορθώνεται στις ρυθμίσεις ζώνης ώρας, όχι με αλλαγή πηγών. (Διόρθωση λανθασμένων ωρών.)

Η σύνδεση: Γιατί ο οδηγός σας είναι κενός παρόλο που το αρχείο φορτώθηκε

Αυτό αξίζει να το κατανοήσετε, γιατί εξηγεί τα περισσότερα παράπονα για τους οδηγούς.

Η λίστα αναπαραγωγής και ο οδηγός σας είναι δύο ξεχωριστά αρχεία που πρέπει να αντιστοιχιστούν. Η αντιστοίχιση γίνεται μέσω ενός αναγνωριστικού.

Στο M3U:

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

Στο XMLTV:

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

Το tvg-id πρέπει να είναι ίδιο με το channel id. Ακριβώς — συμπεριλαμβανομένων των πεζών-κεφαλαίων και της στίξης.

Όταν ταιριάζουν, η καταχώριση εμφανίζει το πρόγραμμά της. Όταν δεν ταιριάζουν, εμφανίζεται μια καταχώριση με κενό οδηγό και το αρχείο δεν έφταιγε ποτέ. (Η πλευρά M3U αυτού του ζητήματος.)

Γι’ αυτό το «πρόσθεσα οδηγό και δεν έγινε τίποτα» συνήθως δεν οφείλεται ούτε στη λίστα αναπαραγωγής ούτε στον οδηγό. Απλώς κανείς δεν φρόντισε να συμφωνούν στα αναγνωριστικά. Ένας οδηγός που καλύπτει διαφορετική περιοχή από τη λίστα αναπαραγωγής σας θα φορτώσει χιλιάδες προγράμματα, κανένα από τα οποία δεν θα αντιστοιχεί στις καταχωρίσεις σας.

Προσθήκη πηγής οδηγού

Πώς να ελέγξετε μια πηγή οδηγού πριν την εμπιστευτείτε

Πριν κατηγορήσετε το πρόγραμμα αναπαραγωγής σας, κοιτάξτε το αρχείο.

1. Είναι συμπιεσμένο; Πολλές πηγές παρέχονται ως .xml.gz. Αυτό είναι φυσιολογικό — τα περισσότερα προγράμματα αναπαραγωγής τα διαχειρίζονται. Αν το ελέγχετε χειροκίνητα, αποσυμπιέστε το πρώτα.

2. Περιέχει πράγματι τις πηγές σας; Αναζητήστε στο αρχείο μία από τις τιμές tvg-id. Αν δεν υπάρχει, ο συγκεκριμένος οδηγός δεν καλύπτει τη λίστα σας και καμία ρύθμιση δεν θα το αλλάξει αυτό.

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"

Το πρώτο σάς δείχνει πόσες πηγές δηλώνει. Το δεύτερο σάς δείχνει αν περιλαμβάνεται και η δική σας.

3. Καλύπτει ένα χρήσιμο χρονικό διάστημα; Ελέγξτε τις παλαιότερες και τις νεότερες τιμές start. Ορισμένοι δωρεάν οδηγοί περιλαμβάνουν μόνο 24 ώρες, ενώ άλλοι δύο εβδομάδες. Ένας οδηγός που έληξε χθες μοιάζει ακριβώς με έναν κατεστραμμένο.

4. Πόσο μεγάλο είναι; Οι πλήρεις εθνικοί οδηγοί φτάνουν σε δεκάδες ή εκατοντάδες megabyte χωρίς συμπίεση. Αυτό είναι φυσιολογικό και γι’ αυτό η πρώτη φόρτωση μπορεί να διαρκέσει λεπτά σε ένα TV box. (Δωρεάν πηγές XMLTV.)

Συνηθισμένες αλλοιώσεις

Τα αρχεία οδηγών της πραγματικής ζωής παρουσιάζουν προβλήματα με προβλέψιμους τρόπους:

  • Μια σελίδα σφάλματος HTML αποθηκευμένη ως .xml. Ανοίξτε την. Αν η πρώτη γραμμή είναι <!DOCTYPE html>, η λήψη απέτυχε και αποθηκεύτηκε το σφάλμα.
  • Μη διαφυγμένα εμπορικά «και». Ένα σκέτο & αντί για &amp; σε έναν τίτλο καθιστά την XML μη έγκυρη και μπορεί να διακόψει ολόκληρη την ανάλυση. Ένας προβληματικός τίτλος αρκεί για να μην εμφανιστεί καθόλου ο οδηγός.
  • Διπλότυπες καταχωρίσεις <channel id>. Δύο δηλώσεις του ίδιου ID· η συμπεριφορά εξαρτάται από το πρόγραμμα αναπαραγωγής.
  • Προγράμματα χωρίς αντίστοιχο κανάλι. Καταχωρίσεις προγράμματος των οποίων το χαρακτηριστικό channel δεν ταιριάζει με κανένα δηλωμένο <channel id>. Απορρίπτονται αθόρυβα.
  • Χρονικές σημάνσεις stop που λείπουν. Ορισμένα εργαλεία συλλογής τις παραλείπουν και περιμένουν η έναρξη του επόμενου προγράμματος να υποδηλώνει τη λήξη. Ορισμένα προγράμματα αναπαραγωγής δεν το συμπεραίνουν, με αποτέλεσμα να δημιουργούνται κενά.

Μπορώ να γράψω ή να επεξεργαστώ ένα μόνος μου;

Ναι. Είναι XML, επομένως λειτουργεί οποιοσδήποτε επεξεργαστής κειμένου και, για μια μικρή επιμελημένη εγκατάσταση, είναι απολύτως πρακτικό.

Χρήσιμες αλλαγές:

  • Αλλάξτε ένα <channel id> ώστε να ταιριάζει με το tvg-id που χρησιμοποιεί ήδη η λίστα αναπαραγωγής σας — συχνά είναι ευκολότερο από την επεξεργασία εκατοντάδων γραμμών της λίστας.
  • Περιορίστε το. Διαγράψτε τα στοιχεία <channel> και <programme> που δεν χρειάζεστε. Ένα μικρότερο αρχείο φορτώνεται πολύ πιο γρήγορα σε συσκευές με περιορισμένους πόρους.
  • Διορθώστε τη μετατόπιση αν όλες οι ώρες είναι ομοιόμορφα λανθασμένες.

Δύο κανόνες: αποθηκεύστε το ως UTF-8 και διατηρήστε το σωστά μορφοποιημένο — ένα μη διαφυγμένο & μπορεί να σας στερήσει ολόκληρο τον οδηγό.

Συχνές ερωτήσεις

Πώς μοιάζει ένα αρχείο EPG;

Απλή XML με δύο είδη στοιχείων: <channel> που δηλώνουν κάθε πηγή και <programme> που παρέχουν ώρα έναρξης, ώρα λήξης και τίτλο για κάθε προγραμματισμένο στοιχείο.

Σε ποια μορφή είναι το XMLTV;

XML, συνήθως διαθέσιμη ως .xml ή ως συμπιεσμένη με gzip .xml.gz. Οι χρονικές σημάνσεις είναι YYYYMMDDHHMMSS συν μια μετατόπιση UTC.

Γιατί ο οδηγός μου φορτώνεται αλλά δεν εμφανίζει τίποτα;

Σχεδόν πάντα επειδή οι τιμές tvg-id της λίστας αναπαραγωγής σας δεν ταιριάζουν με τις τιμές <channel id> του οδηγού. Το αρχείο φορτώθηκε κανονικά· απλώς δεν υπήρχε κάτι με το οποίο να συνδεθεί.

Πώς ελέγχω αν ένας οδηγός καλύπτει τις πηγές μου;

Κατεβάστε τον, αποσυμπιέστε τον αν χρειάζεται και αναζητήστε μία από τις συμβολοσειρές tvg-id σας. Αν δεν υπάρχει στο αρχείο, ο συγκεκριμένος οδηγός δεν περιγράφει τη λίστα σας.

Γιατί το αρχείο οδηγού μου είναι τόσο μεγάλο;

Ένας εθνικός οδηγός με πρόγραμμα δύο εβδομάδων για εκατοντάδες πηγές έχει πράγματι μέγεθος δεκάδων ή εκατοντάδων megabyte. Αυτό είναι αναμενόμενο και γι’ αυτό η πρώτη φόρτωση είναι αργή.

Μπορώ να επεξεργαστώ ένα αρχείο XMLTV;

Ναι, με οποιονδήποτε επεξεργαστή κειμένου. Αποθηκεύστε το ως UTF-8 και διατηρήστε την XML σωστά μορφοποιημένη — ένα μόνο μη διαφυγμένο & μπορεί να διακόψει ολόκληρη την ανάλυση.

Συμπέρασμα

  • Το XMLTV περιέχει ακριβώς δύο πράγματα: δηλώσεις <channel> και καταχωρίσεις <programme>.
  • Οι χρονικές σημάνσεις είναι YYYYMMDDHHMMSS + μετατόπιση UTC — μια λανθασμένη μετατόπιση σημαίνει σωστά δεδομένα αλλά λάθος ώρες.
  • Ο οδηγός συνδέεται με τη λίστα αναπαραγωγής σας μέσω tvg-id = channel id, ακριβώς. Η αναντιστοιχία είναι η κυριότερη αιτία ενός κενού οδηγού.
  • Ελέγξτε πριν κατηγορήσετε: αποσυμπιέστε, αναζητήστε το ID σας και ελέγξτε το χρονικό διάστημα.
  • Ένα μη διαφυγμένο & μπορεί να καταστήσει μη έγκυρο ολόκληρο το αρχείο οδηγού.

Έχετε URL λίστας αναπαραγωγής και οδηγού; Κατεβάστε το Tuneline — προσθέστε και τα δύο και ο οδηγός θα συμπληρωθεί. Δωρεάν και χωρίς διαφημίσεις.

— Shamir

Κοινοποίηση άρθρου

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.

Διαβάστε αυτό το άρθρο σε άλλη γλώσσα

Το Tuneline είναι μια εφαρμογή αναπαραγωγής πολυμέσων. Δεν παρέχει, δεν φιλοξενεί και δεν διανέμει κανένα περιεχόμενο. Τη δική σας λίστα αναπαραγωγής τη φέρνετε εσείς, ακριβώς όπως με το VLC.