Teletext wirklich verstehen

Ein Artikel mehr zum Durchlesen als zum Nachschlagen und mit Anspruch auf Verständlichkeit, aber nicht unbedingt auf Vollständigkeit (dazu gibt’s ja die Specs…)

Dieser Artikel erschien erstmals im Jahr 2011 auf meiner damaligen Homepage und ich habe ihn mit nur einigen wenigen Erweiterungen und Anpassungen auf meine heutige Seite übernommen – über eventuell nicht ganz perfekte oder nicht mehr ganz dem heutigen Schreibstil entsprechende Formulierungen beschwert euch bitte bei meinem damaligen Ich… ;-)

Um Teletext zu verstehen, macht man sich am besten erstmal klar, dass die „Einheit“ um die sich bei Teletext alles dreht, das sogenannte „Paket“ (meist mit engl. Packet bezeichnet) ist.

Ein Teletext-Packet wird immer auf einer Videozeile übertragen.

Teletext ist zunächst einmal nur für analoges SD-Video definiert, kann aber durch Digitalisierung der entsprechenden Videozeilen auch in SD-SDI übertragen werden. Für HD-SDI ist Teletext nicht definiert oder besser gesagt: nicht standardisiert, auch einfaches Digitalisieren der Datenzeilen ist nicht möglich – es existiert aber ein „Quasi-Standard“, OP47, um Teletext-Pakete in VANC-Pakete zu paketieren und dann über ein HD-SDI-Signal zu übertragen. (Update: Das war Stand 2011 – mittlerweile existiert mit SMPTE 2031 tatsächlich ein SMPTE-Standard für das Einbetten von Teletext-Daten in HD-SDI, aber das tut für die folgenden Ausführungen absolut nichts zur Sache).

Ein normales Teletext-Packet enthält die Daten für eine Text-Zeile im Teletext (max. 40 sichtbare Zeichen, plus einige Adressinformationen). Im folgenden Teletext-Zeile genannt.

Wenn ich im folgenden Paket oder Packet schreibe, meine ich ein solches Teletext-Packet. Wenn ich nur Zeile schreibe, meine ich eine Teletext-Zeile. Wenn ich eine Videozeile meine, schreibe ich explizit Videozeile.

Die einzelnen Packets haben zueinander erstmal keinen Bezug und können in beliebiger Reihenfolge auftauchen und auch nicht nur in der vertikalen Austastlücke, sondern generell überall im Videosignal. Es gibt durchaus auch Anwendungen, bei denen das komplette Videosignal ausschließlich zur Übertragung von Teletext-Paketen genutzt wird (in der Norm wird das „Full Channel“ Teletext genannt).

Jedes Packet beginnt mit einem Adressfeld, das aussagt, zu welcher Teletext-Zeile und zu welchem Magazin es gehört.

Achtung, hier merkt man schon: hier taucht noch nichts vom Begriff „Seite“ oder „Tafel“ auf… denn grundsätzlich ist der Teletext zwar in Magazinen und Seiten organisiert; an einer einzelnen Zeile aber kann man nur sehen, in welche Textzeile am Bildschirm sie gehört, und zu welchem Magazin.

Die Magazin-Adresse hat 3 Bit, geht also theoretisch von 0-7. Da man 1975 den Menschen nicht zumuten wollte, von 0 mit dem Zählen zu beginnen, hat man definiert, dass Magazin 0 = 8 ist. Es gibt also keine Seite 000 – das ist nämlich Seite 800. Technisch gesehen ist „Seite 800“ also die mit der niedrigsten Adresse. Da das wiederum schwer vermittelbar ist, beginnen die meisten Teletextangebote aber mit Seite 100. (Das ist übrigens keineswegs zwingend so, der Betreiber kann definieren was die Startseite ist (dazu später mehr).)

Die Zeilen-Adresse hat 5 Bit, geht also theoretisch von 0-31. Für die Anzeige am Bildschirm gibt es aber nur 24 Zeilen (0 = Kopfzeile mit Uhr etc, bis 23 = Letzte Textzeile. Mit FLOF- und TOP-Text gibt es noch eine 25. Zeile (die Zeile 24), in der die Belegung der Farbtasten angezeigt wird).

