EPG Datenformat
Aus open7x0.org
Einleitung
Die EPG Daten der einzelnen Sender werden auf der Box im Flash-RAM im Verzeichnis /data/SI gespeichert. Mit neuerer Lemmi Firmware können diese, um Fragmentierungen des nach /data gemounteten Filesystems jffs2 zu vermeiden, in die RAM-Disk oder auf ein externes Speichermedium ausgelagert werden. Diese Funktion kann durch die EPG Einstellungen in der Datei /var/etc/lemmi-settings.txt aktiviert werden. Die Daten werden in mehreren Dateien gespeichert, deren Format hier beschrieben wird.
Inhaltsverzeichnis |
Übersicht
Im Verzeichnis /data/SI befinden sich folgende Dateien:
- Für jeden Sender die folgenden drei Dateien:
- eit_NNNNTTTTSSSS
- In dieser Datei sind kurz Informationen zu den Sendungen des Senders gespeichert.
- eit_NNNNTTTTSSSS_idx
- Diese Datei indiziert die Einträge der Datei eit_NNNNTTTTSSSS_long
- eit_NNNNTTTTSSSS_long
- Hier werden weitergehende Informationen zu den einzelnen Sendungen des Senders gespeichert.
- eit_NNNNTTTTSSSS
- Bei NNNNTTTTSSSS handelt es um einen Hexadezimal-Wert der sich wie folgt zusammensetzt:
-
- NNNN </dt>
-
- Orginal Network ID: Hiermit wird das Netzwerk identifiziert (z.B. bei verschiedenen Empfangswegen erforderlich, um diese von einander zu Unterscheiden). </dd>
- TTTT </dt>
-
- Transport Stream ID: Hierdurch wird das Transport Stream ID identifiziert. Im allgemeinen besteht ein Netzwerk aus mehreren Kanälen, Bouquets bzw. Transpondern, die hier durch unterschieden werden. </dd>
- SSSS </dt>
-
- Service ID: Hierdurch wird der Service bzw. der Sender identifiziert. Im allgemeinen werden über einen Transport Stream mehrere Sender bzw. Service-Daten (etwa Internet über Satellit) übertragen, die hier durch unterschieden werden. </dd>
- temp_long
- Bei einem EPG Update werden hier die (neuen) Daten der entsprechenden eit_NNNNTTTTSSSS_long Datei zwischengespeichert.
- versions2
- Diese Datei enthält Versions Information der EPG Daten.
Dateiformate
Da die Box im Big-Endian-Mode arbeitet, sind alle Daten im Big-Endian-Mode gespeichert. Bei der Verwendung der hier dargestellten C-Strukturen, ist entsprechend darauf zu achten.
eit_NNNNTTTTSSSS
Diese Datei enthält für jede Sendung einen Eintrag der sich durch folgende C-Struktur beschreiben läßt:
struct eitFile {
time_t startTime; // Anfangszeit der Sendung (Unixtimestamp)
char unknown[8]; // Unbekannt (immer 0)
char title[200]; // Titel der Sendung
char subTitle[132]; // Untertitel bzw. Episodenname bei Serien
// Wird sehr häufig von den Sender mit Unsinn gefüllt
};
eit_NNNNTTTTSSSS_idx
Diese Datei enthält für jeden Eintrag der entsprechenden eit_NNNNTTTTSSSS_long Datei einen Eintrag der sich als die folgende C-Struktur darstellen läßt. Sie indiziert alle Einträge der Datei.
struct eitIdxFile {
time_t startTime; // Anfangszeit der Sendung (Unixtimestamp)
uint32_t offset; // Offset des Eintrags in eit_NNNNTTTTSSSS_long
};
eit_NNNNTTTTSSSS_long
Die Datei enthält für jede Sendung einen Eintrag variabler Länge. Die Anfangszeit der Sendung kann in Verbindung mit der Datei eit_NNNNTTTTSSSS_idx rekonstruiert werden. Da die Einträge variable Länge haben, ist vor jedem Feld eines Eintrag eine Länge angegeben. Auf die 16-bittige Längenangabe folgen jeweils die angegebene Anzahl an Bytes. Ein Eintrag kann wie folgt als C-Struktur darstellt werden.
struct eitLongFile {
uint16_t titleLength; // Länge des Titels der Sendung
// (inkl. abschließendem 0x00)
char* title; // Titel der Sendung
uint16_t subTitleLength; // Länge des Untertitels
// (inkl. abschließendem 0x00)
char* subTitle; // Untertitel bzw. Episodenname bei Serien
// Wird sehr häufig von den Sender mit Unsinn gefüllt.
uint16_t descriptionLength; // Länge der Beschreibung
// (inkl. abschließendem 0x00)
char* description; // Beschreibung zur Sendung
};
versions2
Diese Datei enthält für jeden Sender einen Eintrag mit Versions-Informationen. Die Zuordnung zu der Sender erfolgt wieder über die bereits erwähnten IDs. Ein Eintrag läßt sich als die folgende C-Struktur darstellen.
struct eitVersionsFile {
uint16_t networkID; // Orginal Network ID
uint16_t streamID; // Transport Stream ID
uint16_t serviceID; // Service ID
uint16_t unknown1; // Unbekannt (immer 0)
int8_t tableVersions[18]; // Versionen der PSI-Tabellen 0x4e-0x5f
uint16_t unknown2; // Unbekannt (immer 0)
time_t lastStartTime; // Startzeit der letzen Sendung (Unixtimestamp)
// in den gespeicherten EPG Daten
// des Senders.
time_t nextTime; // Verwendung unbekannt (immer 0) (Unixtimestamp)
// print_si zeigt es aber als Zeit an
};
Das Feld tableVersions enthält die Versionen der PSI-Tabellen der EPG-Daten. Für jede der Tabellen 0x4e - 0x5f ist ein Versions-Byte vorhanden. Ist keine Version bekannt, ist es auf 0xff gesetzt. Die EPG-Daten werden geteilt, als PSI (Program Specific Information) in Tabellen, übertragen. Diese Tabellen enthalten eine Version für jeden Sender. Sie ist 5 Bit lang, springt von 31 auf 0 und wird bei Änderungen der enthaltenen Daten um 1 erhöht. Die EPG-Daten sind auf die Tabellen wie folgt aufgeteilt:
- Tabelle 4e (Hex)
- für die laufende und die folgende Sendung auf dem aktuellen Transport Stream.
- Tabelle 4f (Hex)
- für die laufende und die folgende Sendung auf einem anderen Transport Stream.
- Tabellen 50-5f (Hex)
- für die eigentlichen Sendungsdaten. Jede Tabelle enthält die Daten von 4 Tage. Begonnen wird mit letztem Mitternacht UTC mit Tabelle 50 (Hex).
Nähere Informationen zur Übertragung der EPG-Daten kann man in den ETSI-Standards EN 300 468 und TR 101 211 nachlesen. Diese können dort kostenlos heruntergeladen werden.
Links
- ETSI
- Für weitere Informationen zur Übertragung von EPG-Daten können dort die Standards EN 300 468 und TR 101 211 kostenlos heruntergeladen werden.
Links zum Thema »Firmware«
- Allgemeine Infos:
- Hintergrundwissen:

