EPG Datenformat

Aus open7x0.org

Wechseln zu: Navigation, Suche


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.
    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>
    Durch diese drei IDs ist eine eindeutige Zuordnung der Sender zu den Dateien möglich. Die IDs werden auch in der Sendertabelle /var/etc/services.txt' gespeichert.
  • 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« 

Persönliche Werkzeuge