Ein Standard wäre aber kein Standard, wenn es nicht die berühmten „Reserved for Future Use“-Stellen gäbe, und so werden heutzutage auch munter Teletext-Pakete mit Zeilennummern größer als 24 gesendet. In diesen Paketen werden dann zum Beispiel so Sachen wie PDC (exaktes Äquivalent zur VPS-Zeile, nur eben in ein Teletext-Paket – mit Adresse „Magazin 8, Zeile 30“ – verpackt, statt als rohe Bits in Video-Zeile 16 gesendet) übertragen.

Weiteres Beispiel sind Steuerinfos, z.B. wo sich Untertitel befinden, was die Startseite ist, Name des Senders und der aktuellen Sendung etc.

Wo aber ist denn jetzt die Zuordnung zu den Seiten? Bisher haben wir nur Magazin und Zeile. Das hieße ja, wir könnten nur eine Zahl (Magazin) auswählen und sähen dann eine endlose (bzw. sich natürlich wiederholende) Anzahl Zeilen am Bildschirm durchscrollen, inklusive welcher mit Steuerdaten…. wäre ja weniger schön.

Damit das nicht so ist, gibt es spezielle Teletext-Pakete, die sich „Page Headers“ nennen.

Die kennt jeder: Das ist das, was immer oben in der ersten (nein, Nullten…) Zeile steht!

Page Header sind erstmal nur dadurch gekennzeichnet, dass die Zeilen-Adresse „00“ lautet – vom Dekoder also ganz einfach zu erkennen. Außerdem haben sie in den ersten Nutzbytes (wo sonst die Textzeichen stehen) ein paar Steuerinfos, die sogenannten „Control Bits“. Page-Header-Pakete können jederzeit eingeschoben werden.

Wann immer ein Page Header-Paket auftaucht, werden seine Nutzdaten (die beginnen wegen der Control Bits erst ein paar Spalten weiter rechts) in der obersten Zeile angezeigt.

Das ist der Grund dafür, dass die Teletext-Uhr sich regelmäßig aktualisiert und manche Sender da oben sogar irgendwelche Lauftexte einblenden.

Noch vor den Control Bits aber steht – voila – die Seitennummer :-)

Die hat einen Adressbereich von 00 – FF (8 Bit).

Sie wird bei den meisten Dekodern nur dann in „Echtzeit“ angezeigt, wenn gerade auf eine Seite gewartet wird, ansonsten wird die der aktuellen Seite stillstehend angezeigt. (Sonst hätte man dauernd oben das Geflacker der durchlaufenden Seitennummern).

So, eine Teletext-Seite ist nun so definiert, dass alle übertragenen Teletext-Zeilen mit einer bestimmten Magazinadresse einfach zu der Seitennummer gehören, die im mit dieser Magazinadresse zuletzt übertragenen Page-Header-Paket stand. (Den letzten Satz ggf. mehrmals lesen… ;-)

Hier stellt sich gleich die nächste Frage: Warum gibt es eigentlich nur Seiten von 00 bis 99, wenn doch Adressen bis FF zur Verfügung stehen? Ganz einfach, weil es auf den Fernbedienungen keine A-F Tasten gibt…

Sonst wäre es durchaus möglich, auch die anderen Seiten (A0 bis FF) zu adressieren. Und, man ahnt es schon, die werden natürlich auch verwendet…

Auf solchen „versteckten“ Seiten, z.B. 1DF und 1F0 werden die Themenübersichten für die TOP-Text-Farbtasten unten übertragen. Auf weiteren versteckten Seiten werden benutzerdefinierte Farbpaletten sowie Bitmaps für benutzerdefinierte Grafikzeichen übertragen, für die Verwendung in Level 2.5-Dekodern. (Das ZDF benutzt das zum Beispiel, um auf der Startseite sein Logo in höherer Auflösung und in Orange anzuzeigen, einer Farbe, die die Standard-Palette nicht bietet – sehen kann man das freilich nur auf neuen, Level 2.5-kompatiblen Dekodern).

Eines der oben erwähnten „Control Bits“ ist auch noch dafür zuständig, die oberste Zeile ganz auszublenden etc. (bei Untertitelseiten zum Beispiel, die ja größtenteils transparent sind und wo man dann oben auch nicht die Kopfzeile sehen will).

Die Originalspezifikationen sehen noch eine weitere Adresse für eine Seite vor: Nämlich das, was man heute „Subpage“ nennt, damals aber „Time Code“. Wertebereich ist denn auch 0000 bis 2359 (was das wohl bedeuten könnte….). Idee der BBC war ursprünglich, eine Seite mit einer großen stilisierten Glocke zu übertragen, die jede Minute neu übertragen wurde, jedesmal aber mit einer anderen „Time Code“ Adresse. Die sollte der aktuellen Zeit entsprechen (daher Wertebereich 0000-2359). Man konnte dann an seinem Fernseher diese Seite aufrufen und z.B. Subpage „2015“ vorwählen, um an den Beginn eines Films oder so erinnert zu werden. Wenn man den Fernseher dann in den „Aktuell“-Modus gestellt hat, sah man erst das Videobild, bis um 20:15 die Glockenseite mit Time Code-Adresse „2015“ übertragen wurde. Der Fernseher schaltete dann auf Videotext und man sah die große Glocke und das Wort „ALARM“ (oder was auch immer auf dieser Seite angezeigt wurde), und wurde somit ans Umschalten zum Spielfilm erinnert.

Heute wird das völlig anders verwendet, man nennt es Unterseiten / Subpages, es gibt in der Praxis nur Unterseiten von 0001 bis 0003 oder so, selten auch bis 0010 oder mehr, für „längere“ Seiten wie Pegelstände, Börse etc. Kennt man ja.

Übrigens – man ahnt es – den Stellen wurden verschieden viele Bits zugeordnet, um einen Wertebereich von 0000 bis 2359 zu ermöglichen (nämlich 2 Bit, 4 Bit, 3 Bit, 4 Bit). Es gibt also auch hier „versteckte“ Subpage-Adressen, insgesamt geht’s theoretisch bis 3F7F. Auch diese werden wiederum für Sonderfunktionen in neueren Diensten benutzt. Ein verbreiteter Irrtum ist, es gebe Subpages von 0000 bis 9999, das ist definiv nicht so. Die Vorwahl am Fernseher geht meist nur bis 3979, da wiederum Tasten A-F fehlen; viele Fernseher erlauben auch nur 2359 wie’s ursprünglich gedacht war. Umgekehrt bedeutet dies auch unintuitiverweise, dass es zwar Unterseiten 0000 bis 0079 geben kann, aber niemals 0080-0099, eine Unterseite 0100 bis 0179 dann aber wieder möglich wäre usw. – das hat schon zu viel Verwirrung auch auf Seiten der „Absender“ geführt, wenn automatisiert eine große Zahl an Unterseiten (z.B. Verkehrsmeldungen) erstellt wurde und das Sendesystem dann aber die Seiten 80-99 nicht ausspielen konnte, wohl aber Seiten 100 bis 105 usw.

Es gibt noch unzählige weitere Erweiterungen – man merke sich einfach nur: Eine Teletext-Zeile (Paket) steht eigentlich für sich und wird in einer Videozeile übertragen. Man kann wild durcheinander Header und Textzeilen übertragen, man könnte sogar zuerst alle ersten Zeilen, dann alle zweiten Zeilen etc. übertragen, sodass sich eine Seite dann ganz langsam, Zeile für Zeile aufbauen würde, aber dafür sofort begonnen würde. (Statt einen Zyklus abzuwarten und dann alle Zeilen nacheinander zu senden, die zu dieser Seite gehören, wie es heute Standard ist). Man hat wohl festgestellt, dass das noch unbefriedigender für den Benutzer ist.

Was in den einzelnen Zeichen dann steht, ist nochmal ne Wissenschaft für sich (siehe unten zu den Zeichensätzen), andererseits aber auch eigentlich einfach: Im Großen und Ganzen sind es eigentlich nur ASCII-Zeichen, aber es gibt Steuerzeichen, die z.B. ab dem nächsten Zeichen die Farbe auf Rot (oder sonstwas) ändern, die Hintergrundfarbe auf die zuletzt gewählte Vordergrundfarbe ändern (ja, solche Klimmzüge muss man machen), den Text „verstecken“, den Zeichensatz auf „Blockgrafik“ umstellen und, und, und. Ist übrigens auch die Erklärung, warum im Teletext z.B. niemals ein grüner Buchstabe direkt auf einen roten folgen kann. Dazwischen muss immer ein Leerzeichen sein, bei dem es sich in Wirklichkeit natürlich um das Steuerzeichen mit der neuen Farbe handelt.

Und dann gibt es eben noch die verschiedenen Zeichensätze G0, G1 usw., zwischen denen gewechselt werden kann – in der ursprünglichen Spezifikation war das einfach „Alpha“ (Text) und „Graphics“ (Blockgrafik); welche (Sonder-)Zeichen im Alpha-Modus verfügbar wurden, hing davon ab, für welches Land der Decoder ausgelegt war. Unterschiedliche Decoder hatten unterschiedliche „Nationale Zeichensätze“ in ihrem Character-ROM. Im deutschen Zeichensatz waren z.B. an den Stellen, wo in der englischen Version die eckigen Klammern [ und ] vorhanden waren, die Umlaute Ä und Ü (kennt man vielleicht noch von Nadeldruckern, bei denen man per DIP-Switch genau diese nationalen ASCII-Optionen umschalten konnte). Irgendwann wurde dann noch spezifiziert, dass via Control Bits angegeben werden konnte, welcher Zeichensatz für eine Seite genutzt werden sollte und die Decoder hatten mehrere „Codepages“, zwischen denen sie wechseln konnten; es gab auch die Möglichkeit, innerhalb einer Seite mittels eines „Twist“-Steuerzeichens (Escape) zwischen zwei Zeichensätzen zu wechseln. Als das auch nicht mehr reichte, wurden irgendwann die „Level 1.5“-Erweiterungen ersonnen, die es ermöglichten, auch auf einer deutschen Teletextseite z.B. das französische „é“ zu verwenden (im Wort „Café“ zum Beispiel). Wie das funktioniert, ist absolut wild: Es wird ein Paket (Zeile) mit der für alte Dekoder „versteckten“ Zeilennummer 26 (also außerhalb des Bildschirmbereichs) übertragen, das sogenannte „Packet X/26“ (es können übrigens auch mehrere davon auf einer Seite existieren, die haben dann alle die Row Address 26). In diesen Paketen sind dann Steuerbefehle, sogenannte „Triplets“ enthalten, die in relativ komplexer Manier eine „Cursorposition“ steuern und dann angeben, welches Zeichen mit welchem Akzentzeichen an dieser Position gezeichnet werden soll. Wird dies von einem Dekoder nicht unterstützt, so bleibt der dort im „normalen“ Seitenbereich übertragene Character als „Fallback Character“ einfach stehen – bei einem „é“ sollte das z.B. das normale „e“ sein. Und tatsächlich: Unterstützung dafür ist selbst heute noch in einigen Dekodern und auch Sendesystemen nicht oder nur rudimentär vorhanden, insbesondere bei Besonderheiten wie Teletext-Untertiteln unterstützt oft nicht die gesamte „Kette“ vom Untertitelungs-Programm bis zum Sendesystem im Sender dieses Verfahren, sodass gerade die klassischen Videotext-Untertitel bei einigen Sendern bis heute auf bestimmte Zeichen verzichten müssen (aus dem „Café“ wird dann ein „Cafe“, ein @ wird zum * und der lange Gedankenstrich im besten Falle zum Fallback-Character „Bindestrich“, im schlechtesten Falle zu einem Fragezeichen…). Und oft hängen an dieser Kette dann auch die HbbTV- und DVB-Untertitel, sodass auch dort dann solche Zeichen nicht „gehen“. Nur, falls sich jemand mal gefragt haben sollte, warum deutsche Umlaute ä, ö, ü usw. gehen, aber ein é selten gesehen wird. Der Grund ist, dass erstere eben schon in der allerersten Version als Teil der „nationalen Zeichensätze“ spezifiziert waren, die anderen aber erst mit den „Level 1.5“-Erweiterungen dazu kamen.

A propos Signalkette: klassischerweise wurde der Teletext in einem analogen Videosignal übertragen, doch in den Sendern sind diese selbst an dieser Stelle nach und nach verschwunden. Der Teletext kann aber auch in digitalem HD-Video – sogenannten HD-SDI-Signalen – mittels des OP47-Verfahrens (Update: oder des SMPTE 2031-Verfahrens) übertragen werden. Über DVB-Streams (in denen es ja keine „Austastlücke“ mehr gibt, da im MPEG-Video nur das sichtbare Bild codiert wird) werden die Inhalte der Austastlücke wieder in Roh-Bits verwandelt und in einer oder mehreren separaten PIDs übertragen (nach ETSI EN 300 472 sowie ETSI EN 301 775).

Liebe Leser*innen, ich danke euch, dass ihr bis hierher gekommen seid und denke, das soll’s auch erstmal gewesen sein…

Fabian Schneider