24.12.2012 Aufrufe

Design und Implementierung eines Mehrbenutzer- Szenarios ... - NMM

Design und Implementierung eines Mehrbenutzer- Szenarios ... - NMM

Design und Implementierung eines Mehrbenutzer- Szenarios ... - NMM

MEHR ANZEIGEN
WENIGER ANZEIGEN

Sie wollen auch ein ePaper? Erhöhen Sie die Reichweite Ihrer Titel.

YUMPU macht aus Druck-PDFs automatisch weboptimierte ePaper, die Google liebt.

U N I V E R S I T A S<br />

S I S<br />

S A R A V I E N<br />

<strong>Design</strong> <strong>und</strong> <strong>Implementierung</strong> <strong>eines</strong> <strong>Mehrbenutzer</strong>-<br />

<strong>Szenarios</strong> in einer verteilten TV-Umgebung<br />

Christoph Wellner<br />

Diplomarbeit<br />

nach einem Thema von Prof. Dr.-Ing. Philipp Slusallek<br />

Naturwissenschaftlich-Technische Fakultät I<br />

Fachrichtung 6.2 – Informatik<br />

Universität des Saarlandes, Saarbrücken, 2006


Hiermit erkläre ich an Eides statt, dass ich die vorliegende Arbeit selbständig<br />

verfasst <strong>und</strong> keine anderen als die angegebenen Quellen <strong>und</strong> Hilfsmittel<br />

verwendet habe.<br />

Saarbrücken, 24. Januar 2006.


Ich danke . . .<br />

. . . Prof. Slusallek für die Vergabe des Themas der Diplomarbeit.<br />

. . . Marco Lohse <strong>und</strong> Michael Repplinger für die ausgezeichnete<br />

Betreuung.<br />

. . . Der gesamten <strong>NMM</strong>-Gruppe.<br />

. . . Meinen Eltern Helga <strong>und</strong> Erich Wellner für das Ermöglichen<br />

dieses Studiums <strong>und</strong> die moralische Unterstützung.<br />

. . . Meinem Bruder Andreas <strong>und</strong> meinen Großeltern.


Inhaltsverzeichnis<br />

1 Einleitung 3<br />

1.1 Motivation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3<br />

1.2 Ziele . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5<br />

1.3 Gliederung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8<br />

2 Verwandte Projekte 9<br />

2.1 Fernseher <strong>und</strong> Settop-Boxen . . . . . . . . . . . . . . . . . . . . 10<br />

2.2 Kommerzielle Anwendungen <strong>und</strong> Systeme . . . . . . . . . . . . . 12<br />

2.2.1 Alleinstehende Programme . . . . . . . . . . . . . . . . . 12<br />

2.2.2 Home Entertainment Systeme . . . . . . . . . . . . . . . 13<br />

2.2.2.1 Windows Media Center Edition . . . . . . . . . 13<br />

2.2.2.2 SageTV2 . . . . . . . . . . . . . . . . . . . . . 15<br />

2.2.2.3 Fazit . . . . . . . . . . . . . . . . . . . . . . . 16<br />

2.3 Open Source Anwendungen . . . . . . . . . . . . . . . . . . . . 16<br />

2.3.1 Alleinstehende Programme . . . . . . . . . . . . . . . . . 16<br />

2.3.1.1 xawtv . . . . . . . . . . . . . . . . . . . . . . 17<br />

2.3.1.2 vcr - Kommandozeilen-Videorekorder . . . . . 17<br />

2.3.1.3 WebVCR+ . . . . . . . . . . . . . . . . . . . . 18<br />

2.3.1.4 Fazit . . . . . . . . . . . . . . . . . . . . . . . 18<br />

2.3.2 Home Entertainment Systeme . . . . . . . . . . . . . . . 19<br />

2.3.2.1 VDR . . . . . . . . . . . . . . . . . . . . . . . 19<br />

2.3.2.2 Freevo . . . . . . . . . . . . . . . . . . . . . . 21<br />

2.3.2.3 MythTV . . . . . . . . . . . . . . . . . . . . . 22<br />

2.3.2.4 Fazit . . . . . . . . . . . . . . . . . . . . . . . 22<br />

2.4 Forschungprojekte . . . . . . . . . . . . . . . . . . . . . . . . . 24<br />

2.4.1 TVAnytime-Forum . . . . . . . . . . . . . . . . . . . . . 24<br />

2.4.2 WWICE . . . . . . . . . . . . . . . . . . . . . . . . . . . 25<br />

2.5 Zusammenfassung . . . . . . . . . . . . . . . . . . . . . . . . . 25<br />

3 Netzwerk-Integrierte Multimedia Middleware 27<br />

3.1 Gr<strong>und</strong>lagen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28<br />

3.1.1 Knoten . . . . . . . . . . . . . . . . . . . . . . . . . . . 28<br />

3.1.2 Jacks . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28<br />

3.1.3 Nachrichtensystem . . . . . . . . . . . . . . . . . . . . . 29<br />

3.1.4 Verteilte Flussgraphen . . . . . . . . . . . . . . . . . . . 30<br />

3.2 Middleware-Dienste . . . . . . . . . . . . . . . . . . . . . . . . . 31<br />

3.2.1 Geräteverwaltung . . . . . . . . . . . . . . . . . . . . . . 31<br />

3.2.2 Session-Sharing . . . . . . . . . . . . . . . . . . . . . . 32<br />

i


INHALTSVERZEICHNIS<br />

ii<br />

3.3 Die Multimedia-Box . . . . . . . . . . . . . . . . . . . . . . . . 34<br />

3.3.1 Hardware . . . . . . . . . . . . . . . . . . . . . . . . . . 34<br />

3.3.2 Anwendungs-Framework . . . . . . . . . . . . . . . . . . 35<br />

3.4 Zusammenfassung . . . . . . . . . . . . . . . . . . . . . . . . . 38<br />

4 Realisierung einer elektronischen Programmzeitschrift 39<br />

4.1 Übersicht . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 39<br />

4.2 Quellen für EPG-Informationen . . . . . . . . . . . . . . . . . . 45<br />

4.2.1 Integration verfügbarer EPG-Quellen . . . . . . . . . . . 45<br />

4.2.2 Übertragung der Informationen . . . . . . . . . . . . . . 50<br />

4.2.3 XMLTV-Plugin . . . . . . . . . . . . . . . . . . . . . . . 53<br />

4.2.4 nxtvepg-Plugin . . . . . . . . . . . . . . . . . . . . . . . 61<br />

4.2.5 DVB-EPG-Plugin . . . . . . . . . . . . . . . . . . . . . . 62<br />

4.3 Verwaltung der EPG-Informationen . . . . . . . . . . . . . . . . 64<br />

4.3.1 Einfügen der Daten . . . . . . . . . . . . . . . . . . . . . 69<br />

4.3.2 Abfragen <strong>und</strong> Durchsuchen der Daten . . . . . . . . . . . 71<br />

4.4 Verteilung einer Anfrage im Netzwerk . . . . . . . . . . . . . . . 75<br />

4.4.1 Der EPG als eigenständige Anwendung . . . . . . . . . . 85<br />

4.5 Integration in die Multimedia-Box . . . . . . . . . . . . . . . . . 85<br />

4.5.1 Der TVGuide-Zustand . . . . . . . . . . . . . . . . . . . 85<br />

4.5.2 Der Search-Zustand . . . . . . . . . . . . . . . . . . . . 90<br />

4.5.3 EPG-Informationen im LiveTV-Zustand . . . . . . . . . . 95<br />

4.6 Zusammenfassung . . . . . . . . . . . . . . . . . . . . . . . . . 97<br />

5 Realisierung von Szenarien des <strong>Mehrbenutzer</strong>-TV 99<br />

5.1 Verwendung einer Quelle durch eine Anwendung . . . . . . . . . 101<br />

5.2 Zugriff einer Anwendung auf mehrere Quellen . . . . . . . . . . 101<br />

5.2.1 Die globale Kanalliste . . . . . . . . . . . . . . . . . . . 102<br />

5.2.1.1 Datenstruktur der globalen Kanalliste . . . . . . 103<br />

5.2.1.2 Auslesen der Kanäle einer TV-Quelle . . . . . . 105<br />

5.2.2 Ein Videorekorder auf Basis von <strong>NMM</strong> . . . . . . . . . . 106<br />

5.2.2.1 Realisierung des Videorekorders . . . . . . . . 108<br />

5.2.2.2 Einprogrammieren von Aufnahmen . . . . . . . 113<br />

5.2.2.3 Erkennen <strong>und</strong> Auflösen von Konflikten . . . . . 115<br />

5.2.2.4 Starten <strong>und</strong> Beenden von Aufnahmen . . . . . . 117<br />

5.2.2.5 Automatisches Wiederholen von Aufnahmen . . 120<br />

5.2.2.6 Ändern <strong>und</strong> Löschen von Aufnahmen . . . . . . 121<br />

5.2.2.7 Der Videorekorder als separate Anwendung . . 122<br />

5.3 Zugriff mehrerer Anwendungen auf mehrere Quellen . . . . . . . 122<br />

5.3.1 Zusammenspiel EPG - LiveTV/Videorekorder . . . . . . . 124<br />

5.3.2 Zusammenspiel Live TV - Live TV . . . . . . . . . . . . 125<br />

5.3.3 Zusammenspiel LiveTV - Videorekorder . . . . . . . . . 126<br />

5.3.4 Zusammenspiel EPG - Live TV - Videorekorder . . . . . 127<br />

5.3.5 Festlegung des Verwendungszwecks einer Quelle . . . . . 130<br />

5.3.6 Bestimmung einer verwendbaren Quelle . . . . . . . . . . 133<br />

5.4 Integration in die Multimedia-Box . . . . . . . . . . . . . . . . . 137<br />

5.4.1 Der TVTimer-Zustand . . . . . . . . . . . . . . . . . . . 137<br />

5.4.2 Der LiveTV-Zustand . . . . . . . . . . . . . . . . . . . . 140


INHALTSVERZEICHNIS<br />

5.5 Zusammenfassung . . . . . . . . . . . . . . . . . . . . . . . . . 143<br />

6 Zusammenfassung <strong>und</strong> Ausblick 145<br />

6.1 Erreichte Ziele . . . . . . . . . . . . . . . . . . . . . . . . . . . 145<br />

6.2 Erweiterungsmöglichkeiten . . . . . . . . . . . . . . . . . . . . . 147<br />

6.2.1 EPG-Plugins . . . . . . . . . . . . . . . . . . . . . . . . 147<br />

6.2.2 Benachrichtigung über eintreffende EPG-Informationen . 148<br />

6.2.3 Zusammenschluß mehrerer Videorekorder . . . . . . . . . 148<br />

6.2.4 Master-Slave-Konzept auf Middleware-Ebene . . . . . . . 149<br />

A Neue Konfigurations-Variablen in der Multimedia-Box 151<br />

A.1 Konfiguration des EPG . . . . . . . . . . . . . . . . . . . . . . . 151<br />

A.2 Konfiguration des Videorekorders . . . . . . . . . . . . . . . . . 152<br />

A.3 Konfiguration von Live TV . . . . . . . . . . . . . . . . . . . . . 153<br />

B Konfigurations-Dateien 155<br />

B.1 Default-Konfigurations-Dateien für EPG-Plugins . . . . . . . . . 155<br />

B.2 Datei zur Angabe von Aliasen für Sendernamen . . . . . . . . . . 156<br />

B.3 Videorekorder <strong>und</strong> Live TV . . . . . . . . . . . . . . . . . . . . . 156<br />

1


INHALTSVERZEICHNIS<br />

2


Kapitel 1<br />

Einleitung<br />

1.1 Motivation<br />

In der heutigen Zeit schreitet die Vernetzung von Unterhaltungsgeräten immer weiter<br />

voran. Dies zeigt sich vor allem darin, dass immer mehr Geräte auf den Markt<br />

gebracht werden, die einen Netzwerkanschluss enthalten. Eine solche Vorrichtung<br />

ermöglicht deren Einbindung in ein Home Entertainment Netzwerk <strong>und</strong> die Kommunikation<br />

verschiedener Multimediageräte untereinander. Somit lässt sich z.B.<br />

eine DVD, die im Arbeitszimmer in einem Personal Computer (PC) eingelegt ist,<br />

im Wohnzimmer auf einem Fernsehgrät wiedergeben. Die wohl am meisten genutzte<br />

Form der Unterhaltung ist jedoch nach wie vor das Fernsehen.<br />

Als Fernsehen bezeichnet man heute im Speziellen eine Technik, bei der die Bilder<br />

bewegt sind <strong>und</strong> zusätzlich passender Ton übertragen wird [Wikc]. Die Inhalte werden<br />

von R<strong>und</strong>funkanstalten bereitgestellt <strong>und</strong> von einem Sender über einen Kanal<br />

zu einem Empfänger übertragen. Deshalb werden die R<strong>und</strong>funkanstalten auch als<br />

Sender bezeichnet. Jeder Sender überträgt die Daten über einen eindeutigen Kanal,<br />

weshalb diese Begriffe in dieser Arbeit synonym verwendet werden. Die einzelnen<br />

Inhalte werden als Sendung bezeichnet, woraus sich das Programm <strong>eines</strong> Senders<br />

zusammensetzt. Die Sendungen können entweder direkt auf einem Fernsehgerät<br />

verfolgt werden, was als Live TV bezeichnet wird, oder zu einer späteren Wiedergabe<br />

auf entsprechenden Medien gespeichert werden. Die dafür notwendigen Geräte<br />

werden Videorekorder genannt, welche zu vorgegebenen Zeiten Sendungen aufzeichnen<br />

<strong>und</strong> zu einem späteren Zeitpunkt wiedergeben können. Zur Übertragung<br />

der Fernsehsignale werden heutzutage unterschiedliche Techniken verwendet.<br />

Die älteste Art der Übertragung ist die analoge Technik. Die Daten werden per<br />

Satellit, Kabel oder Antenne in die Haushalte geliefert, welche sich in dem unterschiedlichen<br />

Angebot bereitgestellter Sender unterscheiden. Im Gegensatz zu<br />

der Übertragung per Satellit ist die Auswahl an Sendern über Kabel oder Antenne<br />

regional unterschiedlich. Zudem werden per Satellit weit über 100 Sender<br />

bereitgestellt [ASTa], während per Kabel der Empfang auf 30 Sender beschränkt<br />

ist [Kabb]. Neben den Audio- <strong>und</strong> Video-Daten wird als Zusatzdienst der Tele-<br />

3


KAPITEL 1. Einleitung<br />

4<br />

text [ETS97c], auch Videotext genannt, übertragen, durch diesen u.a. Informationen<br />

über das Programm <strong>eines</strong> Senders abgerufen werden können. Mittlerweile wird<br />

die analoge Übertragungstechnik durch die digitale abgelöst. Diese zeichnet sich<br />

durch eine bessere Bild- <strong>und</strong> Tonqualität im Vergleich zur analogen Technik aus, da<br />

sich digitale Signale mittels Fehlerkorrektur verlustfrei übertragen <strong>und</strong> außerdem<br />

mit geringen Qualitätsverlusten stark komprimieren lassen [Wika]. Zur Kompression<br />

der Daten wird beim digitalen Fernsehen der MPEG-2-Standard [ISO04] verwendet.<br />

Im Gegensatz zur unkomprimierten Übertragung des analogen TV-Signals<br />

können beim Digitalfernsehen insgesamt mehr Bild- <strong>und</strong> Audio-Daten übertragen<br />

werden, was zu einem rauschärmeren Bild <strong>und</strong> einem klareren Klang führt.<br />

Neben dem Videotext sind bei der digitalen Übertragung zusätzliche Dienste verfügbar.<br />

So können verschiedene Multimedia-Dienste unter Verwendung des MHP-<br />

Standards [ETS03] bereitgestellt werden. Zusätzlich wird mit dem Fernsehsignal<br />

ein Elektronischer Programmführer (Electronic Programme Guide (EPG) übertragen,<br />

der Programm-Informationen zu Sendungen der verschiedenen Sender enthält.<br />

Ein EPG ist die digitale Form einer gedruckten Programmzeitschrift, die Informationen<br />

zu einzelnen Sendungen bereitstellt [Wikb]. Diese enthalten zu jeder Sendung<br />

neben der Start- <strong>und</strong> Endzeit den Titel der Sendung sowie eine Beschreibung<br />

deren Inhalts <strong>und</strong> können während des Fernsehens angezeigt <strong>und</strong> sogar durchsucht<br />

werden. Seit 1997 werden auch mittels des analogen Fernsehsignals EPG-<br />

Informationen übertragen [ETS97b]. Es gibt jedoch heutzutage nur wenige Geräte,<br />

die diese Daten lesen <strong>und</strong> anzeigen können. Durch die Nutzung von TV-Karten<br />

können diese Informationen auch auf PCs genutzt werden. Zum Erhalt von EPG-<br />

Informationen ist der Computer jedoch nicht ausschließlich auf die Verwendung<br />

von TV-Karten beschränkt. Durch die Anbindung an das Internet kann er auf eine<br />

größere Auswahl an EPG-Quellen zurückgreifen. Diese <strong>und</strong> die TV-Quellen unterscheiden<br />

sich jedoch meist in der Anzahl der Sender, für die Daten bereitgestellt<br />

werden, durch deren Informationsgehalt <strong>und</strong> den Zeitraum, für den Informationen<br />

zur Verfügung gestellt werden. Zur Nutzung dieser Daten könnte eine Anwendung<br />

ihre Informationen von unterschiedlichen EPG-Quellen sammeln um so möglichst<br />

umfangreiche Daten für alle gewünschten Kanäle für einen größt möglichen Zeitraum<br />

zur Verfügung zu haben.<br />

Die Nutzung der Informationen muss jedoch nicht auf eine Anwendung beschränkt<br />

sein. So ist es möglich, dass verschiedenen Programmen, ohne direkten Zugriff<br />

auf eine EPG-Quelle, Informationen von anderen zur Verfügung gestellt werden.<br />

So könnte ein PC keinen Zugang zum Internet besitzen, jedoch einen anderen PC<br />

erreichen, der eine solche Anbindung hat. Die Anwendung mit Internetanbindung<br />

stellt nun durch eine Netzwerkschnittstelle die gewünschten Daten zur Abfrage<br />

bereit. Andere Applikationen können das Fehlen von Daten erkennen <strong>und</strong> diese<br />

schließlich von dort erfragen. Auf diese Weise ist es möglich die eigenen EPG-<br />

Informationen zu vervollständigen <strong>und</strong> anderen zur Nutzung freizugeben.<br />

Eine TV-Karte erlaubt dem PC nicht nur das Sammeln von EPG-Informationen,<br />

sondern selbstverständlich auch den Zugriff auf das Fernsehprogramm der einzelnen<br />

Sender. Diese Daten können wiederum für Live TV genutzt oder aufgezeichnet<br />

werden. Innerhalb <strong>eines</strong> Netzwerks können diese TV-Karten auch solchen PCs zu-


gängig gemacht werden, die selbst keine TV-Karte besitzen. So ist es in einem Home<br />

Entertainment Netzwerk möglich z.B. von der Küche aus die TV-Karte <strong>eines</strong><br />

in einem anderen Raum befindlichen Rechners zu verwenden um während einer<br />

Kochsendung die Rezepte gleich in die Tat umzusetzen.<br />

Meist besteht ein Haushalt aus mehreren Parteien mit unterschiedlichen Interessen,<br />

insbesondere bzgl. ihrer Fernsehgewohnheiten. Dazu zählt nicht nur Live TV,<br />

sondern auch das Aufnehmen von Sendungen durch einen Videorekorder. Zur Vermeidung<br />

von Interessenskonflikten, das Live TV betreffend, müsste theoretisch in<br />

jedem Haushalt für jeden Teilnehmer eine TV-Quelle vorhanden sein. Weiterhin<br />

müsste für jeden zur Verfügung stehenden Kanal eine TV-Quelle existieren, damit<br />

zu jeder Zeit eine Sendung mittels <strong>eines</strong> Videorekorders aufgenommen werden<br />

kann ohne Gefahr zu laufen, dass dies auf Gr<strong>und</strong> mangelnder TV-Quellen scheitert.<br />

Zur Verdeutlichung sei ein Beispiel angeführt: Ein Zwei-Personen Haushalt<br />

kann über das Kabelnetz 30 Kanäle empfangen. Um zu jeder Zeit jeden Kanal aufnehmen<br />

zu können, müssten 30 Videorekorder zur Verfügung stehen. Durch Einbeziehen<br />

des Live TV erhöht sich die notwendige Anzahl der Geräte zum Fernsehempfang<br />

auf 32. In der Regel ist jedoch eine solch große Anzahl von TV-Geräten<br />

nicht vorhanden, sodass ggf. mehrere Personen die gleiche TV-Quelle verwenden<br />

wollen.<br />

Aus diesem Gr<strong>und</strong> sind die verfügbaren TV-Quellen je nach der momentan gewünschten<br />

Verwendungsart automatisch zu verwalten. Unter Verwendungsart wird<br />

das Benutzen einer TV-Quelle zu einem bestimmten Zweck verstanden, wie z.B.<br />

zur Aufnahme einer Sendung oder für Live TV. Dazu muss dynamisch festgestellt<br />

werden, für welchen Zweck die TV-Quelle aktuell verwendet wird <strong>und</strong> abhängig<br />

davon, welche Kontrollmöglichkeit für den entsprechenden Benutzer besteht. Eine<br />

TV-Quelle könnte auch von mehreren Benutzern gemeinsam verwendet werden,<br />

sodass diese die Audio-Video-Daten der selben TV-Karte entweder aufzeichnen<br />

oder auf unterschiedlichen Geräten darstellen. Dabei muss festgestellt werden, wer<br />

bei der TV-Quelle den Kanal wechseln darf. Es gilt zu vermeiden, dass z.B. eine<br />

Aufnahme durch den EPG unterbrochen wird, weil dieser von dem nächsten Kanal<br />

Informationen sammeln will, oder während Live TV der Kanal durch den EPG<br />

gewechselt wird.<br />

1.2 Ziele<br />

Ziel dieser Diplomarbeit ist die Erweiterung des am Lehrstuhl für Computergraphik<br />

entwickelten Home Entertainment Systems Multimedia-Box. Dies soll um<br />

eine Elektronische Programmzeitschrift erweitert werden, die bisher nicht realisiert<br />

wurde. Der EPG soll Daten von unterschiedlichen Quellen gleichzeitig abfragen<br />

<strong>und</strong> lokal speichern sowie durch eine entsprechende Schnittstelle über das<br />

Netzwerk angesprochen werden <strong>und</strong> mit anderen EPGs Daten austauschen können.<br />

Außerdem sollen die Live TV-Funktionalität <strong>und</strong> der Videorekorder um die<br />

Möglichkeit des Zugriffs auf mehrere TV-Quellen erweitert werden. Diese unterstützten<br />

bisher lediglich eine lokale oder im Netzwerk verteilte TV-Karte. Wei-<br />

1.2. ZIELE<br />

5


KAPITEL 1. Einleitung<br />

6<br />

terhin wird die Realisierung der Konzepte des <strong>Mehrbenutzer</strong>-TV angestrebt, wodurch<br />

eine Einschränkung der Kontrollmöglichkeit der genannten Anwendungen<br />

bei einem gemeinsamen Zugriff auf eine TV-Quelle vorgenommen werden soll.<br />

Diese Kontrollmöglichkeit der Anwendungen beschränkt sich in dieser Arbeit auf<br />

das Einstellen des benötigten Senders bei einer TV-Quelle. Darf eine Anwendung<br />

den Kanal wechseln, wird von einem kontrollierenden Zugriff gesprochen. Die<br />

Multimedia-Box <strong>und</strong> der vor dieser Arbeit erreichte Status der genannten Funktionalitäten<br />

werden in Abschnitt 3.3 genauer vorgestellt.<br />

Zur Realisierung des EPG müssen zuerst die entsprechenden Voraussetzungen geschaffen<br />

werden. Dazu zählen vor allem das Bestimmen <strong>und</strong> das Verwenden von<br />

möglichen Informationsquellen. Zahlreiche Anlaufstellen bietet das Internet zur<br />

Beschaffung von EPG-Daten, zudem existieren die bereits angesprochenen TV-<br />

Übertragungstechniken, die solche Informationen in den Datenstrom integrieren.<br />

Sie sind jedoch unterschiedlich formatiert <strong>und</strong> müssen deshalb zuerst in ein einheitliches<br />

Format gebracht werden. Je nach Anbieter haben solche Daten unterschiedlichen<br />

Informationsgehalt. Der eine liefert genauere Zeiten, ein anderer mehr<br />

Informationen zu Fernsehsendungen. Für eine Sammlung von möglichst aktuellen<br />

<strong>und</strong> umfangreichen Daten müssen daher die verschiedenen Quellen priorisiert werden.<br />

Dies dient der Entscheidung darüber, welche Informationen den vorhandenen<br />

hinzugefügt oder verworfen werden können. Dazu sind sowohl eine Architektur<br />

erforderlich, die das parallele Abfragen mehrerer Quellen unterstützt, als auch Regeln<br />

zur Bestimmung, welche Informationen zu verwenden <strong>und</strong> gegebenenfalls als<br />

gleichwertig zusammenzuführen sind. Die gesammelten Daten sollen permanent<br />

verfügbar sein, was u.a. bedeutet, dass nach dem Starten der Anwendung die schon<br />

gesammelten Informationen direkt abrufbar sind, weshalb sie für einen schnellen<br />

Zugriff lokal auf der Festplatte gespeichert werden sollen.<br />

Ein zusätzliches Ziel ist die Erweiterung des EPG um Netzwerkunterstützung. Dies<br />

bedeutet, dass er sich bei Bedarf mit im Netzwerk verteilten EPGs verbinden soll<br />

<strong>und</strong> diese nach Daten abfragen kann. Dazu soll festgestellt werden, ob eine Verteilung<br />

der Anfrage im Netzwerk notwendig ist. Dies erfordert eine Überprüfung der<br />

lokal ermittelten Abfrageergebnisse bzgl. eventuell fehlender Daten. Dieses Vorgehen<br />

soll durch die <strong>Implementierung</strong> einer Peer-to-Peer-Funktionalität realisiert<br />

werden. In einem Peer-to-Peer-Netz sind alle Computer gleichberechtigt <strong>und</strong> in<br />

der Lage sowohl Dienste in Anspruch zu nehmen als auch solche zur Verfügung<br />

zu stellen. Die Computer können als Arbeitsstationen genutzt werden, aber auch<br />

Aufgaben im Netz übernehmen [Wikf].<br />

Weiterhin soll in dieser Arbeit das <strong>Mehrbenutzer</strong>-TV realisiert werden. Darunter<br />

versteht man Anwendungsszenarien, in denen der Zugriff mehrerer Benutzer auf<br />

mehrere TV-Quellen automatisch geregelt wird. Als Benutzer werden in dieser Arbeit<br />

zum einen Anwendungen wie der EPG oder der Videorekorder bezeichnet, die<br />

selbstständig auf eine TV-Karte zugreifen um z.B. einen Kanal einzustellen <strong>und</strong><br />

zum anderen Anwender, die mit Hilfe <strong>eines</strong> Programms für Live TV kontrollierend<br />

auf eine TV-Karte zugreifen können. Die Szenarien beschreiben Wechselwirkungen,<br />

welche bei einem gemeinsamen Zugriff der genannten Anwendungen auf<br />

eine TV-Quelle auftreten. Unter einem gemeinsamen Zugriff zweier Anwendungen<br />

wird die gleichzeitige Verwendung einer Quelle durch diese Anwendungen


verstanden, d.h. beide greifen gemeinsam auf die Daten der Quelle zu. Dazu sollen<br />

die in der Multimedia-Box vorhandene Funktionalität für das Live TV <strong>und</strong> der<br />

Videorekorder ausgebaut werden. Als weitere Anwendung kommt der EPG hinzu,<br />

der durch Zugriff auf eine digitale TV-Karte Programm-Informationen sammelt.<br />

Für diese Anwendungen soll ein Algorithmus entwickelt werden, der automatisch<br />

verwendbare TV-Quellen ermittelt. Weiterhin soll eine Beschränkung der Kontrollmöglichkeit<br />

der einzelnen Anwendungen bei einem gemeinsamen Zugriff auf eine<br />

TV-Karte gegeben sein. Dies erfordert das Aufstellen von Regeln um festzulegen,<br />

welche Anwendung in diesem Fall den Kanal wechseln darf. Diese Beschränkung<br />

dient auch als Kriterium für eine verwendbare TV-Quelle zur Feststellung, ob eine<br />

Anwendung den geforderten Kanal einstellen darf, wenn die Quelle schon anderweitig<br />

verwendet wird. Als Vorlage dient dabei der in [LRS05] vorgestellte<br />

Algorithmus zur dynamischen Zuteilung von TV-Quellen.<br />

Zuerst ist jedoch festzulegen, welche TV-Quellen verwendet werden sollen. Diese<br />

können zum einen lokal oder in einem über das Netzwerk ansprechbaren Rechner<br />

existieren. Zur Kommunikation mit den entsprechenden Geräten ist eine Middleware<br />

erforderlich, die einen transparenten Zugriff auf lokale sowie im Netzwerk<br />

verteilte Ressourcen bietet. Diese Funktionalität wird von der Netzwerk-Integrierten<br />

Multimedia Middleware (<strong>NMM</strong>) bereitgestellt, welche in Kapitel 3 vorgestellt wird.<br />

Als Middleware wird eine Software-Infrastruktur für verteilte Systeme bezeichnet.<br />

Sie dient als Abstraktionsschicht zwischen der Anwendung <strong>und</strong> dem Betriebssystem<br />

<strong>und</strong> verbirgt die netzwerkspezifischen Eigenschaften des Systems vor dem<br />

Entwickler. Somit erhält der Entwickler einen transparenten Zugriff auf im Netzwerk<br />

verteilte Ressourcen. Der Begriff transparent bedeutet, dass die verteilte<br />

Kommunikation vor der Anwendung verborgen bleibt <strong>und</strong> der direkte Zugriff auf<br />

verteilte Ressourcen ermöglicht wird.<br />

Weiterhin muss ermittelt <strong>und</strong> gespeichert werden, welche Sender die zu verwendenden<br />

TV-Karten bereitstellen. Dies schließt das Erkennen der Verfügbarkeit <strong>eines</strong><br />

Senders über mehrere TV-Quellen mit ein. In diesem Fall muss eine Hierarchie<br />

derer festgelegt werden, die z.B. die Qualitätsaspekte von Übertragungstechniken<br />

berücksichtigt, sodass Anwendungen immer eine TV-Karte mit der höchst möglichen<br />

Präferenz zugewiesen wird. Zudem muss festgelegt werden, welche Anwendungen<br />

kontrollierend auf eine TV-Quelle zugreifen können, um evtl. den Kanal zu<br />

wechseln. Dies erfordert eine Hierarchie der Anwendungen, welche festlegt, dass<br />

niedriger priorisierte Anwendungen die entsprechende TV-Quelle zwar verwenden,<br />

jedoch nicht kontrollieren können. In dieser Arbeit soll zum einen dynamisch<br />

ermittelt werden, ob eine TV-Quelle von einem EPG, Live TV oder dem Videorekorder<br />

verwendet wird zum anderen die Kontrollmöglichkeit der Anwendungen<br />

unter Berücksichtung der Hierarchie eingeschränkt werden.<br />

Der Videorekorder soll sowohl den Zugriff auf mehrere lokal oder im Netzwerk<br />

verfügbare TV-Karten als auch das Programmieren von Aufnahmen durch mehrere<br />

Benutzer unterstützen. Des Weiteren wird die Realisierung einer Konflikterkennung<br />

angestrebt, die zum einen den entsprechenden Aufnahmen freie TV-Karten<br />

zuweist, zum anderen dem Benutzer anzeigt, welche der einzelnen Aufnahmen auf<br />

Gr<strong>und</strong> fehlender Ressourcen nicht programmiert werden konnte. Dafür soll in der<br />

1.2. ZIELE<br />

7


KAPITEL 1. Einleitung<br />

8<br />

Multimedia-Box die Möglichkeit der manuellen Auflösung von Konflikten vorgesehen<br />

sein. Dies beinhaltet die Anzeige von nicht programmierbaren Aufnahmen<br />

sowie deren Zuordnung zu einprogrammierten Aufnahmen, mit denen sie in Konflikt<br />

stehen.<br />

1.3 Gliederung<br />

In der vorliegenden Diplomarbeit gibt Kapitel 2 eine Übersicht über ausgewählte<br />

Programme, die dem Zugriff auf TV-Karten oder EPG-Informationen dienen.<br />

Dazu werden verschiedene Vertreter aus dem Bereich der kommerziellen Anwendungen<br />

<strong>und</strong> dem Open-Source-Bereich betrachtet. Diese gliedern sich wiederum<br />

in alleinstehende Programme, die ausschließlich den Zugriff auf TV-Quellen oder<br />

EPG-Informationen ermöglichen <strong>und</strong> Home Entertainment Systeme, welche diese<br />

<strong>und</strong> weitere Funktionalitäten in einer Anwendung vereinen. Zuletzt werden Forschungsprojekte<br />

vorgestellt, die im Umfeld der verteilten TV-Anwendungen angesiedelt<br />

sind.<br />

Inhalt des Kapitels 3 ist die Vorstellung der Netzwerk-Integrierten Multimedia<br />

Middleware (<strong>NMM</strong>), welche am Lehrstuhl für Computergraphik an der Universtät<br />

des Saarlandes entwickelt wird. Sie dient als Gr<strong>und</strong>lage für die <strong>Implementierung</strong><br />

der in dieser Diplomarbeit entwickelten Konzepte <strong>und</strong> Programme.<br />

In Kapitel 4 wird die realisierte Elektronische Programmzeitschrift beschrieben,<br />

welche Informationen von verschiedenen Quellen sammelt <strong>und</strong> zur Verfügung stellt.<br />

Neben der Peer-to-Peer-Funktionalität zur Realisierung <strong>eines</strong> verteilten EPGs wird<br />

die Integration des EPG in die Multimedia-Box besprochen.<br />

In Kapitel 5 werden Szenarien erläutert, in denen mehrere Benutzer auf mehrere<br />

TV-Quellen zugreifen, die Realisierung des Videorekorders beschrieben <strong>und</strong> ein<br />

Algorithmus entwickelt, der auf Gr<strong>und</strong>lage verschiedener Kriterien eine verwendbare<br />

TV-Quelle ermittelt um Konflikte in der Ressourcennutzung zu vermeiden.<br />

Das Kapitel endet mit der Integration dieser Konzepte in die Multimedia-Box.<br />

Zum Abschluss gibt Kapitel 6 einen Überblick über die erreichten Ziele <strong>und</strong> Erweiterungsmöglichkeiten<br />

der vorliegenden Arbeit.


Kapitel 2<br />

Verwandte Projekte<br />

In diesem Kapitel werden zu der vorliegenden Arbeit verwandte Programme <strong>und</strong><br />

Projekte vorgestellt. Sie bieten die Möglichkeit TV-Sendungen anzusehen, aufzuzeichnen<br />

oder EPG-Informationen anzuzeigen bzw. diese Funktionen zu vereinen.<br />

Am verbreitesten sind nach wie vor Hardwarelösungen wie Settop-Boxen <strong>und</strong><br />

Fernsehgeräte, die EPG-Informationen sammeln <strong>und</strong> anzeigen bzw. Videorekorder<br />

zur zeitgesteuerten Aufnahme einer Sendung. Dies sind oft eigenständige Geräte,<br />

die nicht miteinander kommunizieren können. So kann z.B ein Videorekorder nicht<br />

auf die von einer Settop-Box gesammelten EPG-Informationen zugreifen.<br />

Des Weiteren gibt es eine Vielzahl an Computerprogrammen <strong>und</strong> Dienstleistungen,<br />

die dazu verwendet werden können TV-Sendungen von einer in einem PC eingebauten<br />

TV-Karte aufzunehmen oder EPG-Informationen anzuzeigen. Die Programme<br />

können entweder käuflich erworben werden oder sind kostenlos als Open<br />

Source verfügbar. Neben Home Entertainment Systemen existieren viele kleine<br />

Programme, welche die gewünschten Aufgaben erfüllen, jedoch fehlt ihnen eine<br />

einheitliche Benutzeroberfläche. Home Entertainment Systeme verbinden diese<br />

Funktionalität unter einer einheitlichen Benutzeroberfläche. Sie bieten neben Live<br />

TV <strong>und</strong> einem Videorekorder zusätzlich einen EPG, mit dessen Hilfe Aufnahmen<br />

programmiert <strong>und</strong> Informationen zu Sendungen während Live TV bereitgestellt<br />

<strong>und</strong> angezeigt werden können.<br />

Home Entertainment Systeme bieten neben der TV-Funktionalität noch weitere<br />

Möglichkeiten der Medienwiedergabe wie z.B. das Abspielen einer DVD oder Musikdateien.<br />

Da dies jedoch für diese Arbeit nicht relevant ist, wird auf eine weitere<br />

Erläuterung verzichtet.<br />

Zur Vollständigkeit sind als Quellen für Programm-Informationen auch die Printmedien<br />

zu nennen. Neben Programmzeitschriften, die das Programm im Ein- oder<br />

Zwei-Wochenrhythmus angeben, ist das Fernsehprogramm <strong>eines</strong> Tages in vielen<br />

Tageszeitungen enthalten. Da sich diese Arbeit jedoch u.a. auf das digitale Erstellen<br />

einer Programmzeitschrift konzentriert, werden die Printmedien nicht näher<br />

betrachtet.<br />

9


KAPITEL 2. Verwandte Projekte<br />

10<br />

Zuerst wird in Abschnitt 2.1 darüber informiert, wie Settop-Boxen <strong>und</strong> Fernsehgeräte<br />

EPG-Informationen sammeln <strong>und</strong> anzeigen.<br />

In Abschnitt 2.2 werden kommerzielle Anwendungen behandelt, was sich in die<br />

Betrachtung einzelner kleinerer Programme in Abschnitt 2.2.1, gefolgt von der<br />

Vorstellung kommerzieller Home Entertainment Systeme in Abschnitt 2.2.2, gliedert.<br />

Im darauf folgenden Abschnitt 2.3 werden Programme aus dem Open Source-<br />

Bereich vorgestellt. Auch dieser wird in Abschnitt 2.3.1 in die Betrachtung einzelner<br />

Programme <strong>und</strong> in Abschnitt 2.3.2 in die Vorstellung von Home Entertainment<br />

Systemen in Abschnitt 2.3.2 aufgeteilt.<br />

Abschnitt 2.4 stellt einige Ansätze aus der Forschung vor. Dazu werden das TV-<br />

Anytime Forum <strong>und</strong> WWICE betrachtet.<br />

Einige der hier vorgestellten Programme greifen zum Sammeln von EPG-Informationen<br />

auf die XMLTV-Werkzeuge, die ihre Daten aus dem Internet beziehen, <strong>und</strong><br />

die Anwendung nxtvepg zurück, welche die analogen TV-Signale auswertet. Diese<br />

werden in Abschnitt 4.2.3 bzw. Abschnitt 4.2.4 ausführlich vorgestellt, da sie dem<br />

in dieser Arbeit entwickelten EPG ebenfalls als Quellen dienen.<br />

2.1 Fernseher <strong>und</strong> Settop-Boxen<br />

Mittlerweile bietet jeder Fernseher durch Zugriff auf den Videotext [ETS97c] die<br />

Möglichkeit Informationen über das Programm <strong>eines</strong> Senders bereitzustellen. Die<br />

Daten werden nicht lokal gespeichert, sondern von den R<strong>und</strong>funkanstalten als Bilddaten<br />

mit dem Fernsehsignal in einer Endlosschleife übertragen. Bei Bedarf können<br />

einzelne Seiten durch Angabe der gewünschten Seitennummer abgerufen <strong>und</strong><br />

angezeigt werden. Die Programm-Informationen sind zudem, wie Abbildung 2.1<br />

zeigt, in der Regel auf den jeweiligen Sender beschränkt. Für einen kompletten<br />

Überblick über das Programm aller Sender muss der Videotext <strong>eines</strong> jeden Kanals<br />

aufgerufen werden. Diese Daten können nur angezeigt, aber nicht durchsucht<br />

werden.<br />

Heutzutage bieten manche Fernseher zudem noch Unterstützung für nexTView-<br />

EPG [ETS97b]. Diese Daten werden von einem Dienstleister über die Austastlücke<br />

des Videotextes übertragen. Sie enthalten Informationen für mehrere Sender<br />

<strong>und</strong> werden je nach Land von einem oder zwei Sendern übertragen. Der Nachteil<br />

besteht darin, dass der entsprechende Kanal für eine gewisse Zeit eingestellt<br />

bleiben muss um die Daten zu sammeln. Abbildung 2.2 zeigt die Darstellung der<br />

Informationen bei einem Gr<strong>und</strong>ig Sydney SE7240 Fernsehgerät. Hier gehen die<br />

Daten nach dem Abschalten des Gerätes verloren.<br />

Settop-Boxen dienen dem Dekodieren von digitalen TV-Signalen (Digital Video<br />

Broadcast (DVB)). Diese Signale enthalten auch Programm-Informationen, die<br />

von den Settop-Boxen gesammelt <strong>und</strong> angezeigt werden. Auch hier gehen die In-


2.1. FERNSEHER UND SETTOP-BOXEN<br />

Abbildung 2.1: Der Videotext der ARD. Auf der ersten Seite wird angezeigt, was<br />

aktuell <strong>und</strong> im Anschluss gesendet wird (links). Auf weiteren Seiten erhält man<br />

den Überblick über das Tagesprogramm (rechts).<br />

Abbildung 2.2: Der TV Guide des Gr<strong>und</strong>ig Sydney SE7240 bietet die Möglichkeit<br />

Informationen nach vorgegebenen Kriterien zu sortieren.<br />

11


KAPITEL 2. Verwandte Projekte<br />

12<br />

Abbildung 2.3: InterVideo’s MSIPVS liegt der MSI VOX USB2.0 TV Box [MSIC]<br />

bei. Die Abbildung zeigt das Live TV-Bild (links) <strong>und</strong> den EPG (rechts), der die<br />

Webseite von tvtv.de anzeigt.<br />

formationen nach dem Ausschalten oftmals noch verloren. Moderne Settop-Boxen<br />

können mittlerweile jedoch auch Fernsehsendungen sowie EPG-Informationen auf<br />

internen Festplatten ablegen.<br />

Die hier vorgestellten Mechanismen können die Informationen oftmals nicht permanent<br />

speichern, sodass bei jedem Anschalten des Fernsehers oder der Settop-<br />

Box die Daten erneut gesammelt werden. Zudem sind zur Unterstützung von Live<br />

TV, einem Videorekorder <strong>und</strong> <strong>eines</strong> EPG oftmals Kombinationen dieser Geräte<br />

notwendig.<br />

2.2 Kommerzielle Anwendungen <strong>und</strong> Systeme<br />

Im Bereich der kommerziellen Anwendungen <strong>und</strong> Systeme gibt es eine Vielzahl an<br />

Programmen, die Zugriff auf TV-Karten bieten oder EPG-Informationen anzeigen.<br />

Im Folgenden wird eine kleine Auswahl davon vorgestellt.<br />

2.2.1 Alleinstehende Programme<br />

Allen TV-Karten liegen auf ihre Bedürfnisse zugeschnittene Programme bei. Diese<br />

bieten zumindest die Möglichkeit TV-Programme anzusehen <strong>und</strong> währenddessen<br />

aufzuzeichnen. Vielfach ist auch ein Videorekorder verfügbar um Sendungen zu<br />

bestimmten Zeiten aufzunehmen. Dabei wird auf nur eine Karte zur Aufnahme<br />

zugegriffen. Wenn ein EPG vorhanden ist, zeigt dieser die Internetseite <strong>eines</strong> entsprechenden<br />

Providers an, wie in Abbildung 2.3 zu sehen ist. Dieser Mechanismus<br />

unterstützt jedoch nicht das Programmieren von Aufnahmen durch die Auswahl<br />

einer Sendung im EPG. Außerdem ist mit diesen Programmen weder die Nutzung


2.2. KOMMERZIELLE ANWENDUNGEN UND SYSTEME<br />

Abbildung 2.4: Kann eine Sendung mangels freier TV-Ressourcen nicht aufgezeichnet<br />

werden, bietet die Windows Media Center Edition die manuelle Auflösung<br />

des Konflikts an. (Bildquelle: [Thu])<br />

im Netzwerk verteilter Ressourcen noch der gemeinsame Zugriff auf eine TV-Karte<br />

durch mehrere Anwendungen möglich.<br />

Für die gesteckten Ziele sind diese Programme nicht verwendbar, da sie nicht den<br />

gemeinsamen Zugriff auf Ressourcen offerieren. Des Weiteren bieten sie keine Interaktion<br />

zwischen Videorekorder, Live TV <strong>und</strong> EPG.<br />

2.2.2 Home Entertainment Systeme<br />

Im Bereich der kommerziellen Software existieren mehrere <strong>Implementierung</strong>en<br />

von Home Entertainment Systemen. Ein Testbericht verschiedener Media Center<br />

Programme für Microsoft Windows findet sich z.B. in [Zot05]. Die beiden interessantesten<br />

Vertreter werden im Folgenden vorgestellt.<br />

2.2.2.1 Windows Media Center Edition<br />

Die Windows Media Center Edition 2005 (MCE) [Micb] ist ein Home Entertainment<br />

System von Microsoft. Es unterstützt sowohl Live TV als auch Videorekorderfunktionalität.<br />

Darüber hinaus enthält es eine elektronische Programmzeitschrift,<br />

die einen Überblick über das TV-Programm gewährt.<br />

Als TV-Quelle werden digitale <strong>und</strong> analoge TV-Karten unterstützt, wobei der Zugriff<br />

nicht auf eine einzige TV-Karte beschränkt ist. Der Videorekorder verteilt<br />

Aufnahmen auf vorhandene TV-Karten <strong>und</strong> erkennt, wenn eine Sendung mangels<br />

freier Ressourcen nicht aufgenommen werden kann. Diesbezüglich wird eine manuelle<br />

Konfliktauflösung angeboten, mit deren Hilfe ggf. Ressourcen durch Löschen<br />

einprogrammierter Aufnahmen freigegeben werden können (siehe Abbildung<br />

2.4).<br />

Der EPG ist von einem Service-Provider gespeist, auf den per Internet zugegrif-<br />

13


KAPITEL 2. Verwandte Projekte<br />

14<br />

Abbildung 2.5: Der EPG der Microsoft Windows Media Center Edition stellt das<br />

Tagesprogramm als Tabelle dar, wobei die Zeilen das Programm der einzelnen Sender<br />

enthalten. (Bildquelle: [Thu])<br />

Abbildung 2.6: Der Videorekorder der MS MCE bietet die Möglichkeit programmierte<br />

Aufnahmen nach verschiedenen Kriterien zu filtern <strong>und</strong> zeigt zugehörige<br />

EPG-Informationen an. (Bildquelle: [Thu])<br />

fen wird. Die Daten werden anschließend lokal gespeichert. Als Quelle für EPG-<br />

Informationen ist die Media Center Edition auf den Service-Provider beschränkt,<br />

alternative Quellen werden nicht unterstützt. Die Programm-Informationen werden,<br />

wie in Abbildung 2.5 gezeigt, in einer Tabelle dargestellt, wobei neben einer<br />

erweiterten Beschreibung zusätzlich das Live TV-Bild des jeweils ausgewählten<br />

Senders sichtbar ist. Darüberhinaus werden EPG-Informationen im Videorekorder<br />

bzgl. einer Aufnahme dargestellt (siehe Abbildung 2.6). Außerdem können die<br />

EPG-Daten nach vorgegebenen Kriterien gefiltert werden, z.B. nach Kategorien,<br />

Stichworten, etc.. Unterstützt wird ebensfalls das Programmieren einer Aufnahme<br />

durch Auswahl einer Sendung im EPG, wobei auch eine Serie zu unterschiedlichen<br />

Zeiten <strong>und</strong> auf verschiedenen Sendern basierend auf EPG-Informationen automatisch<br />

aufgenommen werden kann.<br />

Die Windows Media Center Edition ermöglicht selbst keinen Zugriff auf entfernte<br />

Ressourcen, wodurch die Möglichkeit des <strong>Mehrbenutzer</strong>-TV im Sinne dieser Arbeit<br />

nicht gegeben ist. Die Netzwerkfunktionalität wird mittels zusätzlicher Hard-


2.2. KOMMERZIELLE ANWENDUNGEN UND SYSTEME<br />

Abbildung 2.7: Der EPG von SageTV2. Auch hier werden die Informationen in<br />

Tabellenform angezeigt. (Bildquelle: [Fre])<br />

ware realisiert, welche Media Center Extender [Mica] genannt wird. Diese Hardware<br />

dient jedoch lediglich dem Zugriff auf eine Media Center Edition-Anwendung<br />

um deren graphische Benutzeroberfläche auf einem angeschlossenen Fernseher anzuzeigen<br />

<strong>und</strong> Eingaben über eine Fernbedienung an diese zurückzuleiten. So können<br />

auf dem PC verfügbare Multimedia-Inhalte zugegriffen werden. Die Microsoft<br />

Media Center Edition kann sich jedoch dadurch nicht entfernter Ressourcen bedienen.<br />

2.2.2.2 SageTV2<br />

SageTV2 [Fre] von Frey Technologies ist ein kommerzieller Videorekorder, der<br />

mehrere TV-Karten unterstützt. Ebenso bietet er Unterstützung für Live TV <strong>und</strong><br />

enthält einen integrierten EPG.<br />

Die TV-Quellen können dabei lokal oder im Netzwerk verteilt sein. Zum Ansprechen<br />

der entfernten TV-Quellen stellt Frey Technologies das Programm SageTV<br />

Recorder zur Verfügung um die entfernte TV-Karte zu nutzen. Aufnahmen werden<br />

jedoch auf dem entfernten Rechner abgelegt <strong>und</strong> müssen über ein entsprechendes<br />

Netzwerk-Dateisystem zugängig gemacht werden.<br />

Für die USA <strong>und</strong> Kanada werden EPG-Daten von speziellen Service-Providern<br />

bereitgestellt. Außerhalb dieser Gebiete ist nur die Verwendung der XMLTV-Programme<br />

[XML] möglich. Sie dienen dem in dieser Arbeit entwickelten EPG ebenfalls<br />

als Quelle <strong>und</strong> werden in Abschnitt 4.2 genauer betrachtet. Die Daten für das<br />

Tagesprogramm werden in einer Tabelle angezeigt (siehe Abbildung 2.7). Hieraus<br />

können Aufnahmen direkt im Videorekorder einprogrammiert werden. SageTV2<br />

bietet außerdem die Möglichkeit Aufnahmen automatisch zu programmieren, indem<br />

man bestimmte Kriterien bezüglich der EPG-Informationen festlegt. Treffen<br />

die Angaben bei einer Sendung zu, wird für diese Sendung von selbst eine Aufnahme<br />

getätigt.<br />

15


KAPITEL 2. Verwandte Projekte<br />

16<br />

2.2.2.3 Fazit<br />

Beide in diesem Abschnitt vorgestellten Home Entertainment System können lediglich<br />

von einer Quelle EPG-Informationen sammeln. Diese werden von einem<br />

speziellen Dienst zur Verfügung gestellt, der bei SageTV ausschließlich auf Nordamerika<br />

beschränkt ist. Für den in dieser Arbeit entwickelten EPG soll das Sammeln<br />

der Daten von mehreren unterschiedlichen Quellen möglich sein. Auf die<br />

verfügbaren Informationen kann ausschließlich die lokale Anwendung zugreifen,<br />

ein Austausch der Informationen über das Netzwerk ist nicht möglich. Ein Ziel<br />

dieser Arbeit besteht jedoch darin den EPG über das Netzwerk ansprechen zu können<br />

um anderen Anwendungen Daten zur Verfügung zu stellen bzw. von diesen zu<br />

erfragen.<br />

Die TV-Funktionaliät beider Home Entertainment Systeme bietet die Unterstützung<br />

mehrerer lokal vorhandener TV-Quellen. SageTV2 kann zudem auf im Netzwerk<br />

verteilte TV-Ressourcen zugreifen. Es wird jedoch nur ein einzelner Benutzer<br />

unterstützt, wodurch eine Beschränkung der Kontrolle über eine TV-Karte bei Zugriff<br />

mehrerer Anwendungen für LiveTV nicht gegeben ist. Für die Erweiterung<br />

der Multimedia-Box in dieser Arbeit soll der Zugriff auf im Netzwerk verteilte<br />

TV-Ressourcen, im Gegensatz zur Windows Media Center Edition, ohne spezielle<br />

Hardware möglich sein. Weiterhin sollen ebenfalls mehrere analoge <strong>und</strong> digitale<br />

TV-Quellen angesprochen <strong>und</strong> zusätzlich der kontrollierende Zugriff bei Live TV<br />

automatisch geregelt werden können.<br />

Zur Aufnahme einer Sendungen bieten beide Home Entertainment System sowohl<br />

eine manuelle Programmierung als auch das Auswählen einer aufzunehmenden<br />

Sendung im EPG. Zudem können Aufnahmen automatisch basierend auf ihren<br />

EPG-Informationen wiederholt werden. Diese Funktionalität soll ebenfalls für die<br />

Multimedia-Box realisiert werden.<br />

2.3 Open Source Anwendungen<br />

Im Bereich der Open Source-Software existieren auch viele unterschiedliche Programme<br />

zum Zugriff auf TV-Quellen oder EPG-Daten. Diese reichen von einfachen<br />

Anwendungen zum Ansprechen einer TV-Karte bis zu komplexen Home Entertainment<br />

Systemen, die viele Funktionalitäten vereinen.<br />

2.3.1 Alleinstehende Programme<br />

Im Folgenden werden einzelne kleine Programme aus dem Open Source-Bereich<br />

betrachtet.


2.3. OPEN SOURCE ANWENDUNGEN<br />

Abbildung 2.8: Durch die Unterstützung des Programmes nxtvepg lassen sich bei<br />

xawtv EPG-Informationen zur aktuellen Sendung anzeigen.<br />

2.3.1.1 xawtv<br />

xawtv [Knob] ist eine Anwendung zum Bedienen von analogen TV-Karten. Eine<br />

Liste unterstützter Karten ist auf der Webseite verfügbar. Zum Zeitpunkt dieser<br />

Arbeit wurde damit begonnen Unterstützung für digitale TV-Karten zu integrieren.<br />

Das Programm kann die entsprechenden Videodaten anzeigen oder in eine Datei<br />

auf die Festplatte schreiben. Es bietet keine Unterstützung zur zeitlich gesteuerten<br />

Aufnahme <strong>und</strong> der Zugriff ist auf eine lokale TV-Karte beschränkt. Weiterhin ist<br />

es mit xawtv nicht möglich auf eine belegte TV-Quelle zuzugreifen, sodass zwei<br />

Instanzen des Programmes nicht die gleiche verwenden können.<br />

xawtv selbst bietet keine EPG-Funktionalität, kann jedoch in Verbindung mit nxtvepg<br />

[Zoe] den Titel der aktuellen Sendung anzeigen (siehe Abbildung 2.8).<br />

2.3.1.2 vcr - Kommandozeilen-Videorekorder<br />

vcr [Avo] ist eine Kommandozeilen-Applikation zur Aufnahme von TV-Sendungen,<br />

die ebenfalls nur analoge TV-Karten untersützt. Im Gegensatz zu xawtv ist keine<br />

Unterstützung für digitale TV-Karten vorgesehen. Sie dient ausschließlich zur Aufnahme<br />

von TV-Sendungen, d.h. dass mit diesem Programm Live TV nicht möglich<br />

ist. Man kann die Laufzeit einer Aufzeichnung angeben, sodass in Verbindung mit<br />

cron [Vix93] auch das Aufnehmen zu bestimmten Zeiten realisiert werden kann.<br />

Das Programm vcr bietet nur die Möglichkeit eine lokale TV-Karte anzusprechen<br />

<strong>und</strong> enthält keine Konflikterkennung. Weiterhin fehlt die Möglichkeit des Zugriffs<br />

zweier Instanzen von vcr auf die gleiche TV-Quelle. Das Programm selbst unterstützt<br />

keinen EPG, sodass keine Informationen zu Aufnahmen angezeigt oder<br />

gespeichert werden können.<br />

17


KAPITEL 2. Verwandte Projekte<br />

18<br />

Abbildung 2.9: Das Hauptmenü von WebVCR+ zeigt alle einprogrammierten Sendungen<br />

inklusive vorhandener EPG-Informationen. (Bildquelle: [Web])<br />

2.3.1.3 WebVCR+<br />

WebVCR+ [Web] bietet selbst keine Möglichkeit zur Aufnahme, sondern dient nur<br />

als graphische Benutzeroberfläche für externe Programme wie z.B. vcr. Es verbindet<br />

die Aufnahme-Eigenschaften des Programmes mit einem EPG. Als Quelle<br />

für Programm-Informationen dienen die XMLTV-Programme [XML]. Dadurch ist<br />

sowohl die Aufnahme einer Sendung durch deren Auswahl im EPG als auch die<br />

Anzeige entsprechender Informationen zu programmierten Aufnahmen möglich<br />

(siehe Abbildung 2.9).<br />

Da zur Aufnahme auch das Programm vcr verwendet wird, unterliegt WebVCR+<br />

bei einem Zugriff auf TV-Quellen den in Abschnitt 2.3.1.2 schon erwähnten Beschränkungen.<br />

2.3.1.4 Fazit<br />

Die in diesem Abschnitt vorgestellten Programme bieten lediglich Unterstützung<br />

für eine einzelne lokale TV-Karte. Da diese Anwendungen direkt über den Treiber<br />

mit den verwendeten Hardware kommunizieren ist ein gemeinsamer Zugriff mehrerer<br />

Anwendungen auf eine TV-Quelle nicht möglich. Weiterhin fehlt die Möglichkeit<br />

der Verwendung im Netzwerk verteilter TV-Karten, wodurch eine Betrachtung<br />

der Zugriffskontrolle, wie sie in dieser Arbeit realisiert werden soll, entfällt.<br />

Die Anzeige von EPG-Informationen bei Live TV soll nicht nur, wie bei xawtv,<br />

auf den Titel der aktuellen Sendung beschränkt sein, sondern bei Bedarf alle zu der<br />

Sendung vorhandenen Informationen anzeigen.


2.3. OPEN SOURCE ANWENDUNGEN<br />

Abbildung 2.10: Während Live TV werden bei VDR EPG-Informationen zur momentan<br />

laufenden <strong>und</strong> folgenden Sendung eingeblendet. (Bildquelle: [Sch])<br />

2.3.2 Home Entertainment Systeme<br />

Auch im Open Source-Bereich existieren verschiedene Home Entertainment Systeme,<br />

deren bekannteste Vertreter im Folgenden vorgestellt werden.<br />

2.3.2.1 VDR<br />

Klaus Schmiedinger’s Video Disk Rekorder (VDR) [Sch] ist ein Projekt, in dem<br />

eine Software entwickelt wurde, mit deren Hilfe ein PC zu einem digitalen Satellitenreceiver<br />

inklusive <strong>eines</strong> Video Disk Rekorders erweitert wird. Dabei werden<br />

mehrere DVB-Karten gleichzeitig unterstützt, wovon mindestens eine Karte eine<br />

’full featured’-Karte mit Videoausgang sein muss. Solche Karten besitzen einen<br />

eingebauten MPEG2-Dekoder, über den die Video-Daten an ein angeschlossenes<br />

Anzeige-Gerät übertragen werden.<br />

Der VDR bezieht EPG-Daten aus dem DVB-Datenstrom <strong>und</strong> legt sie im Hauptspeicher<br />

ab. Diese Daten können nach folgenden Kriterien angezeigt werden:<br />

• Sortiert nach Zeit, wobei Informationen zu momentan laufenden oder unmittelbar<br />

nachfolgenden Sendungen angezeigt werden (siehe Abbildung 2.10).<br />

• Sortiert nach Kanal, wobei Informationen zu Sendungen des entsprechenden<br />

Tagesprogramms angezeigt werden (siehe Abbildung 2.11).<br />

Außerdem können zu einzelnen Sendungen erweiterte Informationen eingeblendet<br />

werden, was ebenfalls in Abbildung 2.11 zu sehen ist. Aufnahmen können entweder<br />

manuell oder über den EPG programmiert werden. Dazu werden auch die entsprechenden<br />

EPG-Informationen angezeigt. Bei Konflikten verteilt der VDR die<br />

Aufnahmen auf die verfügbaren Karten. Diesen kann vom Benutzer eine Priorität<br />

zugewiesen werden, dass bei einer Überschneidung diejenige mit der höchsten<br />

Priorität gestartet wird. Die Benutzeroberfläche des Videorekorders sowie die Anzeige<br />

einprogrammierter Aufzeichnungen sind in Abbildung 2.12 zu sehen.<br />

19


KAPITEL 2. Verwandte Projekte<br />

20<br />

Abbildung 2.11: Der EPG von VDR zeigt das Tagesprogramm <strong>eines</strong> Senders als<br />

Liste(rechts). Zu einzelnen Sendungen kann man bei Bedarf zusätzliche Informationen<br />

abrufen (rechts). (Bildquelle: [Sch])<br />

Abbildung 2.12: Die Abbildung zeigt den Videorekorder des VDR. Das linke Bild<br />

zeigt die Eingabemaske zum Programmieren einer Aufnahme. Rechts sieht man<br />

einprogrammierte Aufnahmen im Überblick. (Bildquelle: [Sch])


2.3. OPEN SOURCE ANWENDUNGEN<br />

Der VDR besitzt eine Plugin-Struktur, mit deren Hilfe Funktionalität nachgerüstet<br />

werden kann. Im Folgenden werden ausgewählte Plugins vorgestellt. Eine Liste<br />

verfügbarer Plugins kann auf der Webseite des Projekts [Sch] eingesehen werden.<br />

• Das von Andreas Kool entwickelte Plugin AnalogTV [Koo] ermöglicht den<br />

Zugriff auf analoge TV-Karten sowie das Einbinden von nxtvepg [Zoe].<br />

• Das Plugin Client/Server Streaming von Sascha Volkenandt [Vol] erweitert<br />

den VDR um Netzwerkfunktionalität. Es ermöglicht den Zugriff auf<br />

im Netzwerk verteilte VDR-Applikationen <strong>und</strong> auf somit bereitgestellte TV-<br />

Karten. Als zugreifende Anwendung kann entweder wiederum eine VDR-<br />

Applikation oder ein Streaming-Client wie z.B. mplayer [MPl] verwendet<br />

werden. Die Übertragung der Kontrolldaten, z.B. zum Setzen <strong>eines</strong> Kanals,<br />

geschieht über das selbst implementierte Protokoll VTP (Video Transfer Protokoll),<br />

während die Übertragung von Multimedia-Daten mittels <strong>eines</strong> einfachen<br />

HTTP-Streaming-Protokolls vorgenommen wird. Dies erlaubt den Zugriff<br />

auf im Netzwerk verteilte TV-Quellen. Im Falle von Live TV erhält der<br />

Client, welcher auf die entfernte TV-Karte zugreift, die Kontolle über die<br />

TV-Karte <strong>und</strong> kann den Kanal wechseln. Die zu der TV-Karte lokale Anwendung<br />

kann den Kanal lediglich innerhalb des eingestellten Kanal-Bouquets<br />

wechseln. Sollte die lokale Anwendung jedoch gerade eine Sendung aufzeichnen,<br />

kann der Kanal nicht gewechselt werden. In dem Fall, dass sowohl<br />

der Client als auch der Server für eine Aufnahme die gleiche TV-Karte verwenden<br />

wird keine Zugriffsbeschränkung vorgenommen. Beide Anwendungen<br />

dürfen den gewünschten Kanal einstellen. Dies hat den Nachteil, dass die<br />

zuerst gestartete Aufnahme unterbrochen wird. EPG-Informationen werden<br />

ebenfalls übertragen, jedoch nicht innerhalb des MPEG-Stroms. Sie werden<br />

nach dem Verbinden mit der Server-Anwendung von dieser erfragt.<br />

• Christian Wieninger hat durch die Realisierung des Plugins EPGSearch [Wie]<br />

den VDR um eine Suche in den EPG-Daten erweitert. Damit können EPG-<br />

Daten nach verschiedenen Kriterien durchsucht sowie Aufnahmen auf Basis<br />

von EPG-Informationen automatisch programmiert werden.<br />

2.3.2.2 Freevo<br />

Freevo [Lag] ist ein in Python implementiertes Home Entertainment System, das<br />

zum Abspielen von Multimedia-Inhalten externe Programme, wie z.B. der Mediaplayer<br />

mplayer [MPl], verwendet. Es unterstützt mehrere lokale TV-Karten, von<br />

denen jedoch nur eine zur Aufnahme verwendet werden kann. Ein gemeinsamer<br />

Zugriff auf Ressourcen ist nicht möglich. Ebenso fehlt eine Netzwerkunterstützung,<br />

wodurch sich ein <strong>Mehrbenutzer</strong>-Szenario, wie für diese Arbeit angedacht,<br />

nicht realisieren lässt. Als TV-Quellen kommen hier sowohl analoge Karten als<br />

auch DVB-Karten zum Einsatz.<br />

Als EPG-Quelle dienen XMLTV <strong>und</strong> nxtvepg, deren Informationen in einer Tabellenansicht<br />

dargestellt werden (siehe Abbildung 2.13). Aufnahmen können auch<br />

hier entweder durch Auswahl im EPG oder manuell eingegeben werden.<br />

21


KAPITEL 2. Verwandte Projekte<br />

22<br />

Abbildung 2.13: Der EPG von Freevo zeigt EPG-Informationen in einer Tabellen-<br />

Übersicht an. (Bildquelle: [Lag])<br />

2.3.2.3 MythTV<br />

MythTV [Ric] ist ein Projekt von Isaac Richards. Es bietet Unterstützung für mehrere<br />

TV-Karten, sowohl analog als auch digital. Die Karten können über das Netzwerk<br />

verteilt sein, was durch die Aufteilung von MythTV in Front- <strong>und</strong> Backend<br />

realisiert wird. Das Backend übernimmt dabei Funktionalitäten wie das Kommunizieren<br />

mit der entsprechenden Hardware oder das Aufnehmen von Sendungen.<br />

Das Frontend verbindet sich mit dem Backend <strong>und</strong> bietet damit die graphische<br />

Benutzeroberfläche zur Steuerung der Anwendung. Der verteilte Zugriff auf TV-<br />

Ressourcen geschieht dann über das Verbinden mehrerer Backends untereinander.<br />

Dabei muss immer ein Master-Backend vorhanden sein, mit dem sich das Frontend<br />

verbindet <strong>und</strong> das alle Informationen über verfügbare TV-Karten enthält. Mit<br />

MythTV ist es nicht möglich, dass eine TV-Quelle von dem Videorekorder <strong>und</strong><br />

Live TV gleichzeitig verwendet werden kann. Im Falle einer Aufnahme wird der<br />

Zugriff von anderen Anwendungen verweigert, ebenso wird Live TV die TV-Karte<br />

entzogen, sollte diese als Quelle für eine Aufnahme verwendet werden.<br />

Als EPG-Quelle dienen XMLTV oder nxtvepg, deren Daten in einer MySQL-<br />

Datenbank [MyS] abgelegt werden. Die gesammelten Informationen werden tabellarisch<br />

dargestellt <strong>und</strong> dienen der Information über die aktuelle Sendung bei<br />

Live TV (siehe Abbildung 2.14). MythTV bietet auch die Möglichkeit nach Titeln<br />

zu suchen, die mit einem ausgewählten Buchstaben beginnen.<br />

In MythTV kann man ebenfalls Aufnahmen mittels des EPG oder manuell programmieren.<br />

Durch die Anzeige überlappender Aufnahmen wird die Auswahl einer<br />

Aufzeichnung zugelassen, wenn auftretende Konflikte aufgelöst werden sollen.<br />

Die entsprechende graphische Benutzeroberfläche ist in Abbildung 2.15 zu sehen.<br />

2.3.2.4 Fazit<br />

Alle in diesem Abschnitt vorgestellten Home Entertainment Systeme bieten einen<br />

EPG zur Anzeige von Programm-Informationen. Dieser kann von unterschiedli-


2.3. OPEN SOURCE ANWENDUNGEN<br />

Abbildung 2.14: Der EPG von MythTV zeigt EPG-Informationen bei Live TV<br />

(links) als auch in einer Tabelle für alle Kanäle an (rechts). (Bildquelle: [Ric])<br />

Abbildung 2.15: In dieser Eingabe können bei MythTV Konflikte aufgelöst werden.<br />

(Bildquelle: [Ric])<br />

23


KAPITEL 2. Verwandte Projekte<br />

24<br />

chen Quellen gespeist werden, wobei jedoch nur eine gleichzeitig abgefragt werden<br />

kann. Für die Multimedia-Box soll ebenfalls die Verwendung von XMLTV,<br />

nxtvepg <strong>und</strong> DVB als EPG-Quellen realisiert werden, wobei deren gleichzeitige<br />

Verwendung unterstützt werden soll.<br />

MythTV <strong>und</strong> VDR bieten zudem die Möglichkeit, auf diese Daten per Netzwerk<br />

zuzugreifen. Bei MythTV beschränkt sich dies jedoch auf den Zugriff mehrerer<br />

Anwendungen auf die gleiche MySQL-Datenbank. Bei VDR werden die Informationen<br />

bei einem Zugriff auf eine entfernte TV-Karte vom Server zum Client<br />

übertragen. Die verteilt laufenden Anwendungen sind jedoch auf die Verwendung<br />

der gleichen Quelle beschränkt <strong>und</strong> können fehlende Informationen nicht erkennen<br />

<strong>und</strong> somit erfragen.<br />

Die TV-Funktionalität der vorgestellten Home Entertainment Systeme unterstützt<br />

den Zugriff auf mehrere lokale TV-Karten. Lediglich MythTV <strong>und</strong> VDR können<br />

auch auf im Netzwerk verteilte TV-Karten zugreifen, wobei VDR zusätzlich den<br />

gemeinsamen Zugriff mehrerer Anwendungen auf eine TV-Quelle erlaubt. MythTV<br />

untersützt dies nicht, sondern gestattet nur die exklusive Verwendung einer<br />

TV-Quelle. Beide Anwendungen räumen dem Videorekorder eine höhere Prioriät<br />

als Live TV ein, d.h. sobald eine Aufnahme startet, übernimmt der Videorekorder<br />

die Kontrolle über die entsprechende TV-Karte <strong>und</strong> wechselt den Kanal. Die Live<br />

TV-Anwendungen können nun bei VDR nicht mehr den Kanal wechseln, bzw. ihr<br />

wird bei MythTV die TV-Karte entzogen.<br />

Die TV-Funktionalität der Multimedia-Box soll ebenfalls mehrere lokale sowie im<br />

Netzwerk verteilte, analoge <strong>und</strong> digitale TV-Quellen nutzen können. Dazu zählt<br />

auch die Realisierung <strong>eines</strong> gemeinsamen Zugriffs mehrerer Anwendungen <strong>und</strong><br />

die automatische Regelung deren Kontrollmöglichkeiten. Dabei soll im Falle von<br />

Live TV nicht davon ausgegangen werden, dass diese lediglich von einer einzelnen<br />

Person gesteuert werden, sondern mehrere Benutzer durch ihre Anwendung auf die<br />

TV-Karten zugreifen. Dies erfordert das Festlegen einer Regel, welche Anwendung<br />

berechtigt ist einen Kanalwechsel vorzunehmen.<br />

2.4 Forschungprojekte<br />

Im Bereich der Forschung existieren verschiedene Ansätze die Möglichkeiten der<br />

Übertragungstechniken des Fernsehens zu erweitern oder vorhandene Technologien<br />

in verschiedene TV-Szenarien zu integrieren. Ausgewählte Projekte werden im<br />

Folgenden vorgestellt.<br />

2.4.1 TVAnytime-Forum<br />

Das TV-Anytime Forum (TVAF) [TVA] ist eine gemeinnützige Vereinigung von<br />

Organisationen, deren Arbeit in verschiedene technische <strong>und</strong> nicht-technische Arbeitsgruppen<br />

unterteilt ist. Das TVAF entwickelt Spezifikationen für speicherba-


sierte A/V-Dienste wie z.B. Personal Digital Recorder.<br />

2.5. ZUSAMMENFASSUNG<br />

Ziel des TVAF ist die Forcierung der Entwicklung von TV inklusive der damit verb<strong>und</strong>enen<br />

Multimedia-Diensten <strong>und</strong> deren Verwaltung auf Speichermedien, unabhängig<br />

von der Art der Verbreitung. Dies ist in zwei Phasen aufgeteilt. In der ersten<br />

Phase sollen Spezifikationen erstellt werden um Daten aus TV-Übertragungen <strong>und</strong><br />

Online-Quellen auf lokalen Speichermedien zu verwalten. In der zweiten Phase<br />

sollen diese Daten innerhalb <strong>eines</strong> Heimnetzwerks verfügbar gemacht werden.<br />

Eine <strong>Implementierung</strong> dieser Konzepte wurde durch das STORit-Projekt [STO02]<br />

realisiert. Als TV-Quellen dienen sowohl digitale Quellen als auch das Internet. Die<br />

entwickelte STORit-Box beinhaltet u.a. einen Videorekorder <strong>und</strong> einen EPG, wodurch<br />

Aufnahmen aus dem EPG heraus programmiert werden können. Als Quelle<br />

für den EPG dient der digitale Fernsehstrom. Die STORit-Box besitzt jedoch keine<br />

Netzwerk-Unterstüzung, womit ein Zugriff auf verteilte Ressourcen entfällt.<br />

2.4.2 WWICE<br />

Das Window to the World of Information, Communication and Entertainment (WWI-<br />

CE) [BBE + 00] System ist eine Architektur für digitale innerhäusliche Netzwerke<br />

(In-Home digital networks - IHDN). Das Hauptaugenmerk liegt dabei auf einer<br />

Architektur für verteilte digitale Audio/Video-Systeme. Der Zugriff auf Geräte soll<br />

für den Benutzer transparent sein, d.h. er soll sich nicht darum kümmern müssen,<br />

wo die Daten gespeichert sind oder in welchem Raum sich das von ihm benutzte<br />

Gerät befindet.<br />

Das System gliedert sich in vier Ebenen. Auf der untersten Ebene, der Plattform-<br />

Ebene, wird die Abstraktionen für die verwendeten Geräte bereitstellt. Die Middleware-Ebene<br />

stellt die Funktionalität zum einfachen Realisieren von Anwendungen<br />

bereit. Auf der Anwendungs-Ebene wird die <strong>Implementierung</strong> der Benutzer-Funktionalität<br />

bereitgestellt. Die höchste Ebene ist die UI-Ebene, auf der die graphische<br />

Benutzerschnittstelle implementiert wird.<br />

WWICE bietet Zugriff auf mehrere lokale oder im Netzwerk verteilte TV-Ressourcen,<br />

wie es für die Multimedia-Box realisiert werden soll. Weiterhin wird der<br />

Zugriff mehrerer Anwenungen auf die gleiche TV-Ressource unterstützt. Über eine<br />

Regelung der Kontrolle von Anwendungen bei einem gemeinsamen Zugriff auf<br />

eine TV-Quelle konnte nichts in Erfahrung gebracht werden.<br />

2.5 Zusammenfassung<br />

Die alleinstehenden Programme unterstützen lediglich den Zugriff auf eine einzige<br />

lokale TV-Karte. Sie bieten nicht alle gewünschten Funktionalitäten in Bezug auf<br />

Live TV, Videorekorder <strong>und</strong> EPG, sondern stellen lediglich Teile davon bereit. Des<br />

Weiteren ist ein gemeinsamer Zugriff mehrerer solcher Anwendungen auf eine TV-<br />

Karte nicht möglich.<br />

25


KAPITEL 2. Verwandte Projekte<br />

26<br />

Die vorgestellten Home Entertainment Systeme bieten alle einen EPG, Videorekorder<br />

sowie die Möglichkeit des Live TV. Die EPG-Daten werden dazu verwendet<br />

um Aufnahmen zu programmieren <strong>und</strong> Informationen über das Programm <strong>eines</strong><br />

Senders zu liefern. Alle Programme bieten jedoch nur die Auswahl einer einzigen<br />

zu verwendenden EPG-Quelle, sodass ein gleichzeitiges Sammeln von Daten<br />

unterschiedlicher Quellen nicht möglich ist. Weiterhin besteht keine Möglichkeit<br />

Lücken in den EPG-Daten zu erkennen <strong>und</strong> fehlende Informationen bei im Netzwerk<br />

laufenden Anwendungen zu erfragen.<br />

Außerdem bieten alle Home Entertainment Systeme Unterstützung für mehrere lokale<br />

TV-Karten. Die meisten können zudem im Netzwerk verteile TV-Quellen nutzen.<br />

Ein gemeinsamer Zugriff auf eine dieser Ressourcen durch Live TV <strong>und</strong> den<br />

Videorekorder wird von den wenigsten Programmen unterstützt. Dann wird entweder<br />

Live TV die TV-Karte entzogen <strong>und</strong> für den Videorekorder verwendet oder<br />

letzterer erhält die Kontrolle über die Karte <strong>und</strong> blockiert somit den Kanalwechsel,<br />

bis die Aufnahme endet.<br />

Alle Anwendungen sind so ausgelegt, indem sie bei Live TV davon ausgehen, dass<br />

dies lediglich von einem Benutzer verwendet wird. Dies bedeutet, dass bei einem<br />

gemeinsamen Zugriff mehrerer Live TV-Anwendungen diejenige die kontrollierenden<br />

Zugriff erhält, welche sich als letzte auf die TV-Quelle aufgeschaltet hat. In<br />

dieser Arbeit soll jedoch davon ausgenagen werden, dass Live TV-Anwendungen<br />

von unterschiedlichen Benutzern verwendet werden. Dabei soll derjenige die Kontrolle<br />

erhalten, der als erster eine TV-Karte angefordert hat, was von keiner der<br />

vorgestellten Anwendungen unterstützt wird.


Kapitel 3<br />

Netzwerk-Integrierte Multimedia<br />

Middleware<br />

Die Netzwerk-Integrierte Multimedia Middleware (<strong>NMM</strong>) [LRS02] wird am Lehrstuhl<br />

für Computergraphik an der Universität des Saarlandes entwickelt. <strong>NMM</strong> ist<br />

ein in C++ [Str98] implementiertes Open Source-Projekt zur Bereitstellung einer<br />

einheitlichen Middleware für den Entwurf von Multimedia-Programmen für das<br />

freie Betriebssystem Linux. Zum Zeitpunkt dieser Arbeit wurde damit begonnen<br />

<strong>NMM</strong> auch nach Microsoft Windows zu portieren. Der aktuelle Entwicklungsstand<br />

von <strong>NMM</strong> kann auf der Homepage des Projekts [<strong>NMM</strong>] nachgelesen werden.<br />

Ein zentraler Bestandteil von <strong>NMM</strong> ist die transparente Verwendung von im Netzwerk<br />

verteilten Soft- <strong>und</strong> Hardwarekomponenten. So kann eine in einem entfernten<br />

Rechner installierte TV-Karte transparent angesprochen werden, ohne dass sich der<br />

Programmierer um die Netzwerkkommunikation der beiden Rechner Gedanken<br />

machen muss. So ist es für den Entwickler irrelevant, ob die TV-Karte in dem lokalen<br />

oder entfernten Rechner eingebaut ist. Die Art <strong>und</strong> Weise, wie die TV-Karte<br />

angesteuert wird, ist aus Sicht des Programmierers identisch.<br />

<strong>NMM</strong> dient dabei auch als Schnittstelle zwischen dem Betriebssystem, das die<br />

im PC installierte Hardware anspricht, <strong>und</strong> den Programmen, die diese Hardware<br />

verwenden. Durch das Konzept der Middleware werden dem Programmierer<br />

abstrahierte Methoden zur Steuerung der Hardware zur Verfügung gestellt, dass<br />

dieser die benötigten Systemkomponenten nicht direkt ansprechen muss. Zudem<br />

ist die einfache Integration neuer <strong>und</strong> bereits existierender Technologien möglich,<br />

wodurch diese den Anwendungen zugänglich gemacht werden.<br />

Im Folgenden werden die für diese Arbeit relevanten Aspekte von <strong>NMM</strong> dargelegt.<br />

Abschnitt 3.1 stellt Gr<strong>und</strong>lagen der Middleware vor, Abschnitt 3.2 beschreibt die<br />

benötigten Dienste, die durch <strong>NMM</strong> bereitgestellt werden. Abschließend folgt eine<br />

Einführung in das Home Entertainment System Multimedia-Box (MMBox), das<br />

auf Gr<strong>und</strong>lage von <strong>NMM</strong> entwickelt wurde (siehe Abschnitt 3.3).<br />

27


KAPITEL 3. Netzwerk-Integrierte Multimedia Middleware<br />

28<br />

3.1 Gr<strong>und</strong>lagen<br />

In diesem Abschnitt werden die in der Arbeit verwendeten, gr<strong>und</strong>legenden Elemente<br />

von <strong>NMM</strong> vorgestellt, die zur Realisierung der gewünschten Verarbeitung<br />

von Multimedia-Daten notwendig sind.<br />

3.1.1 Knoten<br />

Knoten übernehmen die funktionellen Aufgaben in <strong>NMM</strong>. Sie sorgen dafür, dass<br />

z.B. eine Datei ausgelesen oder Audio-Daten in ein bestimmtes Format umgewandelt<br />

werden. Jeder Knoten besitzt entweder einen Eingang, über den er Daten empfangen<br />

oder einen Ausgang, über den er Daten versenden kann, bzw. mindestens<br />

einen Ein- <strong>und</strong> Ausgang. Dabei wird zwischen verschiedenen Knotentypen unterschieden:<br />

Quellknoten Diese Knoten besitzen keine Eingänge, sondern genau einen Ausgang.<br />

Sie erstellen Multimedia-Daten oder lesen sie von entsprechenden Geräten.<br />

Senkeknoten Diese Knoten besitzen genau einen Eingang <strong>und</strong> empfangen Multimedia-Daten.<br />

Converterknoten Knoten dieses Typs besitzen einen Eingang <strong>und</strong> einen Ausgang.<br />

Sie konvertieren Multimedia-Daten von einem Format in ein anderes.<br />

Filterknoten Diese Knoten besitzen ebenfalls einen Eingang <strong>und</strong> einen Ausgang<br />

<strong>und</strong> verändern nicht das Format der Multimedia-Daten, sondern lediglich die<br />

Daten selbst.<br />

Demultiplexerknoten Diese Knoten besitzen einen Eingang <strong>und</strong> mehrere Ausgänge.<br />

Sie spalten z.B. Audio-Video-Ströme in einen Audio-Strom <strong>und</strong> einen<br />

Video-Strom auf.<br />

Multiplexerknoten Diese Knoten sind das Gegenteil <strong>eines</strong> Demultiplexerknotens.<br />

Sie besitzen mehrere Eingänge <strong>und</strong> einen Ausgang <strong>und</strong> verweben z.B. Audio<strong>und</strong><br />

Video-Ströme zu einem Audio-Video-Strom.<br />

3.1.2 Jacks<br />

Zur Realisierung einer bestimmten Multimediaverarbeitung müssen die entsprechenden<br />

Knoten miteinander verb<strong>und</strong>en werden. Dies geschieht durch das Verbinden<br />

der Ein- bzw. Ausgänge von Knoten, die in <strong>NMM</strong> Jacks genannt werden.<br />

Eine solche Verbindung wird als Kante bezeichnet. Dabei wird ein output-jack <strong>eines</strong><br />

Knotens mit genau einem input-jack des Folgeknotens verb<strong>und</strong>en. Jeder Jack<br />

kennt das Multimedia-Format, das er überträgt. Mögliche Parameter, die durch dieses<br />

Format spezifiziert werden, sind die Auflösung von Video-Daten oder die Bitrate<br />

kodierter Audio- oder Video-Daten. Details über Formate in <strong>NMM</strong> können


DVBRead-<br />

Node<br />

MPEGDemux-<br />

Node<br />

MPEGVideo-<br />

DecodeNode<br />

MPEGAudio-<br />

DecodeNode<br />

3.1. GRUNDLAGEN<br />

XDisplay-<br />

Node<br />

Playback-<br />

Node<br />

Abbildung 3.1: Flussgraph zur Wiedergabe der Audio- <strong>und</strong> Video-Daten einer<br />

digitalen TV-Quelle.<br />

in [Wam01] nachgelesen werden. Durch das Verbinden der Knoten entsteht ein<br />

gerichteter Graph, der in <strong>NMM</strong> Flussgraph genannt wird.<br />

In dieser Arbeit soll die Funktionalität für Live TV, einen Videorekorder <strong>und</strong> einen<br />

EPG, der Daten über eine digitale TV-Karte sammelt, realisiert werden. Zur Verarbeitung<br />

der Multimedia-Daten werden entsprechende Knoten benötigt um u.a. TV-<br />

Quellen anzusprechen oder Audio- <strong>und</strong> Video-Daten wiederzugeben, die <strong>NMM</strong> zu<br />

diesen Zwecken bereitstellt. Dies sind er DVBReadNode zum Zugriff auf digitale<br />

TV-Karten <strong>und</strong> der IVTVReadNode zum Ansteuern einer analogen WinTV PVR<br />

350 TV-Karte von Hauppauge [Hau]. Die Win TV PVR besitzt einen Hardware-<br />

MPEG-Encoder, mit dem die TV-Daten in das Videoformat MPEG-2 [ISO04] umgewandelt<br />

werden. Als Ausgabeformat liefern somit beide Knoten einen MPEG-<br />

2-Video-Strom, der im Falle des Videorekorders in eine Datei geschrieben <strong>und</strong> im<br />

Falle von Live TV angezeigt wird. Zum Schreiben von Dateien stellt <strong>NMM</strong> den<br />

GenericWriteNode zur Verfügung. Zur Wiedergabe der Audio- <strong>und</strong> Video-<br />

Daten muss der MPEG-2-Strom zuerst mittels des MPEGDemuxNode in einen<br />

Audio- <strong>und</strong> Video-Strom aufgeteilt werden. Der Audio-Strom wird mittels des<br />

MPEGAudioDecodeNode dekodiert <strong>und</strong> durch den PlaybackNode über eine<br />

So<strong>und</strong>karte ausgegeben. Der Video-Strom wird unter Verwendung des MPEG-<br />

VideoDecodeNode dekodiert <strong>und</strong> durch den XDisplayNode auf einem Bildschirm<br />

dargestellt. Abbildung 3.1 zeigt einen entsprechenden Graphen zur Darstellung<br />

der von einer digitalen TV-Quelle gelieferten Audio- <strong>und</strong> Video-Daten.<br />

3.1.3 Nachrichtensystem<br />

Zur Kommunikation der Knoten, sowohl mit der Anwendung als auch untereinander<br />

stellt, <strong>NMM</strong> das Nachrichtensystem (engl. Messaging-System) bereit. Dieses<br />

besteht aus zwei Arten von Nachrichten:<br />

• Multimedia-Daten werden in Quellknoten generiert <strong>und</strong> als Buffer über verb<strong>und</strong>ene<br />

Jacks zu benachbarten Knoten bis zu einer Senke geschickt.<br />

• Nachrichten vom Typ composite event (CEvent) sind eine Sammlung von<br />

29


KAPITEL 3. Netzwerk-Integrierte Multimedia Middleware<br />

30<br />

Anwendung<br />

Netzwerk<br />

MP3Read<br />

Node<br />

Netzwerk<br />

MPEGAudio<br />

DecodeNode<br />

Methoden-Aufruf über Interface<br />

Datenfluss der Multimedia-Daten<br />

Netzwerk<br />

Playback<br />

Node<br />

Abbildung 3.2: Flussgraph zum Abspielen einer MP3-Datei. Die Anwendung <strong>und</strong><br />

die Knoten liegen jeweils auf einem separaten Rechner.<br />

Nachrichten vom Typ Event <strong>und</strong> werden dazu verwendet das Knotenverhalten<br />

zu kontrollieren. Dies kann sowohl in-stream geschehen, d.h. die Nachrichten<br />

werden über die Jacks von Knoten zu Knoten geschickt als auch outof-band,<br />

d.h die Nachrichten werden von der Anwendung zum Knoten geschickt.<br />

3.1.4 Verteilte Flussgraphen<br />

In Abschnitt 3.1.2 wurde bereits erwähnt, dass die Verarbeitung von Multimedia-<br />

Daten in <strong>NMM</strong> durch einen gerichteten Graphen bewerkstelligt wird. Die Knoten<br />

<strong>eines</strong> <strong>NMM</strong>-Flussgraphen können dabei beliebig über das Netzwerk verteilt sein,<br />

was in Abbildung 3.2 dargestellt ist. Damit die Knoten jedoch weiterhin miteinander<br />

kommunizieren können, müssen die Events vor Versendung über das Netzwerk<br />

serialisiert <strong>und</strong> auf der Empfängerseite wieder deserialisiert werden. Dies bezeichnet<br />

die Transformation von Objekten in eine Zeichenkette <strong>und</strong> wieder zurück. Liegen<br />

zwei Knoten auf demselben Rechner <strong>und</strong> sind nicht im Netzwerk verteilt, wird<br />

auf Serialisierung verzichtet. Dies ermöglicht den für diese Arbeit geforderten Zugriff<br />

auf im Netzwerk verteilte Ressourcen. Eine ausführliche Beschreibung kann<br />

in [Rep03] nachgelesen werden.<br />

Eine Kontrolle der im Netzwerk verteilten Knoten ist immer noch notwendig um<br />

bei einer entfernten TV-Quelle den gewünschten Kanal zu setzen. Da jedoch ein<br />

einfacher Methodenaufruf über das Netzwerk nicht möglich ist, werden in <strong>NMM</strong><br />

die schon vorgestellten out-of-band-Events verwendet. Um das Versenden der Events<br />

wiederum vor dem Programmierer zu verbergen, stellt <strong>NMM</strong> das System der Interfaces<br />

bereit. Dies ermöglicht dem Programmierer den gewohnten Methodenaufruf<br />

zur Steuerung der Knoten <strong>und</strong> ist zudem typsicherer als das manuelle Versenden<br />

der Events.<br />

Die Methoden, die über ein Interface verfügbar sein sollen, werden mit der Interface<br />

Definition Language [Loh03] festgelegt, woraus mit Hilfe <strong>eines</strong> IDL-Compilers


3.2. MIDDLEWARE-DIENSTE<br />

schließlich zwei Klassen erzeugt werden. Die Interface-Klasse stellt öffentliche<br />

Methoden bereit, die intern das korrespondierende Event erstellen. Die <strong>Implementierung</strong>s-Klasse<br />

dient dem Programmierer als Oberklasse, von der er seine Klasse<br />

ableitet.<br />

Dieser Mechanismus wird verwendet um auf entfernten TV-Karten den gewünschten<br />

Kanal zu setzen. Dazu implementiert jeder Knoten zum Zugriff auf eine TV-<br />

Quelle das ITVCard-Interface, über dessen setChannel(...)-Methode ein<br />

bestimmter Kanal eingestellt werden kann.<br />

Zusätzlich können bei einzelnen Knoten EventListener-Objekte für Events registriert<br />

werden. Somit ist eine Benachrichtigung möglich, wenn das entsprechende<br />

Event den Knoten erreicht oder von diesem versendet wird, worauf eine Anwendung<br />

entsprechend reagieren kann [Loh05]. Dieser Mechanismus wird zur Feststellung<br />

verwendet, ob während <strong>eines</strong> gemeinsamen Zugriffs mehrerer Anwendungen<br />

auf eine TV-Quelle eine Applikation den Kanal wechselt.<br />

3.2 Middleware-Dienste<br />

Für den Zugriff auf lokale <strong>und</strong> verteilte Ressourcen stellt <strong>NMM</strong> verschiedene Dienste<br />

zur Verfügung.<br />

3.2.1 Geräteverwaltung<br />

Die Bereitstellung von verfügbaren <strong>NMM</strong>-Knoten übernimmt die Geräteverwaltung,<br />

die in <strong>NMM</strong> Registry genannt wird. Diese erlaubt das Suchen, Reservieren<br />

<strong>und</strong> Instanziieren von verfügbaren Knoten auf lokalen oder entfernten Rechnern.<br />

Jeder Rechner stellt hierfür durch <strong>NMM</strong> eine serverregistry bereit. Für jeden Knoten<br />

speichert die Registry eine Knotenbeschreibung, die u.a. den Namen des Knotens<br />

sowie dessen bereitgestellte Interfaces enthält. Die Anwendung benutzt einen<br />

clientregistry um Anfragen an den Registry-Server zu schicken. Nach einer erfolgreichen<br />

Anfrage reserviert die Registry die gewünschten Knoten, welche schließlich<br />

entweder auf dem lokalen oder entfernten Rechner erstellt werden.<br />

Mit Hilfe dieser Architektur können auch eigene Dienste eingerichtet <strong>und</strong> somit<br />

ein einfaches Objekt um Netzwerktransparenz erweitert werden. Dazu muss eine<br />

Klasse, welche den Dienst realisiert, ein oder mehrere Interfaces implementieren.<br />

Ein Objekt dieser Klasse wird als <strong>NMM</strong>-Objekt bezeichnet. Dies kann nun als Service<br />

in einer entfernten Registry eingerichtet <strong>und</strong> per Interface abgefragt werden.<br />

Lokal wird eine Verbindung mit Hilfe <strong>eines</strong> Service-Proxys zu der entfernten Registry<br />

hergestellt <strong>und</strong> das entsprechende Interface angefordert um auf das Objekt<br />

zuzugreifen.<br />

Durch dieses Vorgehen wird in der vorliegenden Arbeit ermöglicht auf entfernten<br />

Rechnern einen EPG oder Videorekorder zur Verfügung zu stellen, womit sich eine<br />

Anwendung bei Bedarf verbindet um diese nutzen zu können.<br />

31


KAPITEL 3. Netzwerk-Integrierte Multimedia Middleware<br />

32<br />

Beispiel:<br />

Es folgt nun ein Beispiel, das veranschaulichen soll, wie ein einfaches Objekt um<br />

Netzwerktransparenz erweitert werden kann. Es wird zuerst gezeigt, wie ein Interface<br />

<strong>und</strong> anschließend das Objekt selbst definiert werden. Letzteres wird danach<br />

als Service auf einem entfernten Rechner registriert <strong>und</strong> angesprochen.<br />

Zuerst beschreibt man das Interface IObjekt mittels IDL:<br />

module IObjekt{<br />

void eineMethode();<br />

}<br />

Die durch den IDL-Compiler erzeugte Impl-Klasse IObjektImpl dient als Oberklasse<br />

für die Klasse Objekt:<br />

class Objekt:<br />

public IObjektImpl<br />

{<br />

void eineMethode();<br />

};<br />

Auf der Gegenseite, dem entfernten Rechner, kann ein Objekt dieser Klasse nun<br />

als Service registriert werden:<br />

SReferenceManager::registerService("objekt_service",<br />

*Objekt);<br />

Die Verbindung zu der entfernten Registry des Rechners ’host’ wird nun mittels<br />

der ServiceProxy-Klasse hergestellt <strong>und</strong> das Interface IObjekt angefordert:<br />

ServiceProxy proxy;<br />

<strong>NMM</strong>Object *o = proxy.connectTo("host","objekt_service");<br />

IObjekt *io = o->getParentObject()<br />

->getInterface();<br />

Nun kann die Methode des Interface aufgerufen werden:<br />

io->eineMethode();<br />

3.2.2 Session-Sharing<br />

Ein in dieser Arbeit gefordertes Szenario ist der gleichzeitige Zugriff von Anwendungen<br />

auf eine TV-Quelle. Dies erfordert einen Mechanismus in <strong>NMM</strong>, der die<br />

gemeinsame Verwendung von Knoten durch mehrere Flussgraphen erlaubt. Solch<br />

ein Dienst wird durch das Session-Sharing bereitgestellt [LRS03]. Eine Session<br />

ist eine Abstraktion für einen Flussgraphen mit bereits angeforderten <strong>und</strong> verb<strong>und</strong>enen<br />

Knoten. Innerhalb dieses Flussgraphen ist es möglich Knoten freizugeben,<br />

damit andere Flussgraphen diese mitverwenden können (zu sharen). Bei Verwendung<br />

<strong>eines</strong> Knotens durch einen einzigen Flussgraphen wird von einer exklusiven


(a) Laufende Session<br />

(b) Gesharte laufende Session<br />

Anfrage<br />

DVDRead<br />

Node<br />

DVDRead<br />

Node<br />

"audio0"<br />

MPEG<br />

Demux<br />

Node<br />

MPEG<br />

Demux<br />

Node<br />

"video"<br />

"audio1"<br />

Audio<br />

Decode<br />

Node<br />

Video<br />

Decode<br />

Node<br />

Audio<br />

Decode<br />

Node<br />

localhost<br />

Playback<br />

Node<br />

Display<br />

Node<br />

Playback<br />

Node<br />

localhost<br />

DVDRead<br />

DVDRead Node<br />

Node<br />

MPEG<br />

Demux<br />

Node<br />

3.2. MIDDLEWARE-DIENSTE<br />

"audio0"<br />

"video"<br />

Laufende Session "audio1"<br />

Audio<br />

Decode<br />

Node<br />

Video<br />

Decode<br />

Node<br />

Audio<br />

Decode<br />

Node<br />

Playback<br />

Node<br />

Display<br />

Node<br />

Playback<br />

Node<br />

Abbildung 3.3:<br />

Beispiel zur Funktionsweise des Session-Sharing. Die Anfrage nach einer unterschiedlichen<br />

Audiospur einer laufenden Session wird durch den Session-Sharing-<br />

Algorithmus auf die Verwendung <strong>eines</strong> Teilgraphen abgebildet. (Abbildung nach<br />

[LRS03])<br />

Verwendung gesprochen. Das Mitverwenden <strong>eines</strong> Knotens durch einen zweiten<br />

Flussgrahen wird als gesharte Verwendung bezeichnet. Dies erfordert für jeden<br />

Knoten <strong>eines</strong> Flussgraphen die Angabe einer Anforderungs-Richtlinie um festzulegen,<br />

welche Knoten geshart verwendet werden dürfen. Folgende Modi sind möglich:<br />

Shared Fordere explizit einen schon erstellten Knoten zur gesharten Verwendung<br />

an.<br />

Exclusive Fordere den Knoten zur exklusiven Verwendung an.<br />

Exclusive or Shared Fordere einen Knoten zur exklusiven Verwendung an. Schlägt<br />

dies fehl, versuche einen Knoten zur gesharten Verwendung anzufordern.<br />

Shared or Exclusive Fordere zuerst einen Knoten zur gesharten Verwendung an.<br />

Schlägt dies fehl, fordere einen Knoten zur exklusiven Verwendung an.<br />

Exclusive then Shared Fordere einen Knoten zur exklusiven Verwendung an <strong>und</strong><br />

gib ihn bei Erfolg für gesharte Verwendungen frei.<br />

Shared or Exclusive then Shared Fordere zuerst einen Knoten zur gesharten Verwendung<br />

an. Ist dies erfolglos, fordere den Knoten zur exklusiven Verwendung<br />

an <strong>und</strong> gib ihn bei Erfolg für gesharte Verwendungen frei .<br />

Exclusive then Shared or Shared Fordere zuerst einen Knoten zur exklusiven Verwendung<br />

an <strong>und</strong> gib ihn dann für gesharte Verwendungen frei. Ist dies erfolglos,<br />

fordere einen Knoten zur gesharten Verwendung an.<br />

Abbildung 3.3 zeigt die Funktionsweise des Session-Sharing anhand <strong>eines</strong> Flussgraphen<br />

zum Lesen einer DVD. Hier soll auf unterschiedliche Audiospuren der<br />

gleichen DVD zugegriffen werden.<br />

Teil a) der Abbildung zeigt die dazu notwendigen Graphen. Als laufende Session<br />

ist der komplette Graph zur Wiedergabe der Audio- <strong>und</strong> Video-Daten der DVD<br />

zu sehen. Dieser wurde bereits angefordert <strong>und</strong> gestartet. Der untere Graph soll<br />

33


KAPITEL 3. Netzwerk-Integrierte Multimedia Middleware<br />

34<br />

Abbildung 3.4: Die Abbildung zeigt zum einen die Hardware der Multimedia-Box<br />

(links, Bildquelle: [<strong>NMM</strong>]), einen Desktop-PC mit angeschlossenem Fernsehgerät<br />

<strong>und</strong> zum anderen das Hauptmenu der Anwendung (rechts).<br />

lediglich Audio-Daten lesen <strong>und</strong> wiedergeben. Die grau unterlegten Knoten sind<br />

jeweils zur gesharten Verwendung freigegeben.<br />

Bei der Anforderung des zweiten Graphen versucht der Session-Sharing-Algorithmus<br />

nun einen größtmöglichen gemeinsamen Teilgraphen zu finden, indem er die<br />

neue Anfrage auf die schon laufende Session abbildet.<br />

Abbildung 3.3 b) zeigt das Resultat des Session-Sharing-Algorithmus. Der DVD-<br />

ReadNode <strong>und</strong> der MPEGDemuxNode werden von beiden Graphen benutzt. Die<br />

restlichen Knoten werden von den entsprechenden Graphen exklusiv verwendet.<br />

Der neue Graph hat nun Zugriff auf eine andere Audiospur <strong>und</strong> kann diese wiedergeben.<br />

3.3 Die Multimedia-Box<br />

Die Multimedia-Box (MMBox) ist ein Home Entertainment System, das im Rahmen<br />

<strong>eines</strong> Fortgeschrittenen-Praktikums [BCE + 02] am Lehrstuhl für Computergraphik<br />

der Universität des Saarlandes entwickelt <strong>und</strong> in [Kle03] weitergeführt<br />

wurde.<br />

3.3.1 Hardware<br />

Die Hardware der Multimedia-Box (siehe Abbildung 3.4) besteht aus handelsüblichen<br />

PC-Komponenten, welche folgenden Kriterien genügen sollte:<br />

• Das Gehäuse des PCs besitzt ein ansprechendes Äußeres <strong>und</strong> hat einen niedrigen<br />

Geräuschpegel, damit sich die Multimedia-Box nahtlos in ein Wohnzimmer-Ambiente<br />

einfügt.<br />

• Ein normaler Fernseher dient als Ausgabe-Gerät.


3.3. DIE MULTIMEDIA-BOX<br />

• Zur einfachen Bedienung wird eine Infrarot-Fernbedienung verwendet, deren<br />

Signale über einen integrierten Infrarot-Empfänger empfangen werden.<br />

• Die Multimedia-Box besitzt einen Netzwerkanschluss um auf Netzwerkressourcen<br />

zugreifen oder über das Netzwerk angesprochen werden zu können.<br />

3.3.2 Anwendungs-Framework<br />

Bei der Entwicklung der Multimedia-Box-Anwendung wurde das Hauptaugenmerk<br />

darauf gelegt, dass sie leicht konfiguriert <strong>und</strong> modifiziert werden kann. Die<br />

Anwendung hat daher eine Plugin-Struktur <strong>und</strong> kann mit Hilfe <strong>eines</strong> XML-Dokuments<br />

beliebig zusammengestellt werden. Dies beschreibt zum einen die Menüstruktur<br />

(Menü-Zustände) zum anderen die Funktionalitäten (Aktions-Zustände),<br />

wie z.B. Live TV oder DVD. Jeder dieser Zustände muss dabei unterschiedlich<br />

auf Benutzereingaben reagieren. Zur Realisierung dieses Verhaltens wurde das<br />

Zustand-Entwurfsmuster [GHJV95] angewandt. Darin wird beschrieben, wie ein<br />

Objekt sein Verhalten ändern kann, wenn sein Zustand wechselt.<br />

Der XML-Parser der Multimedia-Box liest beim Start das oben genannte XML-<br />

Dokument ein, erstellt auf Gr<strong>und</strong> der darin enthaltenen Informationen u.a. die Menüstruktur<br />

der Anwendung <strong>und</strong> legt die einzelnen Instanzen der Zustände an.<br />

Zur Konfiguration der einzelnen Zustände greift die Multimedia-Box auf eine Datei<br />

zu, die im $HOME-Verzeichnis des Benutzers abgelegt ist. Diese trägt den Namen<br />

.mmboxrc <strong>und</strong> wird beim Starten der Anwendung ausgelesen. Sie enthält Variablen<br />

mit zugewiesenen Werten, worauf die entsprechenden Zustände zugreifen <strong>und</strong><br />

sich konfigurieren können. In der Konfigurations-Datei kann u.a. der rootpath<br />

angegeben werden, wodurch ein Verzeichnis festgelegt wird, in das die Multimedia-<br />

Box Dateien schreiben oder daraus lesen kann. Für die im Laufe dieser Arbeit entwickelten<br />

Zustände wurden neue Variablen eingeführt, die im Anhang A aufgelistet<br />

sind.<br />

Zur Anzeige der graphischen Bedienelemente der Multimedia-Box wird der OSD-<br />

ManagerNode verwendet. Dieser ist für die Anzeige von Widgets oder Fortschrittsanzeigen<br />

verantwortlich. Als Widget bezeichnet man in der Multimedia-<br />

Box graphische Interaktions-Objekte, die auf einem Display angezeigt werden können<br />

<strong>und</strong> gegebenenfalls auf Benutzereingaben reagieren. Neben Widgets zur Fortschrittsanzeige,<br />

Anzeige <strong>eines</strong> Bildes etc. existiert das TextView-Widget, das der<br />

Darstellung von Textzeilen dient, zwischen denen der Benutzer navigieren <strong>und</strong> selektieren<br />

kann. Durch bereitgestellte Decorator können diese weiterhin u.a. mit einem<br />

Rahmen oder Scrollbalken versehen werden. Widgets <strong>und</strong> Decorator können<br />

zu komplexen Anzeige-Elementen, Widgetunits genannt, zusammengefasst werden.<br />

Die Funktionsweise des OSDManagers sowie Details zu Anzeige-Elementen<br />

der Multimedia-Box können in [Kle03] nachgelesen werden. Im Laufe dieser Arbeit<br />

wurden weitere Widgetunits zur Anzeige <strong>und</strong> Eingabe von Text erstellt, wie in<br />

Abschnitt 4.5 vorgestellt.<br />

Da manche Zustände Audio- bzw. Video-Daten wiedergeben, werden die Knoten<br />

35


KAPITEL 3. Netzwerk-Integrierte Multimedia Middleware<br />

36<br />

Benutzereingabe<br />

Applikation<br />

DVD-Zustand<br />

Menü-Zustand<br />

Globale Knoten<br />

OSDManager<br />

Node XDisplay<br />

Node<br />

Playback<br />

Node<br />

Abbildung 3.5: Das Anwendungs-Framework der Multimedia-Box. Der aktive Zustand<br />

(hier: der DVD-Zustand) hat den Eingabefokus <strong>und</strong> ist mit den globalen Senken<br />

der Multimedia-Box zur Ausgabe der Audio- <strong>und</strong> Video-Daten verb<strong>und</strong>en.<br />

(Abbildung nach [Kle03])<br />

OSDManagerNode, XDisplayNode <strong>und</strong> PlaybackNode global zur Verfügung<br />

gestellt. Jeder Zustand kann jederzeit durch einen anderen ersetzt werden,<br />

indem der vorige von den globalen Knoten getrennt wird <strong>und</strong> diese mit dem neuen<br />

verb<strong>und</strong>en werden.<br />

Das MMBox-Framework ist anhand des DVD-Zustands in Abbildung 3.5 dargestellt.<br />

Dieser legt alle Knoten an, die zum Auslesen der DVD <strong>und</strong> zum Verarbeiten<br />

der Daten nötig sind. Zur Ausgabe der Daten wird der Teilgraph mit den globalen<br />

Senken der MMBox verb<strong>und</strong>en. Da nicht jeder Zustand alle globalen Knoten<br />

benötigt, ist es möglich, dass mehrere Zustände gleichzeitig aktiv sind. Dies erlaubt<br />

das Abspielen einer DVD <strong>und</strong> gleichzeitiges Navigieren im Hauptmenü der<br />

Anwendung. Dazu werden, wie in Abbildung 3.6 zu sehen ist, die entsprechenden<br />

Knoten des DVD-Zustandes mit den globalen Senken verb<strong>und</strong>en, damit die Audio<strong>und</strong><br />

Video-Daten abgespielt werden können. Der Menu-Zustand besitzt den Eingabefokus,<br />

wodurch in den Menüs navigiert werden kann. Zur Unterstützung dieser<br />

Funktionalität besitzt der OSDManagerNode zwei Eingänge für Bild-Daten, die<br />

übereinander gelegt <strong>und</strong> schließlich auf einem Bildschirm angezeigt werden können.<br />

Vor Beginn dieser Arbeit stellte die Multimedia-Box bereits jeweils einen Zustand<br />

für Live TV <strong>und</strong> den Videorekorder zur Verfügung. Der LiveTV-Zustand unterstützte<br />

den Zugriff auf eine lokale oder im Netzwerk verteilte TV-Karte. Dies konnte<br />

entweder eine digitale oder analoge TV-Karte sein. Mangels <strong>eines</strong> EPG konnten<br />

keine entsprechenden Informationen angezeigt werden. Der LiveTV-Zustand enthielt<br />

jedoch bereits die Möglichkeit des Timeshifting, das Pausieren des momentanen<br />

TV-Programms, was in dieser Arbeit erhalten blieb. Die Funktionalität des<br />

Timeshifting wird in <strong>NMM</strong> durch den MPEGTimeShiftingNode bereitgestellt.<br />

Der Videorekorder, der in der Multimedia-Box durch den TVTimer-Zustand reali-


Benutzereingabe<br />

Applikation<br />

Menü-Zustand<br />

DVD-Zustand<br />

3.3. DIE MULTIMEDIA-BOX<br />

Globale Knoten<br />

OSDManager<br />

Node XDisplay<br />

Node<br />

Playback<br />

Node<br />

Abbildung 3.6: MMBox-Anwendung mit mehreren aktiven Zuständen. Ein<br />

Zustand hat immer den Eingabefokus, hier der Menü-Zustand. (Abbildung<br />

nach [Kle03])<br />

siert war, unterstützte zuvor ebenfalls nur eine lokale oder im Netzwerk verteilte<br />

TV-Karte, welche parallel von dem LiveTV-Zustand verwendet wurde. Das bedeutete,<br />

dass die TV-Karte während einer Aufnahme dem LiveTV-Zustand nicht mehr<br />

zur Verfügung stand. Ein gleichzeitiges Aufnehmen <strong>und</strong> Betrachten einer Sendung<br />

war daher nicht möglich. Weiterhin fehlten dem Videorekorder eine manuelle Konfliktauflösung<br />

sowie mangels EPG die Möglichkeit der Anzeige entsprechender Informationen<br />

zu Aufnahmen. Für die eigentliche Aufzeichnung einer Sendung existierte<br />

der DVBRecorder-Zustand, welcher zum frühzeitigen Abbrechen der Aufnahme<br />

mit Hilfe des Tasklist-Zustandes beendet werden musste.<br />

Auch auf dem momentanen Entwicklungs-Stand bietet der Tasklist-Zustand eine<br />

Übersicht über alle momentan aktiven Zustände der Multimedia-Box ggf. in sie zu<br />

wechseln oder sie zu beenden. Weiterhin besitzt er die Möglichkeit sich mit Zuständen<br />

zu verbinden, die in anderen Multimedia-Boxen innerhalb des Netzwerks<br />

aktiv sind.<br />

Die meisten Fernbedienungen besitzen heutzutage farbige Funktionstasten (rot,<br />

grün, gelb <strong>und</strong> blau) zum Aufrufen besonderer Funktionalitäten. Zur Unterstützung<br />

dieser Funktionstasten bietet die Multimedia-Box die ColorBar an. Sie blendet<br />

die korrespondierenden Farbflächen am unteren Bildschirmrand ein, sobald ihnen<br />

ein kurzer erklärender Text zugewiesen wurde. Die zugeordneten Funktionalitäten<br />

können innerhalb <strong>eines</strong> Zustandes dynamisch verändert werden <strong>und</strong> so auf die<br />

aktuelle Anzeige abgestimmte Funktionen bereitstellen.<br />

37


KAPITEL 3. Netzwerk-Integrierte Multimedia Middleware<br />

38<br />

3.4 Zusammenfassung<br />

In diesem Kapitel wurde die Netzwerk-Integrierte Multimedia Middleware (<strong>NMM</strong>)<br />

vorgestellt <strong>und</strong> deren gr<strong>und</strong>legenden Konzepte sowie die Unterstützung des Zugriffs<br />

auf im Netzwerk verteilte Ressourcen betrachtet. Es folgte die Erläuterung<br />

der Geräteverwaltung <strong>und</strong> des Session-Sharing-Dienstes, der es erlaubt, dass Knoten<br />

von mehreren Flussgraphen gemeinsam verwendet werden. Zum Schluss wurde<br />

die Multimedia-Box-Anwendung vorgestellt, die auf der Gr<strong>und</strong>lage von <strong>NMM</strong><br />

entwickelt wurde <strong>und</strong> im Laufe dieser Arbeit erweitert wird. Dies beinhaltete einen<br />

Statusbericht des LiveTV- <strong>und</strong> TVTimer-Zustandes vor den Erweiterungen.


Kapitel 4<br />

Realisierung einer elektronischen<br />

Programmzeitschrift<br />

In diesem Kapitel wird die Realisierung einer elektronischen Programmzeitschrift<br />

(Electronic Programme Guide – EPG) zur Integration in die Multimedia-Box beschrieben.<br />

Ein EPG ist die digitale Form einer gedruckten Programmzeitschrift, die<br />

Informationen zu einzelnen Sendungen bereitstellt [Wikb].<br />

Zu Beginn wird in Abschnitt 4.1 ein Überblick über die Anforderungen an den<br />

EPG <strong>und</strong> die gesteckten Ziele gegeben. Zur Beschaffung von EPG-Daten existiert<br />

eine Vielzahl von Quellen, die mit unterschiedlichen Mechanismen angesprochen<br />

werden. Die verwendeten Quellen <strong>und</strong> das Einbinden derer wird in Abschnitt 4.2<br />

vorgestellt. Weiterhin sollen die so gesammelten Daten auf der Festplatte abgespeichert<br />

<strong>und</strong> zu einer späteren Verwendung bereitgestellt werden. Das Speichern <strong>und</strong><br />

Abfragen der Informationen wird in Abschnitt 4.3 erläutert.<br />

Der EPG soll die besondere Funktionalität besitzen bei einer Abfrage fehlende<br />

Informationen festzustellen <strong>und</strong> diese bei anderen im Netzwerk verteilten EPGs zu<br />

erfragen. Die Vorgehensweise der realisierten Peer-to-Peer-Funktionalität wird in<br />

Abschnitt 4.4 erklärt.<br />

Zudem werden im Abschnitt 4.5 die Multimedia-Box-Zustände beschrieben, die<br />

zum Zugriff auf die EPG-Daten <strong>und</strong> zu deren Anzeige erstellt wurden.<br />

4.1 Übersicht<br />

Mit den Informationen einer elektronischen Programmzeitschrift lässt sich ein Programmüberblick<br />

über TV-Sendungen realisieren, den die gedruckten TV-Zeitschriften<br />

nicht ermöglichen.<br />

Die EPG-Informationen können für verschiedene Zwecke genutzt werden. Sie dienen<br />

zur Anzeige bei Live TV, damit der Benutzer zu jeder Zeit informiert ist, welche<br />

Sendung er zur Zeit verfolgt <strong>und</strong> welche sich anschließt. Der Benutzer kann<br />

39


KAPITEL 4. Realisierung einer elektronischen Programmzeitschrift<br />

40<br />

Anwendung Anwendung<br />

EPG<br />

Netzwerk<br />

Internet<br />

EPG-Quelle<br />

Abbildung 4.1: Zwei Anwendungen sammeln selbst keine EPG-Informationen,<br />

sondern greifen über das Netzwerk auf einen zentralen EPG zu, der seine Daten<br />

von Quelle aus dem Internet bezieht.<br />

sich aber auch einen Überblick über das Tagesprogramm <strong>eines</strong> bestimmten Senders<br />

anzeigen lassen bzw. es nach bestimmten Kriterien durchsuchen. Die notwendigen<br />

Daten müssen zuvor bei einem EPG erfragt werden.<br />

Der EPG soll über das Netzwerk angesprochen werden können. Dies ermöglicht<br />

die Realisierung <strong>eines</strong> <strong>Szenarios</strong>, in dem der EPG als zentraler Server zur Verfügung<br />

gestellt wird, mit dem sich Anwendungen verbinden <strong>und</strong> Daten erfragen<br />

lassen. Dies ist in Abbildung 4.1 graphisch dargestellt. Die Anwendungen sammeln<br />

selbst keine Daten, sondern erfragen diese ausschließlich von dem zentralen<br />

EPG. Dieser bezieht seine Informationen von einer Quelle aus dem Internet.<br />

Als Quelle zur Beschaffung von EPG-Informationen können das Internet, das digitale<br />

sowie das analoge Fernsehen dienen. Zur Erweiterung des EPG um Abfragemöglichkeiten<br />

neuer Quellen soll eine Plugin-Struktur realisiert werden, die<br />

das Einbinden neuer EPG-Plugins erleichtert. Die vielen unterschiedlichen Quellen<br />

stellen Daten in unterschiedlicher Qualität bereit. So sind bei einem Anbieter<br />

die Informationen umfangreicher, bei einem anderen die Start- <strong>und</strong> Endzeiten der<br />

Sendungen genauer. Damit stets auf optimale Daten zugegriffen werden kann, soll<br />

der EPG das Sammeln von mehreren Quellen unterstützen. Als EPG-Quellen werden<br />

in dieser Arbeit die XMLTV-Programme zum Zugriff auf Daten im Internet,<br />

nxtvepg zum Auslesen des analogen Fernsehsignals sowie die EPG-Informationen<br />

von DVB verwendet.<br />

Damit die Daten permanent verfügbar sind <strong>und</strong> schnell abgerufen werden können<br />

sind sie auf der Festplatte zu speichern. So kann bei einem Neustart der Applikation<br />

auf schon gesammelte Daten direkt zugegriffen werden. Der Vorteil einer solch<br />

schnellen Abfrage von angeforderten Informationen verlangt eine effiziente Datenhaltung.<br />

Weiterhin muss bei Verwendung mehrerer Quellen entschieden werden,<br />

welche Informationen gespeichert <strong>und</strong> welche verworfen werden. Da die EPG-


Quellen Daten in unterschiedlicher Qualität liefern, erfordert dies eine Regelung,<br />

die festlegt, von welchen Quellen Daten bevorzugt werden sollen. Folglich werden<br />

den EPG-Quellen Prioritäten zugewiesen, d.h. neue Daten können verworfen<br />

werden, falls die vorhandenen Informationen zu einer Sendung von einer höher<br />

priorisierten Quelle stammen als die Neuen oder die vorhandenen EPG-Daten ersetzt<br />

werden. Die Vergabe der Prioritäten wird in Abschnitt 4.3 besprochen.<br />

Ein weiteres Problem bei dieser Vorgehensweise ist die Erkennung von Informationen<br />

zu demselben Sender bei Verwendung unterschiedlicher Quellen, da die Sender<br />

mitunter nicht einheitlich bezeichnet werden. So kann z.B. eine Quelle Informationen<br />

für den Sender ’Pro 7’, eine weitere Daten für ’Pro Sieben’ bereitstellen. Für<br />

einen bestimmten Sender existieren lediglich unterschiedliche Schreibweisen. Zudem<br />

können auch verschiedene Namen für einen Sender existieren, so wird z.B. die<br />

ARD manchmal auch mit ’Das Erste’ bezeichnet. Der EPG muss feststellen können,<br />

dass beide Schreibweisen denselben Sender bezeichnen. Dies erfolgt durch die<br />

Angabe von Aliasen, wodurch alternative Schreibweisen <strong>eines</strong> Senders bestimmt<br />

werden. Das Festlegen von Aliasen wird in Abschnitt 4.3.1 beschrieben.<br />

Eine einfache Datenhaltung <strong>und</strong> leichte Zuordnung der Programm-Informationen<br />

zu Kanälen erfordert die eindeutige Identifizierung <strong>eines</strong> Kanals, wozu jeder eine<br />

individuelle Kanal-ID besitzt. Die ID besteht aus einer Zeichenkette, welche<br />

von EPG-Quellen festgelegt wird. Die Quellen verwenden selbst Kanal-ID’s um<br />

Sender zu identifizieren, welche innerhalb des EPGs wiederverwendet werden. Da<br />

diese jedoch unterschiedliche IDs für die gleichen Kanäle benutzen, muss eine Regelung<br />

für die zu verwendende ID getroffen werden. Weil der EPG nicht erkennen<br />

kann, für welche Kanäle die Quelle Daten bereitstellt, bevor diese nicht entsprechende<br />

Informationen gesendet hat, wird intern einem Kanal die ID von der Quelle<br />

zugewiesen, die als erste Daten für den entsprechenden Sender liefert. Außer der<br />

ID enthalten die Kanal-Informationen auch den Sendernamen, welcher ebenfalls<br />

dem EPG hinzugefügt wird. Eine Gefahr besteht darin, dass verschiedene EPG-<br />

Quellen für unterschiedliche Sender die gleiche ID verwenden. Die Programme<br />

des XMLTV-Pakets vergeben IDs in Form einer URL (z.B. ard.de für den Sender<br />

ARD), bei DVB sind die Sender durch eine Zahl, Service-ID genannt, gekennzeichnet,<br />

bei dem Programm nxtvepg besteht die ID aus den Buchstaben ’CNI’,<br />

gefolgt von einer Zahl, welche die ID des Senders im TV-Strom repräsentiert. Daher<br />

ist die Wahrscheinlichkeit, dass zwei Sender durch die gleiche ID gekennzeichnet<br />

werden, sehr gering, was für die in dieser Arbeit gesteckten Ziele ausreichend<br />

ist.<br />

Weitere Unterschiede der EPG-Quellen sind zum einen die Anzahl der Sender<br />

<strong>und</strong> zum anderen die Zeiträume, für die Informationen bereitgestellt werden. In<br />

manchen Szenarien kann ein EPG jedoch auf Gr<strong>und</strong> technischer Beschränkungen<br />

nicht alle Quellen verwenden, wodurch Informationen für verschiedene Sender<br />

bzw. Tage nicht zur Verfügung stehen können. Diese Lücken in der Datenhaltung<br />

sollen möglichst geschlossen werden. Zu diesem Zweck soll der EPG die<br />

Funktionalität unterstützen fehlende Daten zu erkennen <strong>und</strong> bei verteilt laufenden<br />

EPG-Anwendungen zu erfragen. Dazu müssen die Ansprache des EPG über das<br />

Netzwerk <strong>und</strong> die Serialisierung der Daten gewährleistet sein. Dieser unterstützt<br />

ein Peer-to-Peer-Konzept, das eventuell vorhandene Lücken in den Informationen<br />

4.1. ÜBERSICHT<br />

41


KAPITEL 4. Realisierung einer elektronischen Programmzeitschrift<br />

42<br />

EPG-Quelle<br />

EPG-Quelle<br />

Internet<br />

Anwendung<br />

mit lokalem EPG<br />

EPG<br />

EPG<br />

Netzwerk<br />

Netzwerk<br />

EPG<br />

mit lokaler<br />

analoger TV-Karte<br />

Zugriff auf EPG-Quellen<br />

Zugriff auf EPG<br />

digitale<br />

TV-Karte<br />

Abbildung 4.2: Die Anwendung sammelt Daten für ihren lokalen EPG von einer<br />

digitalen TV-Karte. Bei fehlenden Informationen werden im Netzwerk verteilte<br />

EPGs abgefragt. Diese beziehen Daten entweder aus dem Internet oder von einer<br />

analogen TV-Karte.<br />

schließen soll. Dazu zählt auch das Erfragen von Daten zu TV-Sendern, die nicht<br />

durch die Quellen des lokalen EPG abgedeckt sind. Dies erfordert das Erfragen<br />

nach verfügbaren Sender-Informationen bei entfernten EPGs.<br />

Abbildung 4.2 zeigt ein Szenario für einen verteilten EPG. Der EPG der Anwendung<br />

selbst sammelt Daten von einer digitalen TV-Karte, die im Netzwerk verfügbar<br />

ist. Die verteilten EPGs beziehen entweder Daten aus dem Internet oder<br />

erhalten sie von einer analogen TV-Karte. Diese werden von dem lokalen EPG der<br />

Anwendung durch einen Peer-to-Peer-Zugriff abgefragt. Er spricht dafür zwei verteilte<br />

EPGs direkt an, wobei einer von ihnen eine Anfrage zusätzlich weiterleitet.<br />

Erfragte Daten werden von allen Rechnern an die Anwendung zurückgegeben. Der<br />

lokale EPG fügt die neuen Informationen seinen bereits vorhandenen hinzu.<br />

Realisierung<br />

Zur Realisierung wurde der EPG in verschiedene Klassen aufgeteilt. Das <strong>Design</strong><br />

ist inspiriert von dem Entwurfsmuster Visitor [GHJV95]. Eine Anfrage oder ein<br />

Ergebnis wird von einzelnen, zwischengeschalteten Objekten geprüft <strong>und</strong> weitergeleitet.<br />

Den EPG betreffend werden die Abfrage-Ergebnisse von einem Objekt<br />

auf Vollständigkeit geprüft um ggf. im Netzwerk verteilte EPGs nach fehlenden<br />

Daten zu fragen. Diese Funktionalität wird in Abschnitt 4.4 vorgestellt.<br />

Die Anwendung kommuniziert ausschließlich mit der TVGuide-Klasse über de-


Abbildung 4.3: Die Klasse TVGuide implementiert die Interfaces ITVGuide<br />

<strong>und</strong> ITVGuideEvents.<br />

ren ITVGuide-Interface, wodurch die geforderte Ansprache des EPG über das<br />

Netzwerk möglich ist. Abbildung 4.3 zeigt die zugehörigen Klassendiagramme.<br />

Die Verarbeitungs-Klassen sowie deren Zusammenhänge, die in Abbildung 4.4 zu<br />

sehen sind, heißen:<br />

TVGuide ist die Haupt-Klasse, über die alle Anfragen laufen, die Objekte der<br />

nachfolgenden Klassen erstellt <strong>und</strong> alle verfügbaren EPG-Plugins verwaltet.<br />

TVGuideDatamanagement ist die Datenhaltungs-Klasse, die für das Suchen<br />

<strong>und</strong> Einsortieren von Daten in die Verzeichnisstruktur verantwortlich ist.<br />

TVGuidePeerConnector Diese Klasse prüft ggf. Abfrageergebnisse aus der<br />

lokalen Datenbank auf Vollständigkeit <strong>und</strong> stellt Verbindungen zu EPG’s im<br />

Netzwerk her um bei Bedarf fehlende Informationen zu erfragen.<br />

TVGuideConfigurator Diese Klasse liest Konfigurations-Parameter aus einer<br />

Datei oder von der Kommandozeile <strong>und</strong> nimmt auf deren Basis die Einstellungen<br />

des EPGs vor.<br />

Eine graphische Benutzeroberfläche zur Anzeige von EPG-Daten soll nach Möglichkeit<br />

benachrichtigt werden, wenn der EPG neue Informationen zur Verfügung<br />

stellt. Da, wie in Abschnitt 4.3 erklärt, eine Entscheidung über das Hinzufügen<br />

neuer Informationen getroffen wird, sollte die Anzeige nur aktualisiert werden,<br />

wenn solche auch wirklich vorhanden sind. Zu diesem Zweck implementiert die<br />

4.1. ÜBERSICHT<br />

43


KAPITEL 4. Realisierung einer elektronischen Programmzeitschrift<br />

44<br />

Abbildung 4.4: Dieses Diagramm zeigt die Beziehungen der Klassen des EPG<br />

zueinander.<br />

TVGuide-Klasse das ITVGuideEvent-Interface. Durch das Event-System von<br />

<strong>NMM</strong> kann eine Anwendung bei Bedarf einen EventListener (siehe Abschnitt 3.1.4)<br />

bei dem Objekt der TVGuide-Klasse für die entsprechenden Events registrieren<br />

<strong>und</strong> auf diese geeignet reagieren.<br />

Konfiguration des EPG<br />

Ein Objekt der TVGuide-Klasse wird unter Verwendung <strong>eines</strong> von zwei Konstruktoren<br />

erstellt:<br />

TVGuide(<strong>NMM</strong>Application *app, <strong>NMM</strong>Config* conf);<br />

TVGuide(<strong>NMM</strong>Application *app, int argc, char **argv);<br />

Beide Konstruktoren erhalten einen Zeiger auf eine <strong>NMM</strong>Application. Er bietet<br />

EPG-Plugins die Möglichkeit, Knoten von der Geräteverwaltung von <strong>NMM</strong> anzufordern,<br />

wovon in dieser Arbeit das DVBEPG-Plugin profitiert. So ist es diesem<br />

möglich, Knoten für einen Zugriff auf digitale TV-Karten anzufordern. Die restlichen<br />

Parameter dienen der Konfiguration des EPG. Bei Verwendung des ersten<br />

Konstruktors muss ein Zeiger auf ein Objekt der Klasse <strong>NMM</strong>Config übergeben<br />

werden. Diese Klasse liest Konfigurations-Variablen <strong>und</strong> die gesetzten Werte aus<br />

einer Datei <strong>und</strong> können anschließend von dieser erfragt werden. Konfigurations-<br />

Variablen für den EPG sind in Anhang A aufgelistet. Der zweite Konstruktor dient<br />

der Konfiguration des EPG über Kommandozeilen-Parameter. Das Feld argv enthält<br />

die komplette Kommandozeile, welche von dem EPG geparst <strong>und</strong> ausgewertet<br />

wird. Der EPG unterstützt die folgenden Kommandozeilen-Parameter:<br />

-d legt das Verzeichnis fest, in dem EPG-Daten abgespeichert<br />

werden sollen.<br />

-s legt fest, welches Plugin zum Sammeln von EPG-Informationen<br />

verwendet werden soll. Mehrere Plugins können durch weitere mehrfache<br />

Verwendung von -s ausgewählt werden.


4.2. QUELLEN FÜR EPG-INFORMATIONEN<br />

-e : Legt einen Rechner fest, zu dem sich der EPG verbinden<br />

kann, um fehlende Daten zu erfragen. Diese Option kann mehrfach angegeben<br />

werden.<br />

Die verwendeten Quellen sowie das Einbinden derer in den EPG werden nun im<br />

Folgenden beschrieben.<br />

4.2 Quellen für EPG-Informationen<br />

Zur Bereitstellung im EPG müssen die Informationen zuerst gesammelt werden.<br />

Dazu existieren mehrere Quellen, aus denen solche Daten bezogen werden können.<br />

Damit diese Quellen leicht eingeb<strong>und</strong>en <strong>und</strong> der EPG auch zukünftig einfach um<br />

neue ergänzt werden kann, wurde eine Plugin-Struktur realisiert.<br />

4.2.1 Integration verfügbarer EPG-Quellen<br />

Zur Realisierung der Plugin-Struktur wird eine Klasse benötigt, bei der sich die<br />

EPG-Plugins selbst registrieren <strong>und</strong> schließlich dort verwaltet werden. Zu Beginn<br />

müssen die vorhandenen EPG-Plugins erst ermittelt werden. Dies geschieht<br />

über das dynamische Laden der Bibliothek <strong>eines</strong> Plugins. Eine Bibliothek ist eine<br />

Sammlung von Routinen, Programmteilen oder Programmen, die häufig gebraucht<br />

werden <strong>und</strong> vom Hauptprogramm aus dieser abgerufen werden können (Quelle:<br />

[ITW]). Dazu existiert in <strong>NMM</strong> das dev-lib-Verzeichnis, welches alle zur<br />

Verfügung stehenden Bibliotheken enthält, die dynamisch geladen werden können.<br />

Das Laden der Plugins erfolgt dann mit Hilfe des PluginManagers [Rep03].<br />

Die Funktion<br />

void PluginManager::loadExternalPlugins(string directory);<br />

lädt alle in dem Verzeichnis dev-lib/ enthaltenen Bibliotheken.<br />

Dies wird mit folgendem Auszug aus dem Quellcode der TVGuide-Klasse<br />

realisiert:<br />

/ ∗<br />

Z u e r s t<br />

werden<br />

∗ /<br />

muss das I n t e r f a c e des PluginManagers a n g e f o d e r t<br />

IPluginManager_var<br />

pm(SPluginManager::getInstance()<br />

.getCheckedInterface());<br />

/ ∗<br />

Dann wird der Pfad des dev−l i b −V e r z e i c h n i s s e s e r m i t t e l t<br />

∗ /<br />

string pluginDir = get<strong>NMM</strong>PluginDir() + "/tvguide";<br />

45


KAPITEL 4. Realisierung einer elektronischen Programmzeitschrift<br />

46<br />

Abbildung 4.5: Die Klasse TVGuidePluginManager listet alle verfügbaren<br />

EPG-Plugins.<br />

/ ∗<br />

S c h l i e s s l i c h<br />

g e l a d e n<br />

∗ /<br />

werden d i e EPG−P l u g i n s aus diesem V e r z e i c h n i s<br />

pm->loadExternalPlugins(pluginDir);<br />

Die in dem angegebenen Verzeichnis enthaltenen Plugins werden beim Laden automatisch<br />

beim TVGuidePluginManager gelistet, dessen Klassendiagramm<br />

in Abbildung 4.5 gezeigt wird. Dieser übernimmt die Verwaltung der verfügbaren<br />

EPG-Plugins. Er ist als Singleton [GHJV95] implementiert um sicherzustellen,<br />

dass jedes Plugin in einer Anwendung auf die gleiche Instanz des TVGuide-<br />

PluginManagers zugreifen kann.<br />

Jedes EPG-Plugin registriert sich beim Laden der Bibliothek selbstständig bei dem<br />

TVGuidePluginManager durch folgende Code-Zeile im Konstruktor der TV-<br />

GuidePlugin-Klasse:<br />

STVGuidePluginManager::getInstance().registerPlugin(this);<br />

Die Vorgehensweise des Registrierens <strong>eines</strong> Plugins beim TVGuidePluginManager<br />

ist in Abbilding 4.6 dargestellt.<br />

Die EPG-Plugins selbst sind in Anlehnung an die <strong>NMM</strong>-Plugins realisiert [LRS02].<br />

Dazu wird die Klasse TVGuidePlugin bereitgestellt, die als Oberklasse der einzelnen<br />

Plugins dient. Diese Oberklasse implementiert das ITVGuidePlugin-<br />

Interface, über das allgemeine Methoden zum Starten, Initialisieren, Stoppen <strong>und</strong><br />

Deinitialisieren <strong>eines</strong> EPG-Plugins aufgerufen werden können (siehe Abbildung 4.7).<br />

Theoretisch wäre es damit möglich die EPG-Plugins auch transparent über das<br />

Netzwerk zu verteilen. <strong>NMM</strong> unterstützte zum Zeitpunkt dieser Arbeit jedoch nur<br />

die Verwaltung von <strong>NMM</strong>-Knoten in der Geräteverwaltung. Da die EPG-Plugins<br />

keine <strong>NMM</strong>-Knoten sind können sie nicht von einer Registry verwaltet werden,<br />

denn sie besitzen weder Ein- noch Ausgänge. Um dennoch ein Ansprechen der<br />

EPG-Plugins über das Netzwerk zu ermöglichen, könnte der in Abschnitt 3.2 vorgestellten<br />

Mechanismus zur Erweiterung einfacher Objekte um Netzwerktranspa-


4.2. QUELLEN FÜR EPG-INFORMATIONEN<br />

Abbildung 4.6: Beim Instantiieren der TVGuide-Klasse werden durch<br />

den loadLibrary-Aufruf die TVGuidePlugins geladen, die sich bei dem<br />

TVGuidePluginManager registrieren. Anschließend kann über das Objekt der<br />

TVGuide-Klasse das entsprechende Plugin-Interface angefordert werden.<br />

Abbildung 4.7: Die Klasse TVGuidePlugin implementiert das Interface<br />

ITVGuidePlugin.<br />

47


KAPITEL 4. Realisierung einer elektronischen Programmzeitschrift<br />

48<br />

Abbildung 4.8: Die Zustände <strong>und</strong> Zustandsübergänge <strong>eines</strong> TVGuidePlugin.<br />

renz verwendet werden um jedes einzelne EPG-Plugin als Dienst anzubieten. In<br />

<strong>NMM</strong> werden über diesen Weg jedoch nur Middleware-Dienste angeboten. Da<br />

EPG-Plugins keine Dienste darstellen wurde auf diese Art der Realisierung verzichtet.<br />

Die TVGuidePlugin-Oberklasse stellt virtuelle Methoden bereit, die von den<br />

abgeleiteten Klassen implementiert werden müssen. In Anlehnung an <strong>NMM</strong>-Knoten<br />

wurde ein Zustandsmodell realisiert, welches den Status <strong>eines</strong> EPG-Plugins anzeigt.<br />

Die Zustandsübergange <strong>und</strong> die für einen Zustandswechsel relevanten Methoden<br />

werden in Abbildung 4.8 gezeigt. Dadurch kann festgestellt werden, ob<br />

alle benötigten Ressourcen zum Ausführen <strong>eines</strong> Plugins vorhanden sind <strong>und</strong> es<br />

gestartet werden kann. Diese Zustände sind im einzelnen:<br />

CONSTRUCTED Das Plugin wurde erstellt.<br />

INITIALIZED Hier wird geprüft, ob alle benötigten Ressourcen zur Ausführung<br />

des Plugins vorhanden sind.<br />

STARTED Das Plugin wurde gestartet <strong>und</strong> sammelt Daten.<br />

Um die Plugin-spezifischen Änderungen bei einem Zustandswechsel zu realisieren,<br />

existiert für jeden Zustand eine Methode mit dem Präfix ’do’, welche von dem<br />

Programmierer implementiert werden muss. Diese Vorgehensweise basiert auf dem<br />

Entwurfsmuster Template-Method [GHJV95].<br />

Zusätzlich zu der Oberklasse TVGuidePlugin implementiert jedes Plugin ein<br />

eigenes Interface, mit dessen Hilfe Plugin-spezifische Einstellungen vorgenommen<br />

werden können. Die Anwendung kann das entsprechende Interface anfordern <strong>und</strong><br />

auf diese Weise nur für das jeweilige Plugin relevante Parameter konfigurieren. Ein<br />

Beispiel ist in Abschnitt 4.2.3 aufgeführt. Jedes Plugin enthält eine vorgegebene<br />

Konfiguration, sodass es direkt nach dem Laden gestartet werden kann. Für Plugins,<br />

deren Konfiguration nicht automatisch festgelegt werden kann, existiert eine<br />

Konfigurations-Datei, die nach dem Erstellen des Plugin von diesem ausgelesen<br />

wird <strong>und</strong> sich somit selbst konfiguriert.<br />

Die von einem EPG-Plugin gesammelten Daten sind schließlich von einem EPG zu<br />

verwalten. Daher muss das Plugin wissen, wohin es die gesammelten Daten senden<br />

soll. Zu diesem Zweck wird ihm das ITVGuide-Interface des EPGs übergeben,


4.2. QUELLEN FÜR EPG-INFORMATIONEN<br />

der die Daten verwalten soll. Dieses Interface wird über das ITVGuideProducer-<br />

Interface gesetzt, welches jedes Plugin implementiert. Nach dem Laden der Plugins<br />

wird geprüft, ob diese auch ausgeführt werden können. Dazu werden sie in den<br />

Zustand INITIALIZED versetzt. Sollte dies fehl schlagen, wird das entsprechende<br />

Plugin wieder gelöscht <strong>und</strong> steht folglich nicht mehr zur Verfügung. Andernfalls<br />

wird dem Plugin durch Aufrufen der Methode registerTVGuide(...) dessen<br />

ITVGuideProducer-Interface der EPG bekannt gemacht, zu dem es seine<br />

gesammelten Daten senden soll.<br />

Nachdem die ausführbaren Plugins ermittelt wurden, sind daraus die zu startenden<br />

Plugins auszuwählen, was von dem TVGuideConfigurator durch Auswerten<br />

der Konfigurations-Einstellungen vorgenommen wird. Die Plugins werden durch<br />

Angabe <strong>eines</strong> Kürzels, z.B. xmltv für das XMLTVPlugin, ausgewählt. Bei einer<br />

Kommandozeilen-Konfiguration können die Kürzel mittels des Optionsschalters<br />

-s spezifiziert werden. In einer Konfigurations-Datei geschieht dies durch Angabe<br />

einer oder mehrerer epgsource-Variablen (siehe Anhang A). Es wird geprüft,<br />

ob das Kürzel in dem Plugin-Namen enthalten ist <strong>und</strong> schließlich das EPG-Plugin<br />

durch Aufrufen der Methode enable() dessen ITVGuidePlugin-Interfaces<br />

aktiviert. Nur aktivierte Plugins können später auch gestartet werden.<br />

Die Schnittstelle zur Anwendung bildet das ITVGuide-Interface, welches von<br />

der Klasse TVGuide implementiert wird. Über dieses können sowohl Daten eingefügt<br />

<strong>und</strong> abgefragt (siehe Abschnitt 4.3) als auch die gewünschten EPG-Plugins<br />

konfiguriert werden. Zu diesem Zweck fordert die Anwendung das entsprechende<br />

Interface des Plugins von der TVGuide-Klasse an. Daraufhin werden die registrierten<br />

EPG-Plugins des TVGuidePluginManagers nach dem gewünschten<br />

Interface durchsucht <strong>und</strong> dieses schließlich an die Anwendung zurückgeliefert. Das<br />

Anfordern des Interfaces geschieht durch Aufrufen der Methode<br />

ITVGuidePlugin* ITVGuide::<br />

getPluginInterface(const string &interfacename)<br />

Dabei muss der Name des Interface als Zeichenkette übergeben werden, da eine<br />

Definition von parameterisierten Methoden [Str98] durch die IDL von <strong>NMM</strong> nicht<br />

möglich ist. Das Plugin-Interface soll jedoch auch über das Netzwerk angefordert<br />

werden können, weshalb diese Art der <strong>Implementierung</strong> gewählt wurde.<br />

Alle zu startenden Plugins können initialisiert werden, sobald sie konfiguriert sind.<br />

Dazu stellt die TVGuide-Klasse die Methode init() bereit. Durch deren Aufruf<br />

wird jedes Plugin, das zum Sammeln der Daten verwendet werden soll, in den<br />

Zustand INITIALIZED versetzt. Sind alle Plugins initialisiert, können sie gestartet<br />

werden, indem auf dem TVGuide die Methode start() aufgerufen wird.<br />

Dadurch werden alle Plugins gestartet, die bei der Konfiguration aktiviert wurden.<br />

Dies erlaubt die Kontrolle der verwendeten EPG-Plugins durch einen einzigen<br />

Methoden-Aufruf anstatt diese bei jedem einzelnen Plugin gesondert aufzurufen.<br />

Nach dem Starten werden Informationen für Kanäle sowie Sendungen gesammelt<br />

<strong>und</strong> diese dem EPG zugeführt. Dazu müssen die EPG-Daten in ein einheitlichen<br />

Format gebracht werden, damit sie über eine einheitliche Schnittstelle dem EPG<br />

hinzugefügt werden können. Dies wird im Folgenden erklärt.<br />

49


KAPITEL 4. Realisierung einer elektronischen Programmzeitschrift<br />

50<br />

Abbildung 4.9: Die Klasse ChannelDescription speichert Informationen<br />

über Sender.<br />

4.2.2 Übertragung der Informationen<br />

Zum Datenaustausch der EPGs über das Netzwerk müssen die Daten serialisiert<br />

werden können [Rep03]. Dazu sind die Informationen in entsprechenden Datenstrukturen<br />

gespeichert. Dies ist auch notwendig, da nicht alle Quellen Informationen<br />

in einem einheitlichen Format liefern <strong>und</strong> die Daten über eine einheitliche<br />

Schnittstelle dem EPG hinzugefügt bzw. von ihm abgefragt werden können. Alle<br />

Daten zu einzelnen Kanälen werden in der Klasse ChannelDescription gespeichert,<br />

deren Klassendiagramm in Abbildung 4.9 zu sehen ist. Diese enthält die<br />

Kanal-ID zur eindeutigen Identifizierung <strong>eines</strong> Kanals sowie alle Kanalnamen, die<br />

der entsprechenden ID zugeordnet sind. Dabei handelt es sich entweder beim Sammeln<br />

von Informationen um die von dem Plugin verwendete ID oder bei Abfrage-<br />

Ergebnissen um die von dem EPG genutzte. Damit wird der teilweise unterschiedlichen<br />

Schreibweise der Sendernamen Rechnung getragen, die von verschiedenen<br />

Datenquellen verwendet wird. So kann z.B. die ARD bei einer Quelle ’ARD’ genannt<br />

bei der zweiten Quelle jedoch als ’Das Erste’ bezeichnet werden.<br />

ID : ard.de<br />

Name : ARD<br />

Name : Das Erste<br />

Ebenso werden auch die Programm-Informationen in einer eigenen Klasse, der<br />

ProgramDescription gespeichert (siehe Abbildung 4.10). Diese enthält die<br />

Start- <strong>und</strong> Endzeiten einer Sendung sowie die zu dem Sender gehörige Channel-<br />

Description. Sie kann zusätzliche Informationen enthalten wie z.B. den Titel<br />

der Sendung, eine ausführliche Beschreibung bzw. eine oder mehrere Kategorien,<br />

in welche die Sendung eingeordnet werden kann.<br />

Startzeit : 12.05.2005 20:15<br />

Endzeit : 12.05.2005 22:15<br />

Title : James Bond<br />

Beschreibung : Octopussy<br />

Kategorie : Spielfilm


4.2. QUELLEN FÜR EPG-INFORMATIONEN<br />

Abbildung 4.10: Die Klasse ProgramDescription speichert Informationen<br />

zu einer Sendung.<br />

Bei einem über das Netzwerk erreichbaren EPG muss beachtet werden, dass sowohl<br />

Informationen als auch Anfragen nach EPG-Daten aus unterschiedlichen<br />

Zeitzonen stammen können. Eine Zeitzone ist ein Abschnitt der Erdoberfläche, auf<br />

dem eine gemeinsame Uhrzeit gilt. Sie bezeichnet auch die Differenz zur Koordinierten<br />

Weltzeit (Coordinate Universal Time – UTC)(Quelle: [Wikh]). Man nennt<br />

sie auch Greenwich Mean Time (GMT). Von dieser werden die Zeiten in den verschiedenen<br />

Zeitzonen abgeleitet [Wike]. Zur Lieferung korrekter Ergebnisse ist es<br />

deshalb erforderlich zu erkennen, aus welcher Zeitzone die Daten oder die Abfrage<br />

stammen.<br />

Repräsentation der Zeiten<br />

Zur Repräsentation der Zeiten muss es deshalb möglich sein die zu Gr<strong>und</strong>e liegende<br />

Zeitzone feststellen zu können. Dies leistet die in <strong>NMM</strong> vorhandene Klasse<br />

LocalTime (siehe Abbildung 4.11). Die Klasse LocalTime dient als Wrapper<br />

für die Datenstruktur struct tm, welche von der C Standard-Bibliothek bereitgestellt<br />

wird. Sie ist für das Speichern der Komponenten einer Kalenderzeit vorgesehen,<br />

was z.B. den Tag, den Monat <strong>und</strong> das Jahr sowie St<strong>und</strong>en <strong>und</strong> Minuten<br />

umfasst. Als weitere Informationen werden die der gespeicherten Zeit zu Gr<strong>und</strong>e<br />

liegende Zeitzone zur Verfügung gestellt <strong>und</strong> die Angabe, ob der gespeicherten<br />

Zeit die Sommerzeit zu Gr<strong>und</strong>e liegt. Unter Verwendung der Klasse LocalTime<br />

können diese Informationen in <strong>NMM</strong> serialisiert <strong>und</strong> über das Netzwerk übertra-<br />

51


KAPITEL 4. Realisierung einer elektronischen Programmzeitschrift<br />

52<br />

Abbildung 4.11: Die Klasse Localtime dient dem Speichern des Datums <strong>und</strong><br />

der Uhrzeit.<br />

gen werden. Die Werte der in struct tm enthaltenen Variablen müssen daher<br />

zusätzlich in Integer-Variablen gespeichert werden. Nach dem Serialisieren wird<br />

die tm-Struktur wieder entsprechend gefüllt.<br />

Die Klasse LocalTime bot zu Beginn lediglich die Möglichkeit die Zeitinformationen<br />

abzulegen <strong>und</strong> abzufragen. Für diese Arbeit ist es jedoch notwendig Zeiten<br />

zu vergleichen <strong>und</strong> mit ihnen zu rechnen. Deshalb wurde die Klasse LocalTime<br />

um diese Funktionalitäten erweitert. Sie unterstützen das Addieren <strong>und</strong> Subtrahieren<br />

zweier LocalTime-Klassen, was als Ergebnis den Zeitunterschied in Sek<strong>und</strong>en<br />

liefert, sowie das Addieren <strong>und</strong> Subtrahieren ganzer Zahlen, was dem Vorgang<br />

entspricht, dass Sek<strong>und</strong>en zu der dargestellten Zeit addiert bzw. von ihr subtrahiert<br />

werden. Zur <strong>Implementierung</strong> der Rechenoperatoren wurde auf den Datentyp<br />

time_t zurückgegriffen, welcher ebenfalls von der C Standard-Bibliothek bereitgestellt<br />

wird. Diese speichert Zeiten als vergangene Sek<strong>und</strong>en seit dem 01.01.1970<br />

00:00 Uhr GMT, was der Zeitenbestimmung des Betriebssystems Unix entspricht.<br />

Zur Umwandlung von struct tm nach time_t stellt die C Standard-Bibliothek<br />

die Funktionen localtime(), gmtime <strong>und</strong> mktime bereit [man01]. Die Funktionen<br />

localtime() <strong>und</strong> gmtime liefern aus einer time_t-Repäsentation eine<br />

struct tm-Datenstruktur mit den entsprechenden Werten. gmtime rechnet<br />

dabei die Zeit in UTC um. mktime liest die Informationen aus einer struct<br />

tm-Struktur <strong>und</strong> liefert die Zeit als time_t-Typ zurück. Diese Funktionen wurden<br />

zur <strong>Implementierung</strong> der Arithmetik-Operatoren verwendet.<br />

Weiterhin wurde die Klasse LocalTime um die Funktion erweitert, die gespeicherte<br />

Zeit in UTC oder in die Lokale Zeitzone umrechnen zu können. Dazu wird<br />

auf die Informationen der struct tm-Datenstruktur zurückgegriffen, welche den<br />

zeitlichen Unterschied der gespeicherten Zeit zur UTC in Sek<strong>und</strong>en angibt. Zur<br />

Umrechnung einer Zeit nach UTC muss dieser Wert lediglich addiert werden. Zur


4.2. QUELLEN FÜR EPG-INFORMATIONEN<br />

Umrechnung von UTC in die lokale Zeitzone muss zuerst die momenatne ermittelt<br />

werden, in der man sich momentan befindet. Dazu wird das aktuelle Datum festgestellt<br />

<strong>und</strong> aus der erhaltenen struct tm-Struktur die Zeitzonen-Informatinen<br />

ausgewertet. Das Resultat wird der umzurechnenden Zeit hinzuaddiert. Somit können<br />

alle benötigten Informationen zur Beschreibung der Start- <strong>und</strong> Endzeiten von<br />

Sendungen gespeichert sowie Zeiten verglichen werden. Sie können über die entsprechenden<br />

Methoden der ProgramDescription als LocalTime übergeben<br />

werden.<br />

Die Klasse ProgramDescription bietet weiterhin die Möglichkeit Zeiten als<br />

Zeichenkette zu übergeben. Dies ist notwendig um Zeitinformationen von EPG-<br />

Quellen, die Daten im XMLTV-Format [XML] liefern, sowie Zeiten von Abfrageergebnissen<br />

aus den loaklen EPG-Daten in der Klasse LocalTime zu speichern<br />

<strong>und</strong> diese Umrechnung nur einmal implementieren zu müssen. XMLTV beschreibt<br />

eine Repräsentation des Datums als Zeichenkette inklusive der Zeitzonen-<br />

Information, die dem Datum als Basis dient. Die Zeichenkette setzt sich wie folgt<br />

zusammen:<br />

YYYYMMDDhhmm TTTTT<br />

YYYY = Jahr, dargestellt mit 4 Ziffern<br />

MM = Monat, dargestellt mit 2 Ziffern<br />

DD = Tag, dargestellt mit 2 Ziffern<br />

hh = St<strong>und</strong>e, dargestellt mit 2 Ziffern von 0-23<br />

MM = Minute<br />

TTTTT = Zeitzonen-Information, Differenz zur UTC<br />

Im Folgenden werden nun die realisierten EPG-Plugins vorgestellt, welche die beschriebenen<br />

Datenstrukturen verwenden um dem EPG Informationen zuzuführen.<br />

4.2.3 XMLTV-Plugin<br />

XMLTV [XML] ist eine Sammlung von Programmen, die TV-Informationen aus<br />

dem Internet abfragen <strong>und</strong> nach XML [Qui05] konvertieren. Diese beinhaltet in<br />

der Programmiersprache Perl [Per] implementierte Programme, die ihre Daten von<br />

festgelegten Quellen aus dem Internet beziehen. Die Informationen sind dabei auf<br />

ein Land <strong>und</strong> eine Datenquelle beschränkt. Aus diesem Gr<strong>und</strong> existiert für unterstützte<br />

Länder mindestens ein Programm, das bei XMLTV Grabber genannt wird.<br />

Für Deutschland enthält das XMLTV-Paket den Grabber tv_grab_de_tvtoday,<br />

welcher die Webseite der Programmzeitschrift TVToday [TVTa] auswertet <strong>und</strong><br />

nach XML konvertiert. Die Arbeitsweise dieser Grabber kann durch Kommandozeilen-Parameter<br />

beeinflusst werden. Weiterhin enthält das Paket Programme zur<br />

Bearbeitung von Dateien im XMLTV-Format.<br />

Das Format einer XML-Datei wird durch die Document Type Definiton (DTD) festgelegt.<br />

Das Dateiformat von XMLTV wird daher in der XMLTV-DTD beschrieben,<br />

welche auf der Homepage [XML] eingesehen werden kann. Es unterscheidet sich<br />

von anderen XML-basierten TV-Listings derart, dass es aus Benutzer-Sicht anstatt<br />

aus Provider-Sicht geschrieben wurde <strong>und</strong> alle Kanäle in einer einzelnen Datei<br />

53


KAPITEL 4. Realisierung einer elektronischen Programmzeitschrift<br />

54<br />

Abbildung 4.12: Die Klasse XMLTVPlugin erbt von TVGuidePlugin <strong>und</strong><br />

implementiert zusätzlich das Interface IXMLTVPlugin.<br />

mischt. Jedes Programm enthält Details, wie z.B. Name der Sendung, Beschreibung<br />

etc. als Subelemente, während Broadcast-Details, wie beispielsweise Zeiten,<br />

als Attribute gespeichert werden. Die XML-Datei hat folgenden Aufbau:<br />

<br />

<br />

<br />

ARD<br />

<br />

...<br />

<br />

Tagesthemen<br />

Mit Sport<br />

Nachrichten<br />

<br />

<br />

Das Wort zum Sonntag<br />

es spricht Propst Ralf Meister<br />

<br />

...<br />

<br />

Zur Verwendung dieser Werkzeuge wurde das XMLTVPlugin entwickelt, dessen<br />

Klassendiagramm in Abbildung 4.12 zu sehen ist. Dieses implementiert das<br />

IXMLTVPlugin-Interface um einer Anwendung die Änderung von Einstellungen<br />

des Plugins bei Bedarf zu ermöglichen.


4.2. QUELLEN FÜR EPG-INFORMATIONEN<br />

Bei Initialisierung Plugins wird zuerst festgestellt, welche XMLTV-Tools zur Verfügung<br />

stehen. Diese sind in dessen Konfigurations-Datei aufgelistet, die den Namen<br />

XMLTVPluginConf.xml trägt. Den Aufbau der Datei zeigt Anhang B.<br />

Die Grabber werden beim Initialisieren des Plugins mit der Option -h ausgeführt<br />

um festzustellen, welche davon installiert <strong>und</strong> ausführbar sind. Die Option -h gibt<br />

einen Hilfetext aus <strong>und</strong> beendet den Grabber, ohne dass EPG-Informationen gesammelt<br />

werden. Der Hilfetext wird hier jedoch verworfen da lediglich festgestellt<br />

werden soll, ob es möglich ist das Programm auszuführen. Die Auswahl<br />

<strong>eines</strong> Grabbers geschieht über das Setzen der Länderkennung entweder in der<br />

Konfigurations-Datei selbst oder über die Methode setLocale() des IXMLTV-<br />

Plugin-Interfaces. Die Zuordnung <strong>eines</strong> Grabbers zu einer Länderkennung wird<br />

in der Konfigurations-Datei vorgenommen. Dies legt fest, welcher Grabber bei<br />

Setzen einer bestimmten Länderkennung verwendet werden soll, da auch mehrere<br />

Grabber für ein Land existieren <strong>und</strong> das XMLTVPlugin nur die Ausführung <strong>eines</strong><br />

einzelnen Grabbers zulässt. Weiterhin können auch solche Programme verwendet<br />

werden, die EPG-Informationen im XMLTV-Format ausgeben, jedoch nicht in<br />

den XMLTV-Werkzeugen enthalten sind <strong>und</strong> somit nicht deren Namenskonvention<br />

(siehe [XML]) entsprechen. Das Ausführen mehrerer Grabber parallel oder sequentiell<br />

wird in der vorliegenden <strong>Implementierung</strong> nicht unterstützt. Als mögliche<br />

Erweiterung könnte das Plugin dahingehend ergänzt werden. Weiterhin sind in der<br />

Datei XMLTVPluginConf.xml Default-Werte für das periodische Ausführen<br />

des gewählten Grabbers <strong>und</strong> die Priorität angegeben, die beim Laden des Plugins<br />

ausgelesen werden. Die Datei liegt zur besseren Lesbarkeit im XML-Format vor,<br />

sodass bei Bedarf die Einstellungen vom Benutzer geändert werden können.<br />

Damit Daten schnell zur Verfügung gestellt werden können, sollen bei der Ausführung<br />

des XMLTVPlugins Informationen für jeden Tag <strong>und</strong> jeden Kanal einzeln<br />

gesammelt werden. Diese Vorgehensweise wurde deshalb gewählt, weil das Sammeln<br />

aller Daten für alle Kanäle sehr lange dauert <strong>und</strong> damit nach einem Neustart<br />

der Applikation das Sammeln bei dem Tag <strong>und</strong> dem Sender fortgesetzt wird, für<br />

die das Plugin zuletzt Daten erhalten hat. Die Grabber rufen jedoch per Default<br />

alle Informationen für eine Woche ab, sodass für jeden Kanal Daten für die nächsten<br />

sieben Tage bereitgestellt werden. Mittels der Kommandozeilen-Parameter der<br />

XMLTV-Programme lässt sich das Sammeln allerdings nur auf einen Tag, nicht auf<br />

einen Kanal einschränken.<br />

Jeder Grabber besitzt eine eigene Konfigurations-Datei. Diese wird im Folgenden<br />

mit grabber.conf bezeichnet um Verwechslungen mit der Plugin-Konfigurations-<br />

Datei XMLTVPluginConf.xml zu vermeiden. Darin sind für den entsprechenden<br />

Grabber die Sender gespeichert, für die EPG-Daten gesammelt werden sollen<br />

<strong>und</strong> ist standardmäßig in $HOME/..conf abgelegt. Allerdings<br />

kann beim Aufruf des Grabbers eine alternative grabber.conf angegeben werden,<br />

was das Sammeln auf einen Kanal einschränken lässt. Dazu wird diese Datei zeilenweise<br />

ausgelesen <strong>und</strong> bei jedem Iterations-Schritt die Zeile in eine temporäre<br />

Datei geschrieben, welche dem Grabber als alternative grabber.conf angegeben<br />

wird. Die resultierenden XML-Daten werden in einer weiteren temporären Datei<br />

abgelegt, die nun geparst <strong>und</strong> deren Inhalt an den EPG übertragen wird. Nach erfolgreicher<br />

Abfrage werden der Kanal <strong>und</strong> der Tag der letzten Abfrage in der Datei<br />

55


KAPITEL 4. Realisierung einer elektronischen Programmzeitschrift<br />

56<br />

Abbildung 4.13: Die Klasse Fork.<br />

XMLTVPluginConf.xml gespeichert. Somit ist es möglich bei einem erneuten<br />

Starten der EPG-Anwendung festzustellen, bis zu welchem Tag <strong>und</strong> welchem<br />

Kanal schon Daten mittels XMLTV gesammelt wurden um an dieser Stelle fortzufahren.<br />

Fork in einer Multimedia-Umgebung<br />

Zum Starten der XMLTV-Programme, wurde die C-Funktion system(char*)<br />

verwendet. In dieser wird in einem, mittels fork(), neu erstellten Prozess das<br />

entsprechende Kommando ausgeführt [SM00]. Daraus resultieren jedoch in einer<br />

Multimedia-Umgebung Probleme, da fork() für den neuen Prozess alle offenen<br />

File-Descriptoren kopiert, so u.a. auch die der So<strong>und</strong>karte. Folglich könnte das Gerät<br />

während <strong>eines</strong> solchen Kommandos blockiert werden, sodass es nicht parallel<br />

nutzbar ist. Zur Lösung dieses Problems wurde die Fork-Klasse entwickelt (siehe<br />

Abbildung 4.13). Sie erstellt zu Beginn einer Anwendung einen Prozess, der bei<br />

Ausführung <strong>eines</strong> Kommandos kopiert werden kann. Somit läuft die Anwendung<br />

in zwei Prozessen. Der erste Prozess ist der Anwendungs-Prozess, der zweite Prozess<br />

wird bei Ausführung externer Programme geklont um diese darin auszuführen.<br />

Dazu ist es notwendig mit diesem Prozess zu kommunizieren <strong>und</strong> ihm mitzuteilen,<br />

welche Befehlszeile ausgeführt werden soll.<br />

Das Betriebssystem Unix stellt dafür zum einen den Mechanismus der Pipes <strong>und</strong><br />

zum anderen den der Unix-Domain-Sockets bereit [Hal97]. Die Kommunikation<br />

über Pipes ist jedoch unidirektional, d.h. Nachrichten können nur in eine Richtung<br />

geschickt werden. Um eine Zurücklieferung des Kommando-Ergebnisss zu<br />

ermöglichen ist aber eine bidirektionale Kommunikation nötig. Dies wird durch die<br />

Unix-Domain-Sockets unterstützt. Sie dienen sowohl der Netzwerkkommunikation<br />

<strong>und</strong> als auch der lokalen Kommunikation zweier Prozesse, je nachdem, welcher<br />

Domain-Parameter bei ihrer Erstellung angegeben wird [SM00]. Lokale Sockets<br />

werden durch den Domain-Parameter AF_UNIX angelegt. Somit ist auch ein Ansprechen<br />

dieser aus dem Netzwerk nicht möglich. Dies soll aus Sicherheitsgründen<br />

vermieden werden, da sonst ein Angreifer beliebig Programme auf dem lokalen<br />

Rechner starten kann. Eine weitere Möglichkeit wäre die Realisierung der Prozesskommunikation<br />

über den Service-Mechanismus von <strong>NMM</strong>. Der Kind-Prozess registriert<br />

einen Dienst, mit dem sich eine Anwendung verbinden kann um ein Kommando<br />

auszuführen. Da diese jedoch über das Netzwerk ansprechbar sind, ist auf<br />

eine solche Art der <strong>Implementierung</strong> auf Gr<strong>und</strong> der oben genannten Sicherheitsa-


4.2. QUELLEN FÜR EPG-INFORMATIONEN<br />

spekte verzichtet worden. Außerdem ist für die gesteckten Ziele dieser Arbeit ein<br />

Zugriff auf den Kind-Prozess aus dem Netzwerk nicht nötig. Deshalb wurde zur<br />

Prozesskommunikation auf die lokalen Unix-Domain-Sockets zurückgegriffen.<br />

Die Fork-Klasse wurde als Singleton implementiert [GHJV95] [Rep03], damit innerhalb<br />

einer Anwendung ein Zugriff auf die gleiche Instanz der Klasse möglich<br />

ist. Um einen reibungslosen Ablauf zu garantieren muss diese Klasse zu Anfang<br />

<strong>eines</strong> Programms dann instantiiert werden, wenn noch keine File-Descriptoren geöffnet<br />

sind. Die Klasse wird wie folgt erstellt:<br />

int main(){<br />

/ ∗ E r s t e l l e n der I n s t a n z der Fork−K l a s s e ∗ /<br />

SFork::getInstance();<br />

}<br />

/ ∗ Der R e s t der Anwendung ∗ /<br />

[...]<br />

Die Folge ist die Erstellung <strong>eines</strong> Kind-Prozesses mit Hilfe von fork(), welcher<br />

solange wartet, bis ein Kommando ausgeführt werden soll. Zuvor werden die<br />

Sockets angelegt <strong>und</strong> verb<strong>und</strong>en. Dies wird wie folgt bewerkstelligt:<br />

/ ∗<br />

Feld zum S p e i c h e r n des Socket −Paares<br />

∗ /<br />

int sv[s];<br />

/ ∗<br />

Anlegen <strong>und</strong> Verbinden der S o c k e t s .<br />

AF_UNIX l e g t f e s t , dass es s i c h b e i den e r s t e l l t e n S o c k e t s<br />

um s o l c h e f ü r d i e l o k a l e P r o z e s s k o m m u n i k a t i on h a n d e l t .<br />

Die D e s c r i p t o r e n zum Ansprechen der S o c k e t s werden i n<br />

dem Feld sv g e s p e i c h e r t .<br />

∗ /<br />

socketpair(AF_UNIX, SOCK_STREAM, 0, sv);<br />

Soll ein Kommando ausgeführt werden, muss man auf dem Objekt der Fork-<br />

Klasse die Methode executeCommand(...) mit der Befehlszeile als Parameter<br />

aufrufen:<br />

SFork::getInstance()<br />

.executeCommand(’’Auszuführendes Kommando’’);<br />

Die Methode schickt das Kommando an den Kind-Prozess <strong>und</strong> wartet solange, bis<br />

dieser das Programm ausgeführt <strong>und</strong> das Ergebnis des system(...)-Aufrufs<br />

übermittelt hat. Der Rückgabewert wird aus dem Socket ausgelesen <strong>und</strong> an die<br />

Anwendung zurückgegeben.<br />

int Fork::executeCommand(string command){<br />

/ ∗<br />

Die Methode s c h i c k t d i e B e f e h l s z e i l e z u r Ausführung an<br />

den Kind−P r o z e s s<br />

∗ /<br />

write(sv[0], command , sizeof(command));<br />

...<br />

57


KAPITEL 4. Realisierung einer elektronischen Programmzeitschrift<br />

58<br />

/ ∗<br />

AnschlieSSend w a r t e t s i e solange , b i s das Kommando<br />

a u s g e f ü h r t wurde . . .<br />

∗ /<br />

char recvBuffer[BUFFERSIZE];<br />

int len = read(sv[0], recvBuffer, sizeof(recvBuffer));<br />

/ ∗<br />

. . .<br />

∗ /<br />

<strong>und</strong> g i b t das E r g e b n i s an d i e Anwendung z u r ü c k<br />

return atoi(recvBuffer);<br />

}<br />

Der Kind-Prozess wartet nach dessen Erstellung mittels des read(...)-Aufrufs,<br />

bis eine Nachricht über den Socket empfangen wurde. Anschließend führt er das<br />

erhaltene Kommando unter Verwendung von system(...) aus <strong>und</strong> übermittelt<br />

den Rückgabewert an die Methode:<br />

...<br />

/ ∗<br />

Der Kind−P r o z e s s w a r t e t an dem S o c k e t sv [ 1 ] b i s e i n e<br />

N a c h r i c h t e i n t r i f f t<br />

∗ /<br />

char command[BUFFERSIZE]<br />

int len = read(sv[1], command,sizeof(command));<br />

...<br />

/ ∗<br />

Das ü b e r t r a g e n e Kommando wird m i t t e l s ’ s y s t e m ’ a u s g e f ü h r t<br />

∗ /<br />

int res = system(command);<br />

/ ∗<br />

Der Rückabewert wird an d i e Methode z u r ü c k g e s c h i c k t<br />

∗ /<br />

char t[20];<br />

sprintf(t, "%i",res);<br />

write(sv[1], t, sizeof(t));<br />

...<br />

Da die Fork-Klasse in einer Multimedia-Umgebung verwendet wird, kann es bei<br />

zu hoher Beanspruchung der CPU durch Ausführen <strong>eines</strong> Kommandos mittels<br />

system (...) zu Störungen der Audio- <strong>und</strong> Video-Wiedergabe kommen. Um<br />

diese Störungen zu vermeiden ist es notwendig die Priorität des fork()-Prozesses<br />

zu verringern, so dass dieser die Systemressourcen weniger belastet. So läuft der<br />

Prozess zwar langsamer, dies ist jedoch bei der Ausführung von XMLTV nicht von<br />

belang. Die Priorität des Kind-Prozesses kann über die Methode int setChild-<br />

Priority(int prio) der Fork-Klasse verringert werden. Prioräten führen<br />

dazu, dass ein Kommando weniger CPU-Zeit nutzt. Der Bereich gültiger Prioritäten<br />

liegt zwischen -20 <strong>und</strong> +20. Dabei gilt: je höher der numerische Wert, desto<br />

geringer die Ausführungspriorität. Die Priorität <strong>eines</strong> Prozesses wird bei Aufruf<br />

von setChildPriority() durch die C-Funktion setpriority(...) gesetzt:


4.2. QUELLEN FÜR EPG-INFORMATIONEN<br />

/ ∗<br />

Durch den Parameter ’ p r i o ’ wird d i e zu s e t z e n d e P r i o r i t ä t<br />

übergeben<br />

∗ /<br />

int Fork::setChildPriority(int prio){<br />

/ ∗<br />

PRIO_PROCESS g i b t an , dass d i e P r i o r i t ä t e i n e s P r o z e s s e s<br />

g e s e t z t werden s o l l . In ’ c h i l d P i d ’ i s t d i e Prozess −ID<br />

des durch ’ f o r k ( ) ’ e r z e u g t e n Kind−P r o z e s s e s g e s p e i c h e r t .<br />

∗ /<br />

return setpriority(PRIO_PROCESS, prio, childPid);<br />

}<br />

Das XMLTVPlugin legt auf diese Weise die Priorität auf den niedrigsten Wert fest,<br />

sobald das Plugin gestartet wurde.<br />

Durch Beschränkungen des Betriebssystem kann die Priorität <strong>eines</strong> Prozesses von<br />

einem normalen Benutzer lediglich verringert, aber nicht erhöht werden. Dies gilt<br />

auch für die von einem Benutzer gesetzten Prioritäten: Eine einmal verringerte<br />

Prioriät kann nicht mehr erhöht werden [SM00]. Da jedoch die Fork-Klasse in<br />

dieser Arbeit ausschließlich von EPG-Plugins zur Ausführung externer Programme<br />

verwendet wird <strong>und</strong> diese immer mit niedrigster Priorität laufen sollen um die<br />

Wiedergabe von Multimedia-Daten nicht zu stören, ist diese Vorgehensweise ausreichend.<br />

Beispiel-<strong>Implementierung</strong> eins EPG-Plugins<br />

An dieser Stelle wird nun ein Beispiel für die <strong>Implementierung</strong> <strong>eines</strong> EPG-Plugins<br />

anhand von Auszügen aus der Realisierung des XMLTV-Plugins beschrieben.<br />

Als ersten Schritt definiert man das Interface, welches das XMLTVPlugin zusätzlich<br />

zu dem ITVGuidePlugin-Interface implementieren soll. Mit Hilfe des neuen<br />

Interfaces können Plugin-spezifische Parameter eingestellt werden.<br />

module <strong>NMM</strong>{<br />

}<br />

interface IXMLTVPlugin {<br />

/ ∗<br />

S e t z e n der Sprach−I n f o r m a t i o n e n <strong>und</strong> damit Auswahl des<br />

zu verwendenden XMLTV−T o o l s<br />

∗ /<br />

Result setLocale(in string loc);<br />

/ ∗<br />

Abfrage der g e s e t z t e n Sprach−I n f o r m a t i o n e n<br />

∗ /<br />

string getLocale();<br />

[...]<br />

};<br />

59


KAPITEL 4. Realisierung einer elektronischen Programmzeitschrift<br />

60<br />

Nun kann das Plugin implementiert werden, wobei die Klasse XMLTVPlugin von<br />

TVGuidePlugin <strong>und</strong> von IXMLTVPluginImpl erbt.<br />

class XMLTVPlugin : public TVGuidePlugin,<br />

public IXMLTVPluginImpl<br />

{<br />

/ ∗ D e k l a r a t i o n Plugin−s p e z i f i s c h e r V a r i a b l e n ∗ /<br />

[...]<br />

/ ∗ do−Mehtoden der TVGuidePlugin −O b e r k l a s s e ∗ /<br />

Result doStart();<br />

Result doStop();<br />

Result doInit();<br />

Result doDeinit();<br />

/ ∗ Methoden des IXMLTVPlugin−I n t e r f a c e s ∗ /<br />

Result setLocale(const string &loc);<br />

string getLocale();<br />

[...]<br />

};<br />

In der Folge muss die <strong>Implementierung</strong> der ’do-Methoden’ des ITVGuidePlugin-<br />

Interface, die den Arbeitsablauf des Plugins steuern, vorgenommen werden. Deshalb<br />

ist zu prüfen, welche dem Plugin bekannte XMLTV-Tools ausgeführt werden<br />

können. Dies wird in der Methode doInit() wie folgt realisiert.<br />

Result XMLTVPlugin::doInit(){<br />

/ ∗ L i s t e der zu Verfügung s t e h e n d e n grabber ∗ /<br />

listsecond + " -h >/dev/null";<br />

if(SFork::getInstance()<br />

.executeCommand(testCommand.c_str()) != 0){<br />

i->second="";<br />

}<br />

}<br />

return SUCCESS;<br />

}<br />

Nun kann der Start des Plugins erfolgen, wobei das Sammeln der Daten in der<br />

Methode doStart() implementiert wird.<br />

Result XMLTVPlugin::doStart() {<br />

/ ∗<br />

Hier wird das XMLTV−Tool a u s g e f ü h r t . Es s p e i c h e r t<br />

s e i n e gesammelten Daten i n der D a t e i ’ f i l e n a m e ’ .<br />

Das a u s z u f ü h r e n d e Kommando i s t i n dem<br />

s t r i n g ’ grabberCommand ’ e n t h a l t e n<br />

∗ /<br />

int systemRes = SFork::getInstance()<br />

.executeCommand(grabberCommand);


}<br />

4.2. QUELLEN FÜR EPG-INFORMATIONEN<br />

if(systemRes == 0){<br />

/ ∗<br />

I s t das Tool e r f o l g r e i c h a u s g e f ü h r t , werden d i e<br />

XML−Daten m i t t e l s der H i l f s −F u n k t i o n ’readXMLTV ( . . ) ’<br />

aus der D a t e i ’ f i l e n a m e ’ a u s g e l e s e n <strong>und</strong> zu dem EPG<br />

g e s e n d e t , der s i e s p e i c h e r t<br />

∗ /<br />

systemRes = readXMLTV(filename);<br />

}<br />

return SUCCESS;<br />

4.2.4 nxtvepg-Plugin<br />

Das Programm nxtvepg [Zoe] ermöglicht die Nutzung von nexTView [ETS97b],<br />

einer kostenlosen elektronischen Programmzeitschrift, die zusammen mit dem Videotext<br />

[ETS97c] übertragen wird. Diese enthält die Programme aller überregionalen<br />

Sender in Deutschland, Österreich, der Schweiz <strong>und</strong> Frankreich. Die Informationen<br />

umfassen je nach Provider einen Zeitraum von bis zu einer Woche. Dieser<br />

Standard wurde vom European Telecommunication Standard Institute (ETSI) [Ins]<br />

entwickelt <strong>und</strong> ging erstmals 1997 auf Sendung. Die Absicht war in der Integration<br />

einer Programmzeitschrift in Fernsehgeräte begründet. Daher basiert die Übertragung<br />

auf einem kompakten Binärformat anstelle vorformatierter Videotext-Seiten.<br />

NexTView-Daten werden auf einer einzelnen Videotext-Seite übertragen, die meist<br />

sekündlich in den regulären Datenstrom eingefügt wird. Die Daten werden zyklisch<br />

gesendet, d.h. der Datensatz wiederholt sich im Zeitabstand von 20-25 Minuten.<br />

Dieser Zyklus ist wiederum in zwei Datenströme unterteilt, die miteinander verwoben<br />

sind. Der erste Strom enthält zeitnahe Programm-Informationen <strong>und</strong> kann<br />

im Gesamtzyklus mehrfach wiederholt werden, der zweite enthält die restlichen<br />

Daten <strong>und</strong> wird in einem Zyklus von 20-25 Minuten erneut gesendet. Durch diese<br />

Trennung ist ein Laden der zeitnahen Daten in kurzer Zeit möglich.<br />

NexTView-Daten werden in einem kompakten Binärformat, ausgenommen der<br />

Textdaten, übertragen. Diese kodierten Informationen enthalten Kontrolldaten, wie<br />

z.B. Startzeit, Senderkennung etc.. Sie sind mit einer “Hamming-8:4”-Vorwärtsfehlerkorrektur<br />

[Wikd] versehen, wodurch Fehler von bis zu zwei verdrehten Bits<br />

in einem Oktett erkannt <strong>und</strong> korrigiert werden können, was dem Schutz der Kontrolldaten<br />

vor Übertragungsfehlern dient. Tritt dennoch ein nicht zu korrigierender<br />

Fehler auf, wird der gesamte Datenblock verworfen.<br />

Das Programm nxtvepg bietet die Möglichkeit die gesammelten Informationen in<br />

eine XML-Datei zu exportieren. Auf diese Funktionalität greift das Nxtvepg-<br />

Plugin (siehe Abbildung 4.14) zurück <strong>und</strong> lässt die Daten dem EPG zukommen.<br />

Nach Auslesen der XML-Datei werden die darin enthaltenen Daten an den EPG<br />

übergeben. Das Programm bietet keine Möglichkeit diese Daten vorzufiltern. So<br />

ist ein Vorgehen wie bei dem XMLTVPlugin nicht möglich. Bei ersten Versuchen<br />

wurden die Informationen mittels tv_split aus der XMLTV-Sammlung in verschie-<br />

61


KAPITEL 4. Realisierung einer elektronischen Programmzeitschrift<br />

62<br />

Abbildung 4.14: Die Klasse NxtvepgPlugin erbt von TVGuidePlugin <strong>und</strong><br />

implementiert zusätzlich das Interface INxtvepgPlugin.<br />

dene Dateien geschrieben, welche anschließend ausgelesen wurden. Dies dauerte<br />

jedoch länger als das Parsen der kompletten Datei, weshalb die Benutzung von<br />

tv_split nur optional <strong>und</strong> per default deaktiviert ist. Somit wird die gesamte XML-<br />

Datei eingelesen, geparst <strong>und</strong> die Daten an den EPG gesandt.<br />

Das NxtvepgPlugins besitzt ebenfalls eine Default-Konfiguration, welche in<br />

der Datei NxtvepgPluginConf.xml abgelegt ist <strong>und</strong> beim Erstellen des Plugins<br />

ausgelesen wird. Der Inhalt dieser Datei ist in Anhang B aufgeführt.<br />

4.2.5 DVB-EPG-Plugin<br />

Mit Einführung des digitalen Fernsehens wurde vom European Telecommunications<br />

Standards Institute (ETSI) [Ins] der Standard für Digital Video Broadcasting<br />

(DVB) verabschiedet. Dieser legt fest, wie Daten innerhalb des DVB-Stroms angelegt<br />

sind. Der DVB-Strom enthält u.a. Audio- <strong>und</strong> Video-Daten sowie eine Beschreibung<br />

der einzelnen Teilströme. Solche Informationen werden Service Information<br />

Tables [ETS04b] genannt. Die für diese Arbeit relevante Tabelle heißt Event<br />

Information Table (EIT). In ihr sind Informationen über TV-Programme gesammelt.<br />

Die EIT ist in Sektionen mit einer maximalen Länge von 4069 Bytes unterteilt.<br />

Der Service-Information-Bit-Strom sollte mindestens 2 Sektionen pro Service<br />

enthalten, die Informationen über das laufende <strong>und</strong> das folgende Programm beinhalten<br />

[ETS04a]. Für die Zuordnung zu einem Sender enthält jede Sektion Informationen<br />

über den Service, für den sie Daten bereitstellt, in denen mindestens die


4.2. QUELLEN FÜR EPG-INFORMATIONEN<br />

Abbildung 4.15: Die Klasse DVBEPGPlugin erbt von TVGuidePlugin <strong>und</strong><br />

implementiert zusätzlich das Interface IDVBEPGPlugin.<br />

Abbildung 4.16: Dieser Graph sammelt EPG-Informationen von DVB, die vom<br />

DVBReadNode direkt zum TVGuide gesendet werden. Der DevNullNode<br />

dient als Senke des Graphen <strong>und</strong> verwirft die eingehenden Audio- <strong>und</strong> Videodaten,<br />

da diese für die Zwecke des EPG irrelevant sind.<br />

Startzeit <strong>und</strong> die Länge <strong>eines</strong> Programms angegeben sind. Optional können weitere<br />

Informationen übertragen werden, wie z.B. eine Kurzbeschreibung, die meist den<br />

Titel enthält.<br />

Um die EPG-Daten aus dem DVB-Strom zu extrahieren, wurde das DVBEPGPlugin<br />

realisiert (siehe Abbilding 4.15), das den in <strong>NMM</strong> vorhandenen DVBReadNode<br />

aus [BCE + 02] verwendet. Dieser greift zum Ansteuern einer DVB-Karte auf Methoden<br />

des VDR [Sch] aus Abschnitt 2.3.2 zurück. Dazu zählt auch die Funktionalität<br />

zum Auslesen der EPG-Daten. Sie war zunächst deaktiviert, was für<br />

diese Arbeit wieder rückgängig gemacht wurde. Der Knoten wurde insofern erweitert,<br />

dass er die EPG-Daten in Objekten der ChannelDescription- <strong>und</strong><br />

ProgramDescription-Klassen speichert <strong>und</strong> dem EPG hinzufügt. Da der VDR<br />

die ausgelesenen Daten im Hauptspeicher in eigenen Datenstrukturen verwaltet,<br />

bietet die Stelle vor dem Speichern den Ansatzpunkt die Informationen abzugreifen<br />

<strong>und</strong> an den EPG zu senden. Zum Sammeln der Daten wird ein Flussgraph erstellt,<br />

der aus dem DVBReadNode verb<strong>und</strong>en mit einem DevNullNode, besteht<br />

(siehe Abbildung 4.16).<br />

Das ITVGuide-Interface muss beim DVBReadNode registriert werden, wodurch<br />

63


KAPITEL 4. Realisierung einer elektronischen Programmzeitschrift<br />

64<br />

Abbildung 4.17: Die Klasse DVBReadNodeTVGuideManager verwaltet bei<br />

dem DVBReadNode registrierte EPGs.<br />

diesem mitgeteilt wird, wohin die EPG-Daten zu senden sind. Aus diesem Gr<strong>und</strong><br />

implementiert der DVBReadNode das ITVGuideProducer-Interface. Auf diese<br />

Weise können die aus den EPG-Informationen des DVB-Stroms erstellten Objekte<br />

der ChannelDescription- bzw. ProgramDescription-Klasse dem<br />

EPG hinzugefügt werden. Damit mehrere EPGs von der gleichen TV-Quelle Daten<br />

sammeln können <strong>und</strong> um sicher zu stellen, dass es innerhalb des DVBReadNode<br />

während <strong>eines</strong> Zugriffs auf das ITVGuide-Interface keine Speicherzugriffsfehler<br />

beim Freigeben des Knoten entstehen, weil das Interface zu früh gelöscht wird,<br />

werden die registrierten ITVGuide-Interfaces innerhalb der Klasse DVBRead-<br />

NodeTVGuideManger verwaltet, dessen Klassendiagramm in Abbildung 4.17<br />

zu sehen ist. Sie ist als Singleton realisiert um innerhalb des DVBReadNodes auf<br />

die gleiche Instanz zugreifen zu können. Der DVBReadNode übergibt ihr die aus<br />

den erhaltenen Programm-Informationen erstellten ProgramDescriptions, welche<br />

von dem DVBReadNodeTVGuideManager an die registrierten EPGs weitergeleitet<br />

wird. Zuvor wird von dem entsprechenden EPG die festgelegte Priorität<br />

für Informationen von DVB erfragt <strong>und</strong> in der ProgramDescription gesetzt,<br />

damit die Daten innerhalb des EPGs korrekt einsortiert werden können. Das Festlegen<br />

der Prioritäten wird in Abschnitt 4.3 behandelt.<br />

Damit auch Daten von allen verfügbaren Kanälen gesammelt werden, schaltet das<br />

Plugin automatisch per default im zeitlichen Abstand von 60 Sek<strong>und</strong>en die Kanäle<br />

weiter. Dazu wird die TVManager-Klasse verwendet, welche innerhalb des Plugins<br />

erstellt wird. Sie dient dem Berücksichtigen anderer Verwendungszwecke des<br />

Knotens <strong>und</strong> sucht ggf. eine neue TV-Karte als Quelle. Die Klasse TVManager<br />

wird in Abschnitt 5.3.6 im Detail vorgestellt.<br />

4.3 Verwaltung der EPG-Informationen<br />

Die von den Plugins gesammelten EPG-Informationen sollen nun auf der Festplatte<br />

abgespeichert werden. Zu Beginn war dabei die Frage nach der Art <strong>und</strong> Weise des<br />

Speicherns der Daten zu beantworten. Zur Auswahl standen eine ausgewachsene<br />

Datenbank <strong>und</strong> das Speichern in XML-Dateien. Letztendlich fiel die Entscheidung


4.3. VERWALTUNG DER EPG-INFORMATIONEN<br />

zugunsten des Speicherns in XML-Dateien, da das Installieren einer Datenbank<br />

wie MySQL [MyS] zusätzlich zu <strong>NMM</strong> sehr umständlich erschien. Die Struktur<br />

von XML reicht für diese Zwecke völlig aus. Zudem stellt <strong>NMM</strong> schon Klassen<br />

zum Parsen von XML-Dateien bereit, welche die Bibliothek libxml2 [lib] verwenden.<br />

Deshalb wurden erste <strong>Implementierung</strong>en der Datenverwaltung durch Verwendung<br />

der <strong>NMM</strong>-Klassen <strong>und</strong> damit der libxml2 realisiert. Sie wurde im Laufe dieser<br />

Arbeit jedoch durch die Xerces-c-Bibliothek [Apa] ersetzt, da diese eine bessere<br />

Performance bietet, was bei Messungen festgestellt wurde.<br />

Als Testsystem diente ein PC mit AMD Athlon 3.2GHz-CPU <strong>und</strong> 512MB DDR-<br />

SDRAM. Als Bibliotheken kamen libxml2 in Version 2.4.23 <strong>und</strong> Xerces-c in Version<br />

2.6 zum Einsatz. Der zu parsende XML-Baum hatte folgenden Aufbau:<br />

<br />

<br />

<br />

Titel<br />

Beschreibung<br />

Kategorie<br />

<br />

...<br />

<br />

Dabei sind die programme-Elemente für den ersten Durchlauf 100 mal, im zweiten<br />

500 mal <strong>und</strong> im dritten 1000 mal wiederholt worden. Der Benchmark umfasste<br />

das Auslesen des XML-Baumes aus einer Datei, dessen Parsen sowie das Schließen<br />

der Datei <strong>und</strong> das Freigeben der verwendeten Ressourcen.. Dies wurde pro<br />

Datei 100 mal wiederholt <strong>und</strong> aus den ermittelten Zeiten der Durchschnitt errechnet.<br />

Zum Ansprechen der libxml2 diente die in <strong>NMM</strong> vorhandene Wrapper-Klasse<br />

XMLTree, während die Xerces-c-Bibliothek direkt über ihre C++-API angesprochen<br />

wurde. Die ermittelten Ergebnisse sind in folgender Tabelle sowie in Abbildung<br />

4.18 dargestellt:<br />

libxml2 Xerces-c<br />

100 0.008 s 0.004 s<br />

500 0.043 s 0.022 s<br />

1000 0.086 s 0.045 s<br />

Daraus ist ein deutlicher Geschwindigkeitsvorteil auf Seiten der Xerces-c-Bibliothek<br />

zu sehen, weshalb diese schließlich bei der <strong>Implementierung</strong> der Datenhaltung des<br />

EPG zum Einsatz kam.<br />

Als Struktur für die XML-Datei dient das XMLTV-Format, das bereits in Abschnitt<br />

4.2 vorgestellt wurde. Zur Verwaltung der EPG-Informationen wurde die<br />

Klasse TVGuideDataManagement entwickelt, die neue Informationen in die<br />

Daten der XML-Dateien einsortiert <strong>und</strong> bei einer Anfrage aus diesen ausliest. Das<br />

65


KAPITEL 4. Realisierung einer elektronischen Programmzeitschrift<br />

66<br />

Abbildung 4.18: Performancevergleich zwischen den XML-Parsern der Bibliotheken<br />

libxml2 <strong>und</strong> Xerces-c.<br />

Klassendiagramm ist in Abbildung 4.19 zu sehen. Die XML-Dateien werden in<br />

einer Verzeichnis-Struktur gespeichert, welche in Abbildung 4.20 veranschaulicht<br />

wird. Das EPG-Verzeichnis enthält zwei Dateien mit Namen channels.xml,<br />

welche die bekannten Kanäle enthält, <strong>und</strong> categories.xml, in denen die bereits<br />

bekannten Kategorien gespeichert werden. Dies dient dem schnellen Zugriff<br />

auf diese Listen. So muss nicht der gesamte Datenbestand durchsucht werden um<br />

alle verfügbaren Kategorien <strong>und</strong> Kanäle zu ermitteln. Weiterhin ist für jeden Kanal<br />

ein Unterverzeichnis angelegt, in dem die Programm-Informationen abgelegt werden.<br />

Der Name des Unterverzeichnisses wird durch die entsprechende Kanal-ID<br />

festgelegt. Diese wird von dem EPG-Plugin bestimmt, das den Kanal dem EPG<br />

hinzugefügt hat. Dort wird für jeden Tag eine eigene Datei erstellt, in der die Informationen<br />

in einem XML-Baum chronologisch nach ihrer Startzeit gespeichert<br />

werden. Der Dateiname setzt sich aus dem Tagesdatum <strong>und</strong> dem Suffix .xml zusammen,<br />

wobei das Datum in der Form YYYYMMDD dargestellt wird. Durch diese<br />

Art der Datenhaltung ist bei einer Abfrage ein erneutes Sortieren der Daten nicht<br />

notwendig. Somit wird der Zeitaufwand reduziert, da eine Abfrage zeitkritischer<br />

ist als das Einsortieren der Daten.<br />

Eine wichtige Rolle beim Ablegen oder Erfragen von Daten spielt die angegebene<br />

Zeit oder der Zeitraum, für den Daten abgelegt oder erfragt werden sollen. Zu<br />

berücksichtigen ist die Zeitverschiebung zwischen dem Client, der die Daten abruft,<br />

<strong>und</strong> dem Server, der sie bereitstellt. Dies spielt im lokalen Fall keine Rolle,<br />

kann jedoch bei einem Zugriff über das Netzwerk zu falschen Informationen führen.<br />

Um die entsprechenden Umrechnungen zu vereinfachen <strong>und</strong> eine einheitliche<br />

Datenhaltung garantieren zu können, werden die Zeiten der Daten in Coordinated<br />

Universal Time (UTC) [Wike] gespeichert. Der Client muss dann zur Anzeige<br />

die Zeiten wieder in seine lokale Zeitzone konvertieren, wie in Abschnittt 4.2.2<br />

gezeigt.


4.3. VERWALTUNG DER EPG-INFORMATIONEN<br />

Abbildung 4.19: Die Klasse TVGuideDataManagement verwaltet die EPG-<br />

Informationen.<br />

Abbildung 4.20: EPG-Daten werden in dem Verzeichnis epg gespeichert. Darin<br />

werden die Dateien channels.xml <strong>und</strong> categories.xml angelegt. Zusätzlich<br />

wird zu jedem Sender ein eigenes Unterverzeichnis erstellt, das die Daten für<br />

die einzelnen Tage auflistet <strong>und</strong> nach der vorhandenen Kanal-ID des Senders benannt<br />

ist.<br />

67


KAPITEL 4. Realisierung einer elektronischen Programmzeitschrift<br />

68<br />

Prioritäten von EPG-Quellen<br />

Ein Anspruch an den EPG ist die Möglichkeit des parallelen Sammelns von Informationen<br />

durch unterschiedliche Quellen. Es ist jedoch nicht gewährleistet, dass<br />

alle Quellen die exakt gleichen Informationen zu entsprechenden Sendungen liefern.<br />

So gibt z.B. DVB aktuellere <strong>und</strong> genauere Informationen bzgl. der Anfangszeiten<br />

als XMLTV. Diese Eigenschaft muss auch beim Einfügen bzw. Aktualisieren<br />

der Daten berücksichtigt werden. Da der EPG jedoch aus den vorhandenen Daten<br />

nicht schließen kann, welche Information die richtige ist, wird eine entsprechende<br />

Reihenfolge der Quellen festgelegt. Daten von höher priorisierten Quellen werden<br />

bevorzugt.<br />

Beispiel<br />

DVB hat eine höhere Priorität als XMLTV. Im EPG existiert nun folgende Information:<br />

ARD 20:15-22:15 James Bond Quelle: XMLTV<br />

Die Informationen, die von DVB kommen, besagen jedoch, dass der Spielfilm 3<br />

Minuten später beginnt:<br />

ARD 20:18-22:18 James Bond Quelle DVB<br />

Der EPG aktualisiert seinen Datenbestand <strong>und</strong> ändert intern die Anfangszeiten der<br />

Sendung.<br />

Die Festlegung der Prioritäten erfolgt über das ITVGuidePlugin-Interface <strong>eines</strong><br />

EPG-Plugins. Diese wird vor der Übertragung <strong>eines</strong> Datensatzes an den EPG<br />

in der ProgramDescription abgelegt, sodass diese beim Einfügen der Daten<br />

in den Datenbestand berücksichtigt werden kann. Im Laufe dieser Arbeit wurde<br />

festgestellt, dass EPG-Informationen von DVB ausführlicher <strong>und</strong> aktueller sind als<br />

nxtvepg, welches wiederum mehr Beschreibung zu Sendungen liefert als XMLTV.<br />

Aus diesem Gr<strong>und</strong> wurden per Default die Prioritäten wie folgt festgelegt:<br />

DVB Besitzt die höchste Priorität. Daten von XMLTV oder nxtvepg können durch<br />

Informationen von DVB ersetzt werden. Für DVB wurde per Default der<br />

Wert 10 festgelegt.<br />

nxtvepg Besitzt geringere Priorität als DVB, jedoch höhere Priorität als XMLTV.<br />

Für nxtvepg wurde per Default der Wert 9 festgelegt.<br />

XMLTV Besitzt die niedrigste Priorität. XMLTV-Daten werden von DVB- oder<br />

nxtvepg-Informationen überschrieben. Für XMLTV wurde per Default der<br />

Wert 5 festgelegt.<br />

Die von den EPG-Plugins gesammelten Daten werden schließlich dem EPG zugesandt,<br />

woraufhin dieser die Informationen in seiner Verzeichnisstruktur ablegt.


4.3.1 Einfügen der Daten<br />

4.3. VERWALTUNG DER EPG-INFORMATIONEN<br />

Die EPG-Plugins liefern zwei Arten von Informationen, welche der EPG verwalten<br />

muss. Dies sind zum einen Daten über Sender <strong>und</strong> zum anderen Programm-<br />

Informationen. Die Daten sind dabei in ProgramDescriptions <strong>und</strong> Channel-<br />

Descriptions gespeichert, wobei jede ProgramDescription die notwendigen<br />

Kanal-Daten als ChannelDescription enthält. Somit kann der EPG<br />

feststellen, welchem Sender die Programm-Informationen zugeordnet sind <strong>und</strong> weiterhin,<br />

ob ihm der Sender schon bekannt ist oder dem Datenbestand hinzugrfügt<br />

werden muss.<br />

Beim Einfügen von Kanälen wird darauf geachtet, dass jeder einzelne nur einmal<br />

im EPG vorhanden ist um eine doppelte Datenhaltung zu vermeiden. Jedoch ist die<br />

Schreibweise von Sendernamen, wie in Abschnitt 4.1 beschrieben, bei verschiedenen<br />

Quellen meist unterschiedlich. Dabei reicht es nicht aus Teile des Namens<br />

zu vergleichen um auf diese Weise gleiche Sender zu ermitteln. Bei den Schreibweisen<br />

’Pro 7’ <strong>und</strong> ’pro sieben’ mag dies zum gewünschten Ergebnis führen, jedoch<br />

würde für die Sender ’RTL’, RTL 2’ sowie ’Super RTL’ ebenfalls festgestellt<br />

werden, dass diese den gleichen Sender beschreiben, was jedoch falsch ist. Um<br />

nunmehr festlegen zu können, dass mehrere Schreibweisen den gleichen Sender<br />

bezeichnen, werden die Namen als Aliase in der Datei channelAliases.xml<br />

angegeben, die im XML-Format vorliegt <strong>und</strong> zuerst bearbeitet werden muss. Diese<br />

Datei ist wie folgt aufgebaut:<br />

<br />

<br />

Pro7<br />

PRO-7<br />

pro sieben<br />

<br />

<br />

ARD<br />

Das Erste<br />

<br />

...<br />

<br />

Zum Einfügen <strong>eines</strong> Kanals in den EPG müssen eine Kanal-ID <strong>und</strong> ein Kanalname<br />

angegeben werden. Daraufhin wird getestet, ob dieser Kanal schon vorhanden ist.<br />

Als erster Test beim Einfügen <strong>eines</strong> Kanals prüft der EPG auf gleiche ID mit schon<br />

vorhandenen Kanal-Informationen. Ist dieser negativ, wird der angegebene Kanalname<br />

geprüft. Dabei müssen alle Namen des vorhandenen Kanals mit denen des<br />

neuen verglichen werden. Ist wiederum keine Übereinstimmung gef<strong>und</strong>en, wird<br />

durch Zugriff auf die Datei channelAliases.xml ermittelt, ob für den einzufügenden<br />

Kanal ein Alias bekannt ist, das einem schon vorhandenen entspricht.<br />

Dazu wird solange für jeden in der ChannelDescription angegebenen Kanal-<br />

Namen die Datei durchsucht, bis er innerhalb <strong>eines</strong> channel-Elements den Namen<br />

findet. Somit sind die bekannten Aliase bestimmt <strong>und</strong> der Name des neuen<br />

Kanals kann damit verglichen werden. Bei fehlender Übereinstimmung wird dieser<br />

hinzugefügt.<br />

69


KAPITEL 4. Realisierung einer elektronischen Programmzeitschrift<br />

70<br />

Auch die Programm-Informationen müssen beim Hinzufügen eine Reihe von Tests<br />

durchlaufen. Generell werden nur Informationen schon bekannter Kanäle gespeichert<br />

<strong>und</strong> dabei auf Überschneidung mit schon vorhandenen Daten getestet. Diese<br />

werden gegebenenfalls entsprechend der festgelegten Prioritäten angepasst. Um<br />

die Ordnung in der Datenbank zu wahren, werden alle eingehenden Informationen<br />

gemäß ihrer Startzeiten in die richtige Position im XML-Baum eingefügt.<br />

Zur Feststellung von Überschneidungen werden die Start- <strong>und</strong> Endzeiten der neuen<br />

Informationen mit vorhandenen verglichen. Dazu werden die gespeicherten Daten<br />

zu dem entsprechenden Tag ermittelt <strong>und</strong> sequentiell getestet.<br />

• Ist für eine bestehende <strong>und</strong> die neue Information die gleiche Startzeit hinterlegt,<br />

wird geprüft, ob es sich um die gleiche Sendung handelt. Dies erfolgt<br />

durch einen Vergleich der angegebenen Titel unter Verwendung von Regulären<br />

Ausdrücken [Fri03]. Der kürzere Titel dient dabei als Muster, mit dem<br />

getestet wird, ob dieses in dem längeren vorhanden ist. Sollte der Test negativ<br />

ausfallen, wird ermittelt, aus welcher Quelle die neue Information stammt.<br />

Ist dieser eine höhere Priorität zugewiesen, werden die vorhandenen Daten<br />

zu der Sendung ersetzt. Im positiven Fall werden die Informationen zusammengeführt.<br />

Dies bedeutet, dass die vorhandene, erweiterte Beschreibung<br />

überprüft wird. Sollte sie mehr Informationen enthalten, wird die Beschreibung<br />

ausgetauscht. Als Kriterium dient dafür die Länge der erweiterten Beschreibungen.<br />

• Sind die Startzeiten unterschiedlich, werden die Informationen hinsichtlich<br />

der Überschneidung einer Sendung überprüft. Dazu muss weiterhin getestet<br />

werden, in wieweit sich die Zeiten überdecken, damit die korrekten Informationen<br />

ersetzt oder zusammengeführt werden können. So ist es unwahrscheinlich,<br />

dass eine Sendung, die von 20:00 Uhr bis 21:00 Uhr läuft, die<br />

gleiche ist wie die von 20:58 Uhr bis 22:00 Uhr gezeigt wird. Zudem reicht<br />

ein einfacher Test bzgl. der Titel der Informationen nicht aus, da bei manchen<br />

Sendern mehrere Folgen einer Serie hintereinander ausgestrahlt werden,<br />

die zwar den gleichen Titel besitzen, sich jedoch im Inhalt <strong>und</strong> damit<br />

in der Beschreibung unterscheiden. Um möglichst sicher zu gehen, dass es<br />

sich um die selbe Sendung handelt, müssen sich die Zeitintervalle um mehr<br />

als 50% überschneiden. Eine 100%ige Überschneidung kann ausgeschlossen<br />

werden, da meist die Länge der Sendung gleich ist, die Anfangs- <strong>und</strong> Endzeiten<br />

jedoch um ein paar Minuten differieren. Beim Experimentieren hat<br />

sich herausgestellt, dass eine Feststellung von mehr als 70% Überschneidung<br />

die gewünschten Ergebnisse liefert. Bei kurzen Sendungen, die nur ein paar<br />

Minuten dauern, wird nur eine Verschiebung von wenigen Minuten berücksichtigt.<br />

Deshalb wird zu den Endzeiten der Sendungen bei der Berechnung<br />

der Überlappung ein Offset von 30 Minuten hinzuaddiert. Das garantiert die<br />

Berücksichtigung einer Verschiebung von mindestens neun Minuten. Sollte<br />

die Überschneidung kleiner als 70% betragen, folgt eine Überprüfung des<br />

nächsten Datensatzes.<br />

Bei einer mehr als 70%igen Überschneidung wird auch hier die Titelangabe<br />

der Informationen verglichen <strong>und</strong> die vorhandenen Daten ggf. zusammenge-


4.3. VERWALTUNG DER EPG-INFORMATIONEN<br />

führt oder, abhängig von der zugewiesenen Priorität der Quelle, ersetzt.<br />

• Anschließend erfolgt die Überprüfung, ob die Sendung, zu der neue Informationen<br />

eintreffen, vor der momentan betrachteten endet. In diesem Fall wird<br />

die neue Information vor ihr eingefügt um die Sortierung der Daten zu beachten.<br />

Sollten unmittelbar vor der momentan untersuchten Sendung schon<br />

Informationen vorhanden sein, wären diese im vorherigen Iterationsschritt<br />

entdeckt worden.<br />

• Sollte die neue Information die bisherigen Tests erfolgreich abgeschlossen<br />

haben, liegt weder eine Überschneidung vor, noch beginnt eine Sendung an<br />

dem entsprechenden Tag nach ihr. Sie kann an die vorhandenen Daten angehängt<br />

werden.<br />

Während der Revision des Algorithmus ergaben sich Gesichtspunkte einer möglichen<br />

Verfeinerung. Es wurde festgestellt, dass vereinzelt schon vorhandene Informationen<br />

zu Sendungen nicht erkannt werden. Dies führt zu doppelten aber nicht<br />

zu fehlenden Daten im EPG. Für die Zukunft könnte der Algorithmus dahingehend<br />

verbessert werden, dass der Offset dynamisch bestimmt wird <strong>und</strong> ggf. zusätzliche<br />

Kriterien zur Feststellung gleicher Sendungen eingeführt werden.<br />

4.3.2 Abfragen <strong>und</strong> Durchsuchen der Daten<br />

Die TVGuide-Klasse bietet die Möglichkeit die Daten nach bestimmten Kriterien<br />

abzufragen. Zu diesem Zweck stellt es über das ITVGuide-Interface mehrere<br />

Methoden zur Verfügung, die den vorhandenen Datzensatz unter Berücksichtigung<br />

unterschiedlicher Kriterien durchsuchen <strong>und</strong> die gef<strong>und</strong>enen Ergebnisse zurückliefern.<br />

Dazu wird zuerst ermittelt, für welchen Kanal Informationen erfragt werden,<br />

was der Festlegung des Unterverzeichnisses dient. Anschließend wird zur Bestimmung<br />

der zu öffnenden Dateien der Zeitraum bzw. Zeitpunkt ausgewertet. Dies erfordert<br />

mindestens die Angabe <strong>eines</strong> solchen, für den Programm-Informationen gesucht<br />

werden sollen. Die Spezifizierung des Senders erfolgt durch Übergabe einer<br />

ChannelDescription, die eine Kanal-ID oder zusätzlich Sendernamen enthalten<br />

kann. Je nach Abfrage können eine oder mehrere ChannelDescriptions<br />

angegeben werden. Ein Abfrage-Szenario wird in Abbildung 4.21 dargestellt. Sie<br />

zeigt die Abfrage von Informationen <strong>eines</strong> Senders für einen Tag <strong>und</strong> stellt die<br />

beteiligten Klassen dar.<br />

Beispiel<br />

Es sollen Informationen für die Sendung auf ARD um 20:15 Uhr <strong>eines</strong> beliebigen<br />

Tages erfragt werden. Dazu wird zuerst das Verzeichnis bestimmt, in dem die<br />

Informationen für ARD abgelegt sind.<br />

Name = Ard => ID = ard.de => Unterverzeichnis ard.de<br />

71


KAPITEL 4. Realisierung einer elektronischen Programmzeitschrift<br />

72<br />

Abbildung 4.21: Bei der Anfrage nach EPG-Informationen für das Tagesprogramm<br />

<strong>eines</strong> Senders erstellt die TVGuide-Klasse einen ProgramFilter<br />

<strong>und</strong> übergibt diesen der search()-Methode der TVGuideDatamanagement-<br />

Klasse. Der TVGuidePeerConnector prüft das Ergebnis auf Vollständigkeit<br />

<strong>und</strong> verteilt ggf. die Anfrage im Netzwerk.<br />

Anschließend wird die Datei festgelegt, welche die Informationen des entsprechenden<br />

Tages beinhaltet, wobei der Dateiname dem Tages-Datum entspricht. In dieser<br />

Datei wird nach der Sendung gesucht, die entweder um 20:15 Uhr beginnt oder<br />

gerade abläuft. Diese Information wird zurückgeliefert.<br />

Im Folgenden werden nun die zur Verfügung stehenden Abfrage-Methoden für<br />

Programm-Informationen des ITVGuide-Interface sowie deren Vorgehensweisen<br />

vorgestellt.<br />

search(ProgramFilter)<br />

Diese Methode liefert Informationen zu allen Sendungen, die zu dem angegebenen<br />

ProgramFilter passen.<br />

Bei einer Suchanfrage müssen Informationen übergeben werden, die eine Suchmaske<br />

beschreiben. Für diesen Zweck werden diese in einer serialisierbaren Datenstruktur<br />

gespeichert, damit sie auch zu entfernten EPGs übertragen werden können,<br />

wozu die Klasse ProgramFilter (siehe Abbildung 4.22) bereitgestellt wird.<br />

Diese Klasse beschreibt eine Suchmaske zum Filtern der Daten des EPG. Jene unterstützt<br />

die Einschränkung der Suche unter Berücksichtigung folgender Kriterien:<br />

Kanäle Mit Hilfe der Methode addChannel(ChannelDescription) kann<br />

die Suche auf angegebene Sender eingeschränkt werden. Die Sender-Informationen<br />

werden in einer ChannelDescription gespeichert, welche<br />

dem ProgramFilter hinzugefügt wird.<br />

Zeitraum Unter Verwendung der Methoden setStartTime() <strong>und</strong> setEnd<br />

Time() kann ein Zeitraum angegeben werden, für den Informationen gesucht<br />

werden sollen. Fehlen diese Informationen, werden alle vorhandenen<br />

Daten durchsucht.


4.3. VERWALTUNG DER EPG-INFORMATIONEN<br />

Abbildung 4.22: Die Klasse ProgramFilter speichert eine Suchmaske zum<br />

Durchsuchen der EPG-Daten.<br />

Schlagwort Durch die Methode setSearchPhrase() kann ein Schlagwort in<br />

Form <strong>eines</strong> Regulären Ausdrucks angegeben werden, der auf Titel <strong>und</strong> die<br />

erweiterte Beschreibung der Programm-Informationen angewendet wird.<br />

Kategorien Mit Hilfe der Methode addCategory() kann nach Sendungen gesucht<br />

werden, die in eine der angegebenen Kategorien passen.<br />

Die search(...)-Methode findet vorhandene Informationen, die vor dem Anfangszeitpunkt<br />

des Intervalls beginnen <strong>und</strong> innerhalb dessen oder nach dem Endzeitpunkt<br />

enden oder innerhalb des angegebenen Zeitintervalls beginnen.<br />

Bei einer Suchanfrage sind zuerst die in der ProgramFilter-Klasse angegeben<br />

Zeiten in UTC umzurechnen. Anschließend werden die angegebenen Kanäle ermittelt,<br />

welche die zu durchsuchenden Unterverzeichnisse festlegen. Anhand des<br />

angegebenen Zeitraums werden die Dateien in Erfahrung gebracht, aus denen die<br />

Informationen zu ermitteln sind. Bei fehlender Angabe des Zeitraums werden alle<br />

in einem Unterverzeichnis enthaltenen Dateien durchsucht.<br />

Für jede Datei werden anschließend, unter Berücksichtigung des Zeitraums, die<br />

enthaltenen XML-Daten ausgewertet. Dazu gehören Informationen zu Sendungen,<br />

deren Startzeit in den angegebenen Zeitraum fallen. Sie werden hinsichtlich der in<br />

der ProgramFilter-Klasse angegebenen Schlagwörter geprüft. Dies geschieht<br />

unter Verwendung von Regulären Ausdrücken, die auf Titel <strong>und</strong> Beschreibung der<br />

Sendungsinformationen angewendet werden. Zuletzt werden die angegebenen Kategorien<br />

auf Übereinstimmung mit einer zu der Sendung gespeicherten getestet.<br />

Die auf diese Weise gef<strong>und</strong>enen Informationen werden in ProgramDescriptions<br />

gespeichert <strong>und</strong> der Rückgabeliste hinzugefügt, welche nach dem Ende der<br />

Suche an den Anwender zurückgeliefert wird. Die Informationen sind nach Kanälen<br />

sortiert in der Reihenfolge, wie sie im ProgramFilter angegeben sind, da<br />

73


KAPITEL 4. Realisierung einer elektronischen Programmzeitschrift<br />

74<br />

die Verzeichnisse nach dieser Reihenfolge durchsucht werden. Die Daten zu Programmen<br />

<strong>eines</strong> Senders sind auf Gr<strong>und</strong> der Sortierung nach Startzeiten innerhalb<br />

der XML-Dateien des EPG auch in der Rückgabeliste nach Startzeiten geordnet.<br />

Der EPG unterstützt zur einfachen Handhabung spezielle Abfrage-Methoden, die<br />

im Folgenden vorgestellt werden.<br />

getEventsOnDayOnChannel(day, channel)<br />

Diese Methode liefert Informationen zu allen Sendungen, die an einem bestimmten<br />

Tag auf dem angegebenen Kanal laufen.<br />

Die Abfrage wird mit Hilfe der Funktion search(ProgramFilter) durchgeführt,<br />

wobei sich der in Frage kommende Zeitraum von 05:00 Uhr bis 04:59 Uhr<br />

des Folgetages erstreckt. Er richtet sich nach der Konvention, dass in vielen Programmzeitschriften<br />

der Tag um 05:00 Uhr morgens beginnt <strong>und</strong> um 05:00 Uhr des<br />

Folgetages endet. Die Methode liefert alle Sendungen zurück, die innerhalb des<br />

gesuchten Tages beginnen. Deshalb wird das Resultat des search()-Methode<br />

dahingehend geprüft, ob die Startzeit der ersten Sendung außerhalb des Intervalls<br />

liegt. Ist dies der Fall, wird sie entfernt <strong>und</strong> die restlichen Informationen werden<br />

zurückgeliefert. Die Zeitinformationen werden durch die Klasse LocalTime<br />

übertragen. Von diesen werden lediglich die Daten zu dem angegebenen Tag, Monat<br />

<strong>und</strong> Jahr ausgewertet. Auf dieser Basis werden die Anfangs- <strong>und</strong> Endzeit für<br />

das Suchintervall festgelegt <strong>und</strong> in dem ProgramFilter gesetzt, welcher der<br />

search-Methode übergeben wird.<br />

getEvent(start, end, channel)<br />

Diese Methode liefert Informationen zu der Sendung, die in dem angegebenen Zeitraum<br />

auf dem entsprechenden Kanal als erste gef<strong>und</strong>en wird.<br />

Hierbei werden nur Informationen zu einer einzigen Sendung zurückgeliefert. Dazu<br />

legen start <strong>und</strong> end den Zeitraum, channel den Kanal fest, für den die<br />

Sendung gesucht werden soll. Zurückgegeben wird das erste Event, dessen Startzeit<br />

in diesem Intervall gef<strong>und</strong>en wurde oder das sich mit diesem deckt.<br />

Zur Ermittlung der gewünschten Information wird auf die search-Methode zurückgegriffen.<br />

Aus den Parametern der getEvent-Methode wird ein Program-<br />

Filter erstellt <strong>und</strong> der search-Methode übergeben. Von den enthaltenen Ergebnissen<br />

wird das erste Element der ProgramDescription-Liste zurückgeliefert.


getCurrent/FollowingEventOnChannel(channel)<br />

4.4. VERTEILUNG EINER ANFRAGE IM NETZWERK<br />

getCurrentEventOnChannel(channel)liefert Informationen zu der Sendung,<br />

die zur Zeit auf dem angegeben Kanal läuft, getFollowingEventOn-<br />

Channel(channel) liefert Informationen zu der nachfolgenden.<br />

Bei dieser Abfrage wird zuerst die aktuelle Uhrzeit bestimmt <strong>und</strong> die gespeicherten<br />

Daten nach der Sendung durchsucht, die zu diesem Zeitpunkt laufen oder beginnen<br />

soll. Bei der Suche nach der nachfolgenden Sendung wird der nächste Datensatz in<br />

der Datenbank zurückgeliefert. Dabei muss geprüft werden, ob dieser noch in der<br />

aktuell geöffneten Datei zu finden ist. Ist das nicht der Fall, wird der erste Datensatz<br />

aus der Datei des nächsten Tages zurückgeliefert. Da alle Informationen in einem<br />

XML-Baum nach Startzeiten geordnet sind, reicht diese Vorgehensweise aus.<br />

Die search()-Methode wird lediglich bei der Suche nach Informationen zur<br />

laufenden Sendung verwendet. Dabei wird die aktuelle Uhrzeit ermittelt <strong>und</strong> als<br />

Start- <strong>und</strong> Endzeit in dem ProgramFilter gesetzt.<br />

Bei der Suche von nachfolgenden Sendungen kann kein geeignetes Zeitintervall<br />

angegeben werden, da Sendungen unterschiedliche Startzeiten besitzen. Eine Möglichkeit<br />

wäre alle Sendungen von jetzt an mit der search()-Methode zu suchen<br />

um anschließend die Sendung nach der aktuellen zurückzugeben. Aus Effizienzgründen<br />

wurde jedoch auf diese Art der <strong>Implementierung</strong> verzichtet, sodass die<br />

Suche nach folgenden Sendungen in einer eigenen Methode realisiert wurde. Weiterhin<br />

muss auch auf den Vorgänger der folgenden Sendung geachtet werden, was<br />

bei der Entscheidung die Anfragen im Netzwerk zu verteilen, wie in Abschnitt 4.4<br />

beschrieben, berücksichtigt wird. Ist die Endzeit des Vorgängers gleich der ihr folgenden<br />

Sendung, muss die Anfrage nicht verteilt werden. Zur Vereinfachung der<br />

Anfrage des Search-Zustandes, der in Abschnitt 4.5.2 erläutert wird <strong>und</strong> zur einfachen<br />

Verteilung einer Anfrage im Netzwerk greift die search(...)-Methode<br />

auf getCurrentEventOnChannel(...) <strong>und</strong> getFollowingEventOn-<br />

Channel(...) zurück. So kann in der ProgramFilter-Klasse durch die<br />

Methoden setCurrentEvents(...)bzw. setFollowingEvents(...)<br />

festgelegt werden, dass nach Informationen zu momentan laufenden oder folgenden<br />

Sendungen gesucht werden soll.<br />

4.4 Verteilung einer Anfrage im Netzwerk<br />

Wie bereits erwähnt, kann es vorkommen, dass lokal verwendbare EPG-Quellen<br />

lediglich einen bestimmten Zeitraum bzw. bestimmte Sender abdecken. Als Konsequenz<br />

daraus existieren nicht zu allen empfangbaren Sendern Programm-Informationen.<br />

Diese können jedoch wiederum von anderen EPG-Quellen zur Verf ¨gung gestellt<br />

werden, die auf dem lokalen Rechner nicht verwendet werden können. Diese<br />

Daten müssen auf anderem Wege beschafft werden. Durch den möglichen Zugriff<br />

auf im Netzwerk verteilte EPGs können dort lokal fehlende Daten erfragt werden.<br />

Dies wird durch die in diesem Abschnitt vorgestellte Peer-to-Peer-Funktionalität<br />

75


KAPITEL 4. Realisierung einer elektronischen Programmzeitschrift<br />

76<br />

analoge<br />

TV-Karte<br />

Kanäle:<br />

ARD<br />

ZDF<br />

Applikation<br />

mit lokalem EPG<br />

Netzwerk<br />

Netzwerk<br />

TVGuide<br />

digitale<br />

TV-Karte<br />

Kanäle:<br />

Sat. 1<br />

Pro 7<br />

TVGuide<br />

Internet<br />

EPG-Quelle<br />

Kanäle:<br />

RTL<br />

RTL2<br />

Zugriff auf EPG-Quellen<br />

Zugriff auf andere EPGs<br />

Abbildung 4.23: Die lokale Anwendung sammelt selbst keine EPG-Daten, sondern<br />

erfragt ihre EPG-Daten über die Peer-to-Peer-Funktion des EPG. Die verwendeten<br />

Quellen der EPGs stellen Informationen für unterschiedliche Kanäle bereit.<br />

des EPGs realisiert. Dabei gilt es nach Möglichkeit nur bei Bedarf im Netzwerk<br />

nachzufragen um unnötige Übertragungen zu vermeiden. Dazu muss zuerst festgestellt<br />

werden, ob Daten fehlen. Abbildung 4.23 zeigt ein mögliches Szenario zur<br />

Verwendung der Peer-to-Peer-Funktion. Der EPG der lokalen Anwendung sammelt<br />

selbst keine EPG-Daten, sondern erfragt die Informationen bei Bedarf von<br />

anderen im Netzwerk verteilten EPGs. Die von ihnen verwendeten Quellen stellen<br />

alle unterschiedliche Kanäle bereit.<br />

Zunächst gilt es deshalb zu ermitteln, zu welchen Kanälen Informationen im Netzwerk<br />

bereitgestellt werden. Dazu wird bei der Abfrage der Kanalliste des EPGs<br />

diese Anfrage ins Netzwerk weitergeleitet. Diese Informationen sind jedoch statisch,<br />

d.h. sie ändern sich nicht mehr, wenn der EPG alle Kanäle kennt, für die<br />

er Daten bereitstellen kann. Daher muss die Anfrage lediglich einmal beim Starten<br />

des Programms vorgenommen werden. Dazu merkt sich der EPG, ob sie schon einmal<br />

im Netzwerk verteilt wurde <strong>und</strong> leitet zukünftige Anfragen nicht mehr weiter.<br />

Bei Programm-Informationen ist dies anders, weil immer wieder Daten für die<br />

nächsten Tage hinzukommen. Eine Möglichkeit wäre, die lokal gespeicherten Informationen<br />

in regelmässigen Abständen auf fehlende Daten zu überprüfen. Dies<br />

kann jedoch je nach Umfang der Daten eine gewisse Zeit dauern, bis die gewünsch-


4.4. VERTEILUNG EINER ANFRAGE IM NETZWERK<br />

Auszug aus dem lokalen Abfrageergebniss für ARD<br />

17:00 17:05 20:00 20:15<br />

Tagesschau fehlende Daten Tagesschau<br />

Anfrage an entfernten EPG:<br />

Startzeit: 17:05 Uhr<br />

Endzeit : 20:00Uhr<br />

Kanal : ARD<br />

Abbildung 4.24: Der lokale EPG stellt keine Daten für den Zeitraum von 17:05 Uhr<br />

bis 20:00 Uhr zur Verfügung. Für dieses Intervall wird eine Anfrage im Netzwerk<br />

gestellt.<br />

ten Daten verfügbar sind. Angenommen die Kanäle ARD, ZDF <strong>und</strong> RTL sind dem<br />

EPG bekannt. In dieser Reihenfolge werden nun die gespeicherten Informationen<br />

überprüft. Die Daten von ARD werden auf Lücken untersucht. Daraufhin werden<br />

Programm-Informationen für RTL abgefragt, die jedoch unvollständig sind. Der<br />

Benutzer muss nun solange warten, bis auch die Daten von ZDF auf Vollständigkeit<br />

geprüft wurden, bis Daten für RTL gesucht werden.<br />

Deshalb werden die Anfragen on demand verteilt, d.h., wenn bei einer Abfrage des<br />

lokalen EPGs das Fehlen von Daten erkannt wird, werden nur Anfragen für diese<br />

Daten gestellt. Bei einer Abfrage werden zuerst die lokalen Daten durchsucht<br />

<strong>und</strong> die Rückgabeliste auf Vollständigkeit geprüft. Zu diesem Zweck werden die<br />

Start- <strong>und</strong> Endzeiten der Programm-Informationen dahingehend verglichen, ob die<br />

Sendungen direkt aufeinanderfolgen. Sollte eine Lücke entdeckt werden, wird im<br />

Netzwerk für den ermittelten Zeitraum nachgefragt. Abbildung 4.24 stellt eine solche<br />

Lücke graphisch dar. Für die Zeit von 17:05 Uhr bis 20:00 Uhr fehlen dem<br />

lokalen EPG Programm-Informationen für den Sender ARD. Für diesen Zeitraum<br />

sollen nun Daten von entfernten EPGs erfragt werden.<br />

In manchen Fällen ist es jedoch nicht möglich einen Zeitraum festzulegen. Dies<br />

trifft für solche Abfragen zu, bei denen Informationen zu einer bestimmten Sendung<br />

erfragt werden, wie bei einer Abfrage über Informationen zur aktuellen Sendung<br />

durch die Methode getCurrentEventOnChannel(). Dann wird in Erfahrung<br />

gebracht, ob die Suche in den lokalen Daten ein Ergebnis lieferte wobei<br />

überprüft wird, ob die erhaltene ProgramDescription Informationen enthält.<br />

Andernfalls wird bei entfernten EPGs angefragt. Bei der Suche einer nachfolgenden<br />

Sendung mittels getFollowingEventOnChannel()wird bei der<br />

lokalen Suche getestet, ob sich die gef<strong>und</strong>ene Sendung unmittelbar an die vorhergehende<br />

anschließt. Sollte dies der Fall sein, wird auf eine Anfrage im Netzwerk<br />

verzichtet, weil keine Lücke vorhanden ist. Zur verteilten Suche wird ein<br />

ProgramFilter verwendet, bei dem durch dessen Methoden getCurrent-<br />

Events() bzw. getFollowing Events() die entsprechenden Flags zur Su-<br />

77


KAPITEL 4. Realisierung einer elektronischen Programmzeitschrift<br />

78<br />

Durch diesen Zugriff<br />

würde eine Schleife<br />

entstehen, wodurch die<br />

Anfrage unendlich im<br />

Netzwerk zirkulieren<br />

würde. Das muss<br />

vermieden werden.<br />

analoge<br />

TV-Karte<br />

Applikation<br />

mit lokalem EPG<br />

Netzwerk<br />

Netzwerk<br />

TVGuide<br />

digitale<br />

TV-Karte<br />

TVGuide<br />

Internet<br />

EPG-Quelle<br />

Zugriff auf EPG-Quellen<br />

Zugriff auf andere EPGs<br />

Abbildung 4.25: Die lokale Anwendung sammelt selbst keine EPG-Daten, sondern<br />

erfragt ihre Informationen über die Peer-to-Peer-Funktion des EPG. Dabei<br />

muss jedoch verhindert werden, dass einer der EPGs die Anwendung wiederum<br />

nach Informationen befragt. Dadurch würde eine Anfrage unendlich im Netzwerk<br />

zirkulieren.<br />

che nach aktuellen bzw. folgenden Sendungen gesetzt werden.<br />

Ein Sonderfall stellt die Suche mittels der search()-Methode dar. Durch die Angabe<br />

von Schlagwörtern oder das Einschränken auf Kategorien kann nicht sicher<br />

überprüft werden, ob die Informationen vollständig sind. Die Suche wird deshalb<br />

generell im Netzwerk verteilt um für diese Abfrage ein möglichst umfassendes<br />

Ergebnis zu erhalten.<br />

Zu Beginn muss dem EPG mitgeteilt werden, welche Rechner bereitstehen, die bei<br />

Bedarf befragt werden können. Diese werden in den Konfigurations-Einstellungen<br />

der Anwendung festgelegt <strong>und</strong> von der TVGuideConfigurator-Klasse aus<br />

Abschnitt 4.2 ermittelt <strong>und</strong> gesetzt. Die entfernten EPGs wiederum können die<br />

Anfrage zu weiteren ihnen bekannten Rechnern weiterleiten, wobei jedoch eine<br />

Schleife vermieden werden muss, d.h. jede einzelne Anfrage darf in dem gesamten<br />

Peer-to-Peer-Netzwerk an jeden EPG genau nur einmal gestellt werden. Ein<br />

solches Szenario ist in Abbildung 4.25 gezeigt wo die Anfrage an den EPG der<br />

Anwendung gestellt wird, welche diese initiiert hat. Dadurch würde die Anfrage<br />

unendlich im Netzwerk zirkulieren <strong>und</strong> immer wieder Daten liefern, welche dem<br />

EPG schon bekannt sind. Aus diesem Gr<strong>und</strong> wird bei einer Suche im Netzwerk zusätzlich<br />

eine Liste von Rechnernamen übertragen, die angibt, welche die Anfrage


4.4. VERTEILUNG EINER ANFRAGE IM NETZWERK<br />

Abbildung 4.26: Die Klasse TVGuidePeerConnector.<br />

schon einmal bearbeitet haben. Bei der Weiterleitung der Suche wird geprüft, ob<br />

der nächste Rechner in der Liste der schon befragten enthalten ist. Sollte dies nicht<br />

der Fall sein, wird die Anfrage an ihn gestellt. Dazu stellt der ProgramFilter<br />

die Methoden addPeerHost() <strong>und</strong> containsPeerHost(string) bereit,<br />

über die ermittelt werden kann, welche Rechner die Anfrage bereits passiert hat.<br />

Somit lässt sich auch später noch feststellen, welchen Weg die Anfrage durch das<br />

Netzwerk genommen hat.<br />

Zur Realisierung der Peer-to-Peer-Funktionalität wurde die Klasse TVGuide-<br />

PeerConnector entwickelt (siehe Abbildung 4.26). Sie dient der Erkennung<br />

unvollständiger Abfrage-Ergebnisse <strong>und</strong> erfragt bei entfernten EPGs fehlende Daten.<br />

Zur Erkennung von Lücken wird der Abfrage-Zeitraum berücksichtigt, für den<br />

Daten angefordert werden. In Abschnitt 4.3 wurde bereits beschrieben, dass bei einer<br />

Abfrage die Daten nach Startzeiten sortiert sind. Dadurch entfällt ein erneutes<br />

Sortieren vor der Lückenermittlung. War die lokale Abfrage ergebnislos, kann die<br />

volle Anfrage an die verteilten EPG’s gestellt werden.<br />

Zur Lückenermittlung der Abfrageergebnisse für einen Sender stellt der TVGuide-<br />

PeerConnector die verify()-Methode bereit. Neben der Ergebnisliste <strong>und</strong><br />

der Kanal-Information erhält diese Methode einen Zeitraum, der durch eine Start<strong>und</strong><br />

eine Endzeit festgelegt ist. Die Kanal-Informationen müssen übergeben werden<br />

um auch bei einer leeren Ergebnisliste festzustellen, für welchen Sender EPG-<br />

Daten erfragt werden sollen. Die Methode prüft nun, ob der Zeitraum von den Informationen<br />

in der Ergebnisliste komplett abgedeckt ist. Bei der Lückenermittlung<br />

werden die Startzeit einer Sendung mit der Endzeit der vorangegangenen verglichen.<br />

Ist die Endzeit kleiner als die Startzeit wird ein ProgramFilter erstellt,<br />

unter Verwendung dessen eine Anfrage im Netzwerk gestellt wird. Dieser enthält<br />

die Zeiten welche die Lücke beschreiben als zu durchsuchendes Zeitintervall sowie<br />

die Kanal-Informationen, die bei dem verify()-Aufruf übergeben wurden.<br />

Durch dieses Vorgehen werden bei einem entfernten EPG lediglich nach den benötigten<br />

Programm-Informationen gesucht, was den Vorgang beschleunigt.<br />

79


KAPITEL 4. Realisierung einer elektronischen Programmzeitschrift<br />

80<br />

Abbildung 4.27: Verteilung einer Anfrage am Beispiel der Suche mittels der<br />

search(...)-Methode. Nach der Suche in den lokalen EPG-Daten wird die<br />

Suche unter Verwendung der Klasse TVGuidePeerConnector im Netzwerk<br />

verteilt. Da dies im Hintergr<strong>und</strong> geschieht, kehrt die search()-Methode nach<br />

dem Initiieren der Anfrage zurück. Ist die Suche des entfernten TVGuide beendet,<br />

werden die Daten dem loaklen EPG zugeführt.<br />

Verteilung der Anfrage<br />

Bei der Verteilung einer Anfrage im Netzwerk wurde darauf geachtet, dass lokale<br />

Ergebnisse schnell zur Anwendung zurückgelangen. Dies erfordert eine nichtblockierende<br />

Abfrage entfernter Rechner, d.h. der lokale EPG kehrt nach der lokalen<br />

Suche aus der Methode zurück. Im Hintergr<strong>und</strong> wird nun die Anfrage an den<br />

entfernten EPG weitergeleitet, der das Ergebnis seiner lokalen Suche zurückliefert.<br />

Dieser stellt wiederum im Hintergr<strong>und</strong> eine Anfrage an den nächsten Host usw.<br />

(siehe Abbildung 4.27). Somit blockiert die Methode bei einer Suchanfrage nicht<br />

solange, bis das gesamte Netzwerk durchsucht wurde, sondern die lokal ermittelten<br />

Daten gelangen unmittelbar zur Anwendung zurück. Dadurch kann mit der anfragenden<br />

Anwendung weitergearbeitet werden, solange im Netzwerk gesucht wird.<br />

Damit die Funktionen bei der Suche <strong>und</strong> beim Einfügen der gesammelten Daten in<br />

die lokale Datenbank nicht blockieren, werden intern Handler-Klassen verwendet,<br />

welche ihre Aktionen in einem separaten Thread ausführen.


4.4. VERTEILUNG EINER ANFRAGE IM NETZWERK<br />

Abbildung 4.28: Die gezeigten Handler-Klassen werden innerhalb der Peer-to-<br />

Peer-Funktionalität zum Erfragen <strong>und</strong> Einfügen von Informationen verwendet.<br />

Diese Handler-Klassen werden in Abbildung 4.28 gezeigt <strong>und</strong> sind im einzelnen:<br />

• TVGuidePeerChannelRequestHandler Diese Klasse erfragt bereitgestellte<br />

Kanäle <strong>eines</strong> entfernten EPGs.<br />

• TVGuidePeerEventRequestHandler Diese Klasse stellt Anfragen<br />

nach Programm-Informationen an entfernte EPGs.<br />

• TVGuidePeerInsertChannelHandler Diese Klasse sortiert eingehende<br />

Kanal-Informationen in die lokalen Daten ein <strong>und</strong> benachrichtigt vorangegangene<br />

EPGs über die gef<strong>und</strong>enen Informationen.<br />

• TVGuidePeerInsertEventHandler Diese Klasse sortiert eingehende<br />

Programm-Informationen in die lokalen Daten ein <strong>und</strong> benachrichtigt vorangegangene<br />

EPGs über die gef<strong>und</strong>enen Informationen.<br />

Soll eine neue Suche gestartet oder Daten einsortiert werden, wird die Anfrage<br />

in eine Queue gestellt. Die Handler-Klassen können durch Aufruf entsprechender<br />

Methoden der TVGuidePeerConnector-Klasse Anfragen oder einzusortierende<br />

Informationen aus der entsprechenden Queue entnehmen <strong>und</strong> abarbeiten.<br />

Die Queue für Anfragen speichert Paare, die aus einem ProgramFilter bestehen,<br />

der die Anfrage enthält, <strong>und</strong> einer Liste von ITVGuidePeerObject-<br />

Interfaces, die den bisherigen Weg der Anfrage durch das Netzwerk beschreiben.<br />

Sie müssen bei einer Anfrage an den entfernten EPG weitergegeben werden.<br />

Zur Erstellung <strong>eines</strong> Handlers erfragt der TVGuidePeerConnector bei<br />

der TVGuidePeerHandlerFactory (siehe Abbildung 4.29) einen verfügbaren<br />

Handler <strong>und</strong> startet diesen.<br />

Die TVGuidePeerHandlerFactory wurde erstellt nach dem Entwurfsmuster<br />

Factory Method aus [GHJV95]. Dabei wird das Erstellen von Objekten an eine<br />

Klasse delegiert. Die benötigten Objekte werden durch Aufrufen entsprechender<br />

Methoden der Factory-Klasse erstellt <strong>und</strong> ein Zeiger darauf zurückgegeben. Das<br />

Entwurfsmuster wurde für die Zwecke der Handler-Erstellung angepasst, so dass<br />

Zeiger auf bereits erstellte <strong>und</strong> inaktive Handler zurückgeliefert werden, sofern diese<br />

verfügbar sind. Somit können bereits erstellte Handler für zukünftige Anfragen<br />

81


KAPITEL 4. Realisierung einer elektronischen Programmzeitschrift<br />

82<br />

Abbildung 4.29: Die Klasse TVGuidePeerHandlerFactory.<br />

wiederverwendet werden. (siehe Abbildung 4.30). Da Anfragen nach bereitgestellten<br />

Sendern nur einmal durchgeführt werden, müssen die Channel-Handler nur<br />

einmal erstellt werden <strong>und</strong> werden daher intern in einer Variable gespeichert. Die<br />

Event-Handler werden in einer map abgelegt, da mehrere von ihnen erstellt werden<br />

sollen um eine schnelle Abarbeitung der Anfragen vornehmen zu können. Dabei<br />

werden jedoch nur maximal fünf Event-Handler erstellt um die Ressourcen des Systems<br />

nicht zu sehr zu belasten <strong>und</strong> die Wiedergabe von Multimedia-Daten nicht zu<br />

beeinträchtigen. Bei der Anfrage nach einem Handler wird ermittelt, welcher inaktiv<br />

ist. Von dem ersten gef<strong>und</strong>enen Handler wird ein Zeiger darauf zurückgeliefert<br />

<strong>und</strong> dieser von dem TVGuidePeerConnector aktiviert. Der Handler entnimmt<br />

aus der Queue eine Anfrage <strong>und</strong> führt diese aus.<br />

Zur Unterstützung der Peer-to-Peer-Anfrage implementiert die TVGuide-Klasse<br />

das ITVGuidePeerSearch-Interface (siehe Abbildung 4.31). Über die Methoden<br />

dieses Interfaces wird eine Suchanfrage von einem entfernten EPG entgegengenommen.<br />

Dadurch ist die entfernte Suche von der lokalen getrennt, da bei<br />

der Peer-To-Peer-Suche auch eine Liste von ITVGuidePeerObject-Interfaces<br />

aller bisher besuchten EPGs übertragen werden muss. Zudem dient diese Methode<br />

nur der Peer-To-Peer-Funktionalität, wobei die Methoden des ITVGuide-<br />

Interfaces dem direkten Zugriff auf den EPG durch Applikationen dienen. Die Anfrage<br />

wird mittels <strong>eines</strong> TVGuidePeerEventRequestHandlers gestellt, der<br />

das ITVGuidePeerSearch-Interface des entfernten EPG anfordert <strong>und</strong> auf diesem<br />

die Methode peerSearch(...) aufruft.<br />

Nach dem Einsortieren der erhaltenen Programm-Informationen des entfernten<br />

EPGs wird festgestellt, welche EPGs weiterhin über das Ergebnis informiert werden<br />

sollen. Dazu implementiert die Klasse TVGuidePeerConnectordas ITV-<br />

GuidePeerObject-Interface (siehe Abbildung 4.31), durch dessen Methoden<br />

Programm-Informationen an die bisher besuchten EPGs weitergeleitet werden können.<br />

Diese sortieren die Daten wiederum in ihre lokalen ein. So werden die Informationen<br />

bis zu dem EPG weitergereicht, der die Anfrage initiiert hat. Bei einer<br />

Suchanfrage wird daher gleichzeitig eine Liste dieser Interfaces übertragen. Sie ist<br />

sortiert nach den Rechnern, welche die Anfrage auf dem Weg durch das Netzwerk<br />

passiert hat.<br />

Das Sequenzdiagramm einer Anfrage wird in Abbildung 4.32 gezeigt. Eine Anwendung<br />

stellt mittels der search(...)-Methode eine Anfrage an den EPG.<br />

Dieser durchsucht seine lokalen Daten <strong>und</strong> liefert das Ergebnis zurück. Die in


4.4. VERTEILUNG EINER ANFRAGE IM NETZWERK<br />

Abbildung 4.30: Anfragen <strong>eines</strong> Event-Request-Handlers bei der Factory. Diese<br />

ermittelt unter den bisher erstellten Handlern einen inaktiven <strong>und</strong> liefert einen Zeiger<br />

auf diesen zurück. Konnte kein inaktiver Handler gef<strong>und</strong>en werden, wird ein<br />

neuer erstellt <strong>und</strong> ein Zeiger auf diesen zurückgegeben.<br />

Abbildung 4.31: Die Interfaces ITVGuidePeerSearch <strong>und</strong> ITVGuide-<br />

PeerObject dienen der Unterstützung der Peer-to-Peer-Funktionalität.<br />

83


KAPITEL 4. Realisierung einer elektronischen Programmzeitschrift<br />

84<br />

Abbildung 4.32: Zur Verteilung einer Anfrage erfragt die TVGuidePeer-<br />

Connector-Klasse einen TVGuidePeerEventRequestHandler, der die<br />

Anfrage an den entfernten EPG durchführt. Die erhaltenen Ergebnisse werden<br />

durch einen TVGuidePeerInsertEventHandler im Hintergr<strong>und</strong> in die lokalen<br />

Daten einsortiert.<br />

dem ProgramFilter spezifizierte Anfrage wird mittels des TVGuidePeer-<br />

Connectors an einen entfernten EPG weitergeleitet. Die Kanal-Informationen<br />

werden als Parameter der verify()-Methode übergeben <strong>und</strong> in dem Program-<br />

Filter mitübertragen. So kann der entfernte EPG daraus die gewünschten Kanäle<br />

bestimmen. Die Auswertung geschieht in der Klasse TVGuideDatamanagement,<br />

wie in Abschnitt 4.3 beschrieben. Die von dem entfernten EPG gelieferten<br />

Ergebnisse werden dem lokalen EPG hinzugefügt.<br />

Über Ergebnisse der Suche wird der TVGuide durch sein ITVGuidePeerObject-Interface<br />

benachrichtigt, welche durch Erstellen <strong>eines</strong> TVGuidePeerInsertEventHandler<br />

den lokalen Daten hinzugefügt werden. Weiterhin wird<br />

anhand der übertragenen Interface-Liste ermittelt, welcher EPG über die Suchergebnisse<br />

als nächstes informiert werden soll. Dessen Interface wird aus der Liste<br />

entfernt <strong>und</strong> die erhaltenen Ergebnisse an ihn weitergeleitet. Dies beschleunigt das<br />

Propagieren der Ergebnisse im Netzwerk bis zu der Anwendung, welche die Anfrage<br />

initiiert hat.


4.4.1 Der EPG als eigenständige Anwendung<br />

4.5. INTEGRATION IN DIE MULTIMEDIA-BOX<br />

Um den EPG als eigenständigen Prozess zu realisieren wurde die Anwendung<br />

tvgserver entwickelt. Diese dient dazu einen EPG auf lokalen oder entfernten<br />

Rechnern zur Verfügung zu stellen, mit dem sich eine Applikation verbinden kann<br />

um Informationen zu erfragen. Zu diesem Zweck ist der EPG als Service unter dem<br />

Namen ’TVGuide’ angeboten, den man unter Verwendung der ServiceProxy-<br />

Klasse ansprechen kann (vergleiche Abschnitt 3.2.1). Beim Starten der Anwendung<br />

können über Kommandozeilen-Parameter die einzelnen EPG-Plugins aktiviert<br />

werden. Die Konfiguration derer kann durch Bearbeiten der entsprechenden<br />

Konfigurations-Dateien im Verzeichnis /resources/tvguidevorgenommen<br />

werden (Siehe Anhang B).<br />

4.5 Integration in die Multimedia-Box<br />

Zur Anzeige der EPG-Daten in der Multimedia-Box wurde diese um zwei Zustände<br />

erweitert, mit denen EPG-Informationen angezeigt oder durchsucht werden<br />

können. Der TVGuide-Zustand dient dem reinen Anzeigen der EPG-Daten, der<br />

Search-Zustand dem Durchsuchen der Daten mit einer zuvor spezifizierten Suchmaske.<br />

Weiterhin wird im Folgenden der LiveTV-Zustand um die Anzeige von<br />

EPG-Informationen zu momentan laufenden <strong>und</strong> folgenden Sendungen ausgebaut.<br />

4.5.1 Der TVGuide-Zustand<br />

Zur Darstellung der gesammelten EPG-Informationen wurde die Multimedia-Box<br />

um den TVGuide-Zustand erweitert. Die Daten werden geordnet nach Tagen <strong>und</strong><br />

Sendern angezeigt, was das Blättern in den Daten, vergleichbar mit dem in einer<br />

Programmzeitschrift, ermöglicht <strong>und</strong> unterstüzt folgende Funktionen:<br />

• Anzeige der gespeicherten Informationen zu Sendungen<br />

• Auswahl einer Sendung zur Programmierung einer Aufnahme<br />

• Markieren einer Sendung, für die eine Aufnahme programmiert ist<br />

Damit der Benutzer sich leicht zurechtfindet, wird an die graphische Benutzerschnittstelle<br />

(Graphical User Interface (GUI)) die Anforderung gestellt, alle Informationen<br />

übersichtlich darzustellen <strong>und</strong> nicht erst durch zusätzlichen Knopfdruck<br />

zugängig zu machen. Weiterhin zeigen Untersuchungen über das Benutzerverhalten<br />

bzgl. EPGs [Bon03], dass Anwender, die den EPG nutzen, folgende Informationen<br />

wünschen:<br />

• Was läuft jetzt/anschließend auf allen Sendern?<br />

• Was läuft zu einer bestimmten Uhrzeit auf allen Sendern?<br />

85


KAPITEL 4. Realisierung einer elektronischen Programmzeitschrift<br />

86<br />

Abbildung 4.33: Diese Abbildung zeigt den TVGuide-Zustand, während im Hintergr<strong>und</strong><br />

der LiveTV-Zustand aktiv ist. Die Benutzeroberfläche ist in vier Widgets<br />

aufgeteilt. Links oben wird die Auswahl des Wochentages vorgenommen, darunter<br />

erfolgt die Auswahl des Senders, für den Informationen angezeigt werden sollen.<br />

Die rechte Seite zeigt das Tagesprogramm des gewählten Senders an dem gewählten<br />

Wochentag (unten), Darüberhinaus werden erweiterte Informationen zu<br />

der markierten Sendung angezeigt.<br />

• Was läuft an einem bestimmten Tag auf einem Sender?<br />

Bei der Entwicklung <strong>und</strong> Gestaltung des Zustandes wurde dieser Aspekt berücksichtigt.<br />

Die meisten Home Entertainment Systeme zeigen die TV-Informationen in einer<br />

Tabelle an. Dabei markieren die einzelnen Zeilen die Sender, die Spalten die Uhrzeiten.<br />

Diese Anordnung der Informationen ließ sich durch die von der Multimedia-<br />

Box vorgegebene Steuerung der Zustände nicht realisieren. Diese sieht vor, dass<br />

Widgets (siehe Abschnitt 3.3) durch Drücken der Tasten ’Rechts’ bzw. ’Links’ auf<br />

der Fernbedienung gewechselt werden. Die Navigation innerhalb des Widgets wird<br />

mit den Tasten ’Hoch’ bzw. ’Runter’ vorgenommen. Zur Steuerung in der Tabellenansicht<br />

würden die Tasten ’Rechts’ bzw. ’Links’ innerhalb <strong>eines</strong> Widgets ebenfalls<br />

dazu verwendet werden, was im Widerspruch zur Bedienung der restlichen<br />

Zustände stünde.<br />

Bei der Positionierung <strong>und</strong> Festlegung der Größe der Widgets soll der vorhandene<br />

Platz optimal ausgenutzt werden. Aus diesem Gr<strong>und</strong> wurde die Anzeige des<br />

TVGuide-Zustandes in vier Widgets aufgeteilt, wie in Abbildung 4.33 zu sehen<br />

ist:<br />

• Im linken Teil der Anzeige befindet sich oben das Tages-Widget zur Auswahl<br />

des Tages <strong>und</strong> darunter das Sender-Widget zur Auswahl des Senders,<br />

für die Informationen angezeigt werden sollen. Sie stellen die Filterkriterien<br />

dar. Die Größe des Tages-Widgets orientiert sich an der Anzahl der Wochentage<br />

<strong>und</strong> dem längsten Wochentagnamen. Dies legt sowohl die Breite des


4.5. INTEGRATION IN DIE MULTIMEDIA-BOX<br />

Abbildung 4.34: Einprogrammierte Aufnahmen werden mit einem ’R’ gekennzeichnet.<br />

Weitere Informationen sind in dem Widget zur erweiterten Beschreibung<br />

enthalten.<br />

Sender-Widgets, als auch dessen Höhe fest, welche den verbliebenen Platz<br />

einnimmt. Dies lässt die Anzeige klar strukturierter wirken.<br />

• Auf der rechten Seite werden die Programminformationen dargestellt. Das<br />

untere Widget, das Programm-Widget, zeigt die sortierte Liste der Sendungen<br />

des gewählten Tages <strong>und</strong> Senders, wobei die aktuell laufende Sendung<br />

beim Aktivieren des Zustandes vorselektiert wird. Es ist jeweils die Anfangszeit<br />

der Sendung sowie deren Titel angezeigt. Wurde zudem eine Aufnahme<br />

für diese Sendung programmiert, wird dies mit dem Buchstaben ’R’ hinter<br />

dem Titel gekennzeichnet (’R’ steht für ’Recording’, was im deutschen<br />

’Aufnahme’ bedeutet). Dies ist in Abbildung 4.34 zu sehen<br />

Im oberen Widget, dem Informations-Widget, werden erweiterte Informationen<br />

zu der momentan gewählten Sendung angezeigt. Hier werden deren genauen<br />

Anfangs- <strong>und</strong> Endzeiten sowie eine vorhandene erweiterte Beschreibung<br />

<strong>und</strong> zugehörige Kategorien dargestellt. Ist zu der Sendung eine Aufnahme<br />

programmiert, werden hier zusätzliche Informationen angezeigt.<br />

Die Positionierung <strong>und</strong> Größe dieser Widgets orientiert sich an den zuvor<br />

besprochenen Widgets zur Anzeige der Wochentage <strong>und</strong> Kanäle. Zur klareren<br />

Strukturierung der Anzeige sind die Höhen angepasst, die Breiten des<br />

Programm- <strong>und</strong> des Informations-Widgest sind durch den verbliebenen Platz<br />

festgelegt. Durch diese Aufteilung ist das Programm-Widget das größte,<br />

weshalb dieses zur Anzeige des Tagesablaufes verwendet wird um möglichst<br />

viele Informationen sichtbar zu machen.<br />

Diese Art der Anzeige vermittelt dem Benutzer einen Überblick über das Tagesprogramm<br />

<strong>eines</strong> bestimmten Senders. Zusätzlich besteht die Möglichkeit festzustellen,<br />

was auf anderen Sendern zu einer entsprechenden Uhrzeit gezeigt wird, indem er<br />

zu der gewünschten Uhrzeit ein Programm markiert <strong>und</strong> durch die Senderliste blättert.<br />

87


KAPITEL 4. Realisierung einer elektronischen Programmzeitschrift<br />

88<br />

Bedienung<br />

Abbildung 4.35: Die Klasse TableUnit.<br />

Die Bedienung ist den restlichen Multimedia-Box-Zuständen angepasst. Das Wechseln<br />

der Widgets geschieht mit den Tasten ’Rechts’ bzw ’Links’, mit Hilfe der<br />

Tasten ’Hoch’ <strong>und</strong> ’Runter’ können in den Widgets Einträge selektiert werden.<br />

Durch Drücken des roten Farbknopfes wird für die gewählte Sendung eine Aufnahme<br />

programmiert, woraufhin die Anwendung in den TVTimer-Zustand wechselt,<br />

der in Abschnitt 5.4.1 vorgestellt wird. Sollte die Programmierung auf Gr<strong>und</strong> <strong>eines</strong><br />

Konfliktes fehlschlagen, wird eine entsprechende Fehlermeldung eingeblendet <strong>und</strong><br />

die Anwendung verbleibt im TVGuide-Zustand.<br />

Man kann auch direkt zu den entsprechenden Sendern durch Drücken des blauen<br />

Farbknopfes umschalten. Dabei wird in den LiveTV-Zustand gewechselt, der in<br />

Abschnitt 5.4.2 beschrieben wird.<br />

TableUnit<br />

Zur übersichtlicheren Darstellung des Tagesablaufes im TVGuide-Zustand wurde<br />

der OSDManager der Multimedia-Box um eine zusätzliche Widgetunit, die<br />

TableUnit, erweitert.<br />

Die TableUnit zeichnet sich dadurch aus, dass der Inhalt in mehreren Spalten<br />

anzeigbar ist, wodurch sich die Anzeige leichter strukturieren <strong>und</strong> die Übersicht<br />

verbessern lässt. In einer ersten <strong>Implementierung</strong> zur Anzeige des Tagesablaufes


4.5. INTEGRATION IN DIE MULTIMEDIA-BOX<br />

wurde die ListUnit [Kle03] verwendet, die lediglich eine Spalte zur Anzeige<br />

von Textzeilen bereitstellt. Eine Trennung von Uhrzeit <strong>und</strong> Titel war damit nur<br />

durch Angabe von Leerzeichen möglich. Da jedoch Buchstaben <strong>und</strong> Ziffern keine<br />

einheitliche Breite aufweisen, war eine rechtsbündige Ausrichtung der Titel nicht<br />

möglich. Für eine korrekte Formatierung können nun die Startzeiten sowie die Titel<br />

unter Verwendung der TableUnit in eine eigene Spalte geschrieben werden.<br />

Die TableUnit verwaltet dazu eine Liste von TextViews, die in Abschnitt 3.3<br />

vorgestellt wurden. Somit ist es möglich jeder Zelle der Tabelle ein Text zur Anzeige<br />

zuzuweisen.<br />

Im Folgenden werden ausgewählte Methoden der TableUnit erklärt. Alle Methoden<br />

sind aus dem Klassendiagramm in Abbildung 4.35 ersichtlich:<br />

void setColumnWidth( unsigned int c, unsigned int w ) setzt die Breite der Spalte<br />

c auf w Prozent der Gesamtbreite des Widgets<br />

void addColumn(unsigned int w) fügt eine Spalte der Breite w hinzu, wobei w<br />

die Breite in Prozent der Gesamtbreite des Widgets angibt.<br />

unsigned int getSelectedLine() gibt die Nummer der selektierten Zeile zurück.<br />

string getLineURL(const unsigned int i) liefert die Zeilen-URL der i-ten Zeile.<br />

In einer Zeilen-URL kann ein spezieller Text gespeichert werden, der<br />

dazu verwendet werden kann den Inhalt einer Zeile genauer zu beschreiben<br />

[Kle03].<br />

void selectLine(const unsigned int& i) selektiert die i-te Zeile.<br />

void selectLine2(const unsigned int& i) selektiert die i-te Zeile in einer anderen<br />

Farbe als selectLine().Die Farbe wird mit dem Methode setColors()<br />

festgelegt.<br />

string getLineContent(const unsigned int c, const unsigned int i) liefert den Inhalt<br />

der c-ten Spalte der i-ten Zeile zurück.<br />

list getLineContent(const unsigned int i) liefert den Inhalt aller Spalten<br />

der i-ten Zeile zurück.<br />

void setLineContent(const unsigned int c, const unsigned int i, string s) setzt den<br />

Inhalt der c-ten Spalte in der i-ten Zeile.<br />

void deleteAllLines() löscht die Zeilen des Widgets. Die Einstellungen zur Anzahl<br />

der Spalten bleibt erhalten.<br />

unsigned int addLine(list c, string url) fügt eine Zeile hinzu. Die Spalten<br />

erhalten den Inhalt der Liste c <strong>und</strong> die Zeile die Zeilen-URL<br />

unsigned int addLine(list c) fügt eine Zeile hinzu. Die Spalten erhalten<br />

den Inhalt der Liste c.<br />

void deSelectLine() deselektiert eine Zeile.<br />

89


KAPITEL 4. Realisierung einer elektronischen Programmzeitschrift<br />

90<br />

Result selectUp() setzt die Markierung eine Zeile nach oben.<br />

Result selectDown() setzt die Markierung eine Zeile nach unten.<br />

void setScrollbarEnabled(bool enabled) blendet die Scrollbar ein oder aus.<br />

bool getScrollbarEnabled() liefert den Status, ob die Scrollbar angezeigt wird.<br />

int getNumLines() liefert die Anzahl der Zeilen des Widgets zurück.<br />

<strong>Implementierung</strong><br />

Der TVGuide-Zustand initialisiert <strong>und</strong> konfiguriert ein Objekt der TVGuide-Klasse,<br />

wenn er sich nicht über das Netzwerk zu einem anderen EPG verbinden soll. Dazu<br />

werden die entsprechenden Variablen aus der in Abschnitt 3.3 vorgestellten Konfigurationsdatei<br />

der Multimedia-Box gelesen. Hier werden alle zu verwendenden<br />

EPG-Quellen angegeben <strong>und</strong> die entsprechenden Plugins geladen. Durch Pluginspezifische<br />

Variablen lassen sich diese weiter konfigurieren. Eine Übersicht der<br />

Variablen befindet sich in Anhang A. Das TVGuide-Objekt wird nun als Service<br />

in der Multimedia-Box registriert, sodass sich andere Anwendungen mit diesem<br />

Service zur gemeinsamen Datennutzung verbinden können.<br />

Die verfügbaren Kanäle des EPG werden zur Anzeige ausgelesen <strong>und</strong> vor dem<br />

Füllen des entsprechenden Widgets sortiert. Als Vorgabe der Reihenfolge dient<br />

dabei die Kanalliste des LiveTV-Zustandes (siehe Abschnitt 5.4.2).<br />

Das Abfragen der Informationen bei dem TVGuide-Objekt geschieht über die<br />

Methode<br />

list ITVGuide::<br />

getEventsOnDayOnChannel(day, channel);<br />

Dazu werden die Einstellungen in den Widgets für den Tag bzw. den Kanal ausgewertet<br />

<strong>und</strong> die ermittelten Werte der Funktion übergeben. Da die Ergebnisliste<br />

schon sortiert ist, entfällt ein erneutes Ordnen. Mit den in der Liste enthaltenen<br />

Informationen werden die entsprechenden Widgets zur Anzeige des Tagesprogramms<br />

<strong>und</strong> der erweiterten Informationen gefüllt.<br />

Um über neu eintreffende EPG-Daten informiert zu werden, registriert die Anwendung<br />

EventListener bei dem TVGuide für Methoden dessen ITVGuide-<br />

Events-Interface, was eine automatische Aktualisierung der Anzeige ermöglicht.<br />

4.5.2 Der Search-Zustand<br />

Der Search-Zustand wurde zum Durchsuchen der EPG-Informationen nach selbst<br />

angegebenen Kriterien entwickelt. Der Zustand erlaubt die Vorgabe <strong>eines</strong> zu analysierenden<br />

Zeitraumes, die Einschränkung auf bestimmte Kanäle, die Angabe von<br />

Schlagworten <strong>und</strong> die Auswahl von Kategorien zur Verfeinerung der Suche. Eine


4.5. INTEGRATION IN DIE MULTIMEDIA-BOX<br />

Abbildung 4.36: Diese Abbildung zeigt die Eingabemaske des Search-Zustandes.<br />

Links oben kann eine Auswahl vordefinierter oder vom Benutzer erstellter Bookmarks<br />

vorgenommen werden, darunter wird das Widget zur Eingrenzung der Suche<br />

auf bestimmte Kanäle angezeigt. Im rechten Teil der Anzeige kann die Suche durch<br />

Festlegen <strong>eines</strong> Zeitraums, die Angabe <strong>eines</strong> Schlagwortes oder die Auswahl von<br />

Kategorien eingeschränkt werden.<br />

mögliche Suchanfrage kann z.B. lauten:<br />

Welche Sendungen laufen ab dem 10.10.2005 um 10:23 Uhr in den Programmen<br />

von ZDF, SAT.1, VOX <strong>und</strong> KiKa, deren Titel oder erweiterte Beschreibung das<br />

Schlagwort ’bernd’ enthalten?<br />

Die Einstellungen für diese Anfrage sind in Abbildung 4.36 ersichtlich. Weiterhin<br />

können die eingebenen Kriterien für eine spätere Suche als Bookmarks gespeichert<br />

werden. Als Bookmark wird in diesem Fall ein Lesezeichen verstanden, mit dessen<br />

Hilfe schnell auf gespeicherte Suchkriterien zugegriffen werden kann.<br />

Graphische Benutzeroberfäche<br />

Beim Aktivieren des Zustandes wird die Suchmaske eingeblendet, in der die Suchkriterien<br />

festgelegt werden können.<br />

• In der linken oberen Ecke befindet sich das Bookmark-Widget, das eine Auswahl<br />

von vorgefertigten <strong>und</strong> selbst erstellten Suchmustern enthält. Hier besteht<br />

die Möglichkeit der Auswahl zwischen der Angabe <strong>eines</strong> neuen Suchmusters<br />

<strong>und</strong> der Suche nach aktuell laufenden bzw. folgenden Sendungen.<br />

Diese lässt sich durch Angabe weiterer Kriterien einschränken. Die Senderauswahl<br />

kann in dem Kanalauswahl-Widget vorgenommen werden, das sich<br />

unter dem Bookmark-Widget befindet. Es unterstützt sowohl die Auswahl<br />

<strong>eines</strong> einzelnen Senders als auch eine Mehrfachauswahl.<br />

• Im rechten Teil der GUI kann der Suchfilter verfeinert werden. Zu diesem<br />

Zweck kann ein Zeitraum angegeben werden, welcher jedoch bei der Suche<br />

nach aktuellen oder folgenden Sendungen fest vorgegeben ist. Deshalb sind<br />

91


KAPITEL 4. Realisierung einer elektronischen Programmzeitschrift<br />

92<br />

Abbildung 4.37: Die Anzeige der Suchergebnisse zeigt im oberen Widget eine<br />

chronologisch geordnete Liste der gef<strong>und</strong>enen Informationen. Hier kann eine Sendung<br />

ausgewählt werden, deren Informationen im unteren Widget erscheinen.<br />

bei Auswahl dieser Suchfilter die entsprechenden Widgets nicht sichtbar. Darunter<br />

befindet sich ein Eingabe-Widget zur Spezifizierung von Schlagworten,<br />

die entweder im Titel einer Sendung oder in der Beschreibung vorkommen<br />

sollen. Die beiden unteren Widgets dienen zur Auswahl einer Kategorie.<br />

Zur Unterstützung kann durch Eingabe der Anfangsbuchstaben eine Kategorie<br />

in der Liste gesucht werden. Angenommen, die Kategorie Spielfilm ist die<br />

einzige, die mit dem Buchstaben ’S’ beginnt. Durch Eingabe dieses Buchstabens<br />

in das Widget über der Kategorienliste springt die Markierung auf die<br />

Kategorie ’Spielfilm’. Sind alle Einstellungen erfolgt, kann dieser Suchfilter<br />

zur späteren Wiederverwendung gespeichert werden. Dazu wird ein Dialog<br />

eingeblendet, worin man einen Namen für den Suchfilter festlegen kann.<br />

Nun kann die Suche gestartet werden. Sie führt zu einer Ergebnisübersicht, die<br />

aus zwei Fenstern besteht. Das Suchergebnis des oben angegeben Beispiels zeigt<br />

Abbildung 4.37.<br />

• Im oberen Widget wird eine Liste mit gef<strong>und</strong>enen Informationen angezeigt,<br />

wobei zur besseren Übersicht nur die Anfangszeit <strong>und</strong> der Titel einer Sendung<br />

ersichtlich sind.<br />

• Im unteren Widget werden alle verfügbaren Informationen zu einer ausgewählten<br />

Sendung gezeigt. Auch hier ist es wieder möglich eine Aufnahme<br />

für eine ausgewählte Sendung zu programmieren oder in den LiveTV-<br />

Zustand auf den entsprechenden Kanal zu wechseln.<br />

Bedienung<br />

Auch bei dieser Vorgehensweise wurde nicht von den Vorgaben des Multimedia-<br />

Box-Frameworks abgewichen. Das Wechseln zwischen den Widgets geschieht mit


Abbildung 4.38: Die Klasse TextInput.<br />

4.5. INTEGRATION IN DIE MULTIMEDIA-BOX<br />

den Tasten ’Rechts’ <strong>und</strong> ’Links’. Innerhalb einer Liste kann mit ’Hoch’ <strong>und</strong> ’Runter’<br />

entsprechend navigiert werden. Die Mehrfach-Auswahl bei Sendern <strong>und</strong> Kategorien<br />

erfolgt über die Funktionstasten ’Rot’ <strong>und</strong> ’Grün’. Hiermit lassen sich mehrere<br />

Zeilen markieren bzw. die Markierung einer Zeile wieder rückgängig machen.<br />

Mit Funktionstaste ’Gelb’ kann der aktuelle Filter als Bookmark gespeichert werden,<br />

woraufhin ein Widget zur Festlegung <strong>eines</strong> Bookmarknamens eingeblendet<br />

wird. Die Suche wird mit der Funktionstaste ’Blau’ gestartet. Die Datum-Eingabe<br />

(Anfangs- <strong>und</strong> Endzeit) erfolgt über den Zahlenblock der Fernbedienung, ebenso<br />

wie die Text-Eingabe, die später beschrieben wird.<br />

Auch in der Ergebnisanzeige können mehrere Sendungen mittels des grünen Farbknopfes<br />

ausgewählt werden. Für diese lässt sich mittels des roten Farbknopfes<br />

durch Zugriff auf den TVTimer-Zustand, in Abschnitt 5.4.1 beschrieben, eine Aufnahme<br />

programmieren. Ist nur eine Sendung markiert, kann durch Drücken des<br />

blauen Knopfes in den LiveTV-Zustand (Abschnitt 5.4.2) gewechselt werden, wobei<br />

der Kanal der gewählten Sendung eingestellt wird.<br />

TextInput-Unit<br />

Zur Eingabe von Text in Multimedia-Box-Zuständen wurde der OSDManager (siehe<br />

Abschnitt 3.3) um die TextInput-Widgetunit erweitert. Die Eingabe erfolgt<br />

über den Zahlenblock der Fernbedienung. Dabei wird das gleiche Verfahren angewandt<br />

wie bei der Eingabe einer SMS auf dem Handy. Den Zahlentasten einer<br />

Fernbedienung sind mehrere Buchstaben zugeordnet, welche heutzutage meist auf<br />

den Fernbedienungen aufgedruckt sind. So sind z.B über die Zahlentaste ’2’ die<br />

Buchstaben ’a’, ’b’ <strong>und</strong> ’c’ verfügbar. Durch einmaliges Drücken wird der Buchstabe<br />

’a’ ausgewählt. Zur Auswahl des nächsten Buchstabens muss innerhalb von<br />

zwei Sek<strong>und</strong>en die gleiche Taste erneut gedrückt werden. Bezogen auf Taste ’2’<br />

wäre dies ’b’. Der nächste Buchstabe des zu schreibenden Wortes kann auf die<br />

gleiche Weise festgelegt werden.<br />

93


KAPITEL 4. Realisierung einer elektronischen Programmzeitschrift<br />

94<br />

Um den Namen ’bernd’ zu schreiben wird die Tastenkombination zweimal 2, zweimal<br />

3, dreimal 7, zweimal 6 <strong>und</strong> einmal 3 gedrückt. Die Widgetunit bietet nicht<br />

nur die Möglichkeit die standardmäßige Belegung zu verwenden, sondern auch eine<br />

eigene festzulegen. Sie besteht aus einem einzigen TextView-Widget <strong>und</strong> es<br />

ist lediglich eine Zeile zur Anzeige ansprechbar, weshalb sowohl eine Selektion<br />

dieser als auch das Navigieren mittels der ’Hoch’- bzw. ’Runter’-Tasten der Fernbedienung<br />

entfällt.<br />

Im Folgenden werden ausgewählte Methoden des TextInput-Widgets erklärt.<br />

Alle Methoden sind aus dem Klassendiagramm in Abbildung 4.38 ersichtlich:<br />

void addString(string s) Setzt den Inhalts des Widgets.<br />

void clear() Löscht den Inhalt des Widgets.<br />

void erase() Löscht das letzte Zeichen des Inhalts.<br />

void setMode(mode_e m) Setzt den Eingabe-Modus des Widgets. Eingabe-Modi<br />

sind ALPHA zur Eingabe von Buchstaben <strong>und</strong> NUMERIC zur Eingabe von<br />

Zahlen.<br />

void setLineURL(string s) Setzt die Zeilen-URL.<br />

string getLineURL() Fragt die Zeilen-URL ab.<br />

Result keyPressed(int k) Teilt dem Widget mit, dass der k-te Knopf des Zahlenblocks<br />

gedrückt wurde .<br />

void setNewKeyCharMapping(vector v) Setzt ein neues Mapping, welchem<br />

Buchstaben einer Taste zugeordnet sind. Das Mapping besteht aus<br />

strings, welche die Buchstaben-Belegung einer einzelnen Taste angeben,<br />

die bei mehrfachem Drücken durchgeschaltet werden. Diese sind in einem<br />

vector gespeichert, wobei die Position des strings innerhalb des Vektors<br />

die zu drückende Taste festlegt.<br />

vector getKeyCharMapping() Liefert das gesetzte Mapping zurück.<br />

<strong>Implementierung</strong><br />

Vor der Suchanfrage an den EPG werden die eingestellten Informationen aus den<br />

GUI-Elementen ausgelesen <strong>und</strong> in einem ProgramFiltergespeichert. Anschließend<br />

wird in den Zustand SearchResult gewechselt, welcher die Suche anstößt, die<br />

Ergebnisse aufbereitet <strong>und</strong> anzeigt. Das erstellte Objekt der ProgramFilter-<br />

Klasse wird dazu an die Methode search(...) des ITVGuide-Interfaces des<br />

EPG übergeben, wodurch dieser die entsprechenden Daten sucht <strong>und</strong> an den Search-<br />

Zustand zurückliefert.<br />

Zur Unterstützung der Peer-to-Peer-Funktion des EPG implementiert der Search-<br />

Result-Zustand das ITVGuidePeerObject-Interface, welches ebenfalls bei der


4.5. INTEGRATION IN DIE MULTIMEDIA-BOX<br />

Abbildung 4.39: Der LiveTV-Zustand mit EPG-Informationen. Am unteren Rand<br />

werden die Startzeiten sowie die Titel der momentan laufenden <strong>und</strong> nachfolgenden<br />

Sendung angezeigt, in der linken oberen Ecke Informationen über den Kanal <strong>und</strong><br />

die verwendete TV-Quelle eingeblendet (links). Bei Bedarf können durch Drücken<br />

des grünen Farbknopfes erweiterte Informationen zur aktuellen Sendung eingeblendet<br />

werden (rechts).<br />

Suchanfrage übertragen wird. Dadurch kann er über Resultate der Suche im Netzwerk<br />

informiert werden <strong>und</strong> diese Ergebnisse der Anzeige hinzufügen. Auf Knopfdruck<br />

werden die angezeigten Informationen erneut sortiert. Dadurch wird eine<br />

automatische Veränderung der GUI verhindert, während der Benutzer die Informationen<br />

betrachtet.<br />

4.5.3 EPG-Informationen im LiveTV-Zustand<br />

Der LiveTV-Zustand der Multimedia-Box wurde erstmals in [BCE + 02] realisiert<br />

<strong>und</strong> im Rahmen dieser Arbeit zuerst um die Anzeige von EPG-Informationen erweitert.<br />

Der Status des Zustandes zu Beginn dieser Arbeit wurde bereits in Kapitel<br />

3.3 beschrieben. Zusätzliche Erweiterungen dazu werden in Abschnitt 5.4.2<br />

vorgestellt.<br />

Benutzeroberfäche<br />

Für die Anzeige der EPG-Informationen wurde die GUI um ein Fenster erweitert,<br />

in dem vorhandene Informationen über die gerade laufende <strong>und</strong> folgende Sendung<br />

des eingestellten Kanals eingeblendet werden. Zur aktuellen Sendung können<br />

bei Bedarf erweiterte Informationen angezeigt werden (siehe Abbildung 4.39).<br />

Zudem wurde der LiveTV-Zustand um die Anzeige der Kanalliste ausgebaut. Sie<br />

bietet einen Überblick bzgl. der konfigurierten Kanäle, zu denen vorhandene EPG-<br />

Informationen – je nach Wunsch – für die laufende oder folgende Sendung angezeigt<br />

werden (siehe Abbildung 4.40).<br />

Sie teilt sich in zwei Widgets, wobei das obere eine Liste der verfügbaren Kanäle<br />

anzeigt sowie die Startzeit <strong>und</strong> den Titel der aktuellen oder folgenden Sendung auf<br />

95


KAPITEL 4. Realisierung einer elektronischen Programmzeitschrift<br />

96<br />

Abbildung 4.40: Die Kanalliste zeigt zu jedem Sender Informationen der aktuell<br />

laufenden Sendung an. Sie bietet weiterhin das Einstellen des gewählten Senders<br />

durch dessen Auswahl <strong>und</strong> anschließendes Drücken des grünen Farbknopfes.<br />

dem entsprechenden Kanal. Das untere Widget zeigt zusätzliche Informationen zu<br />

der gewählten Sendung.<br />

Bedienung<br />

Die Beschreibung der Bedienung wird im Folgenden auf das Einblenden von Widgets<br />

mit EPG-Informationen eingeschränkt. Die Bedienung der TV-Funktionalitäten<br />

wird in Abschnitt 5.4.2 erklärt.<br />

Details zur aktuellen Sendung können mit dem grünen Farbknopf ein- bzw. wieder<br />

ausgeblendet werden. Die Kanalliste mit Informationen zu aktuellen Sendungen<br />

wird mit dem gelben, Informationen zu folgenden Sendungen mit dem blauen<br />

Farbknopf eingeblendet.<br />

Innerhalb der Anzeige der Kanalliste kann mit den Tasten ’Hoch’ <strong>und</strong> ’Runter’ ein<br />

Sender ausgewählt <strong>und</strong> mit Hilfe des blauen Farbknopfes auf diesen gewechselt<br />

werden.<br />

<strong>Implementierung</strong><br />

Zur Abfrage der Informationen bei dem EPG werden diese durch die Methoden<br />

getCurrentEventOnChannel(..), für Daten zur aktuellen Sendung bzw.<br />

getFollowingEventOnChannel(..) für Daten zur folgenden Sendung abgefragt.<br />

Zur Anzeige wurde die in Abschnitt 4.5.1 entwickelte TableUnit verwendet<br />

um die Informationen strukturiert anzeigen zu können. Durch das Registrieren<br />

<strong>eines</strong> EventListeners beim EPG wird der Zustand über neu eintreffende<br />

Daten benachrichtigt. Sollten diese Beschreibungen zu laufenden oder folgenden<br />

Sendungen enthalten, werden sie der Anzeige hinzugefügt. Dies dient der Unterstützung<br />

der Peer-to-Peer-Funktionalität des EPG.


4.6 Zusammenfassung<br />

4.6. ZUSAMMENFASSUNG<br />

In diesem Kapitel wurde die Realisierung der elektronischen Programmzeitschrift<br />

(EPG) für die Multimedia-Box erläutert. Zuerst wurde die verwendete Plugin-<br />

Struktur erklärt, mit deren Hilfe der EPG Daten von verschiedenen Quellen sammelt.<br />

Darauf folgte die Beschreibung der realisierten EPG-Plugins, welche die<br />

EPG-Informationen von externen Quellen beschaffen. Hinzu kam die Betrachtung,<br />

wie die gesammelten Informationen abgespeichert <strong>und</strong> abgerufen werden.<br />

Zu diesem Zweck ist eine Verzeichnis-Struktur erarbeitet worden, in der die Daten,<br />

nach Kanälen <strong>und</strong> Tagen sortiert, in XML-Dateien gespeichert werden. Weiterhin<br />

wurden sowohl Probleme <strong>und</strong> deren Lösungen aufgezeigt, die beim Einfügen der<br />

EPG-Daten von unterschiedlichen Quellen auftreten, als auch die verschiedenen<br />

Abfrage-Möglichkeiten der Daten nach bestimmten Kriterien erklärt.<br />

Der nächste Abschnitt beschrieb die Peer-to-Peer-Funktionalität des EPG, welche<br />

es ermöglicht einen verteilten EPG zu realisieren. Dazu werden bei einer Abfrage<br />

lokale Daten auf Vollständigkeit geprüft <strong>und</strong> fehlende Informationen von im Netzwerk<br />

verfügbaren EPGs erfragt um so den eigenen Datenbestand zu ergänzen oder<br />

zu aktualisieren.<br />

Den Abschluss des Kapitels bildet die Beschreibung des TVGuide- <strong>und</strong> des Search-<br />

Zustandes der Multimedia-Box, die zur Abfrage <strong>und</strong> Anzeige der Daten entwickelt<br />

wurden. Im Zuge dessen wurde der OSDManager um zwei Widgets erweitert, <strong>eines</strong><br />

zur strukturierteren Anzeige von Zeilen im TVGuide-Zustand, sowie ein anderes<br />

zur Eingabe von Text über eine Fernbedienung. Darüberhinaus wurde die Erweiterung<br />

des LiveTV-Zustandes zur Anzeige von EPG-Informationen erläutert.<br />

97


KAPITEL 4. Realisierung einer elektronischen Programmzeitschrift<br />

98


Kapitel 5<br />

Realisierung von Szenarien des<br />

<strong>Mehrbenutzer</strong>-TV<br />

Bei der Vorstellung des EPG wurde bereits erwähnt, dass u.a. auch der digitale TV-<br />

Strom als EPG-Quelle dienen kann. Zu weiteren Anwendungsmöglichkeiten einer<br />

TV-Karte zählen der Videorekorder zum Aufzeichnen von Fernsehsendungen <strong>und</strong><br />

vor allem Live TV. Zudem existieren in heutigen Haushalten meist mehrere Computer,<br />

in denen eine Vielzahl an TV-Karten installiert sein können. Da <strong>NMM</strong> den<br />

netzwerktransparenten Zugriff auf solche Ressourcen ermöglicht, können diese für<br />

die verschiedenen TV-Anwendungen genutzt werden. Die Zuteilung der verfügbaren<br />

TV-Karten soll für die einzelnen Szenarien dynamisch erfolgen, d.h. die Anwendung<br />

ermittelt selbständig, welche Quelle sie für ihre Zwecke verwenden kann<br />

oder darf. Solche Anwendungsfälle <strong>und</strong> die entsprechenden Verfahrensweisen werden<br />

in diesem Kapitel besprochen.<br />

In Abschnitt 5.1 wird zuerst der einfache Fall betrachtet, in welchem eine Anwendung<br />

auf eine TV-Karte zugreift. In Abschnitt 5.2 wird die Erweiterung der Szenarien<br />

um mehrere TV-Quellen beschrieben. In diesem Zusammenhang wird zusätzlich<br />

der realisierte Videorekorder im Detail erklärt (Abschnitt 5.2.2). Anschließend<br />

werden in Abschnitt 5.3 Szenarien beschrieben, in denen die Anwendung für Live<br />

TV, der Videorekorder sowie der EPG auf eine Vielzahl von TV-Karten zugreifen<br />

<strong>und</strong> dabei auftretende Probleme gelöst werden. Nach der Vorstellung der Szenarien<br />

<strong>und</strong> den entsprechenden <strong>Implementierung</strong>en wird in Abschnitt 5.4 deren Integration<br />

in die Multimedia-Box behandelt. In Abschnitt 5.4.1 wird der TVTimer-Zustand<br />

vorgestellt, der zur Bedienung des Videorekorders entwickelt wurde. Darauf folgt<br />

in Abschnitt 5.4.2 die Erläuterung des LiveTV-Zustandes, der das Fernsehen durch<br />

Zugriff auf mehrere TV-Karten unterstützt.<br />

Ein mögliches Anwendungsszenario für das <strong>Mehrbenutzer</strong>-TV wird in Abbildung<br />

5.1 gezeigt. Hier stehen im Netzwerk unterschiedliche TV-Karten zur Verfügung,<br />

die von Live TV, dem Videorekorder <strong>und</strong> vom EPG verwendet werden. Der Begriff<br />

<strong>Mehrbenutzer</strong>-TV bezeichnet Anwendungsfälle, in denen Benutzer unter Verwendung<br />

verschiedener Anwendungen auf TV-Karten zugreifen. Dies erfolgt entweder<br />

ohne direkte Benutzereinwirkung wie im Falle des EPG <strong>und</strong> des Videorekorders,<br />

99


KAPITEL 5. Realisierung von Szenarien des <strong>Mehrbenutzer</strong>-TV<br />

100<br />

analoge<br />

TV-Karte<br />

Live TV<br />

Netzwerk<br />

Netzwerk<br />

Live TV<br />

Videorekorder<br />

Netzwerk<br />

EPG<br />

digitale<br />

TV-Karte<br />

Abbildung 5.1: Diese Abbildung zeigt ein Szenario des <strong>Mehrbenutzer</strong>-TV in dem<br />

die Anwendungen EPG, Live TV <strong>und</strong> Videorekorder auf mehrere im Netzwerk<br />

verteilte TV-Karten zugreifen.<br />

welche selbständig zu von einem Benutzer vorgegebenen Zeitpunkt Kanäle wechseln,<br />

oder mit direkter Einwirkung bei einer Live TV-Anwendung, welche erst<br />

durch Eingaben des Benutzers einen Kanal wechselt. Deshalb wird in diesem Kapitel<br />

nicht von Benutzern, sondern lediglich von Anwendungen gesprochen.<br />

Wie schon in Abschnitt 1.1 erwähnt, können die TV-Karten ein unterschiedliches<br />

Kanalangebot bereitstellen. Dies erfordert die Ermittlung der bereitgestellten<br />

Kanäle für jede TV-Karte, sodass eine Anwendung weiß, welche ihr überhaupt zur<br />

Verfügung stehen <strong>und</strong> von welchen TV-Quellen sie diese empfangen kann. Weiterhin<br />

wurde angemerkt, dass verschiedene TV-Quellen Audio- <strong>und</strong> Video-Daten in<br />

unterschiedlicher Qualität liefern. Um dies zu berücksichtigen muss eine Reihenfolge<br />

festgelegt werden, in der die TV-Karten angesprochen werden sollen. Zum<br />

Speichern dieser Informationen wird die globale Kanalliste beschrieben, die Informationen<br />

über verfügbare Kanäle auf den vorhandenen TV-Karten zusammenfasst<br />

(siehe Abschnitt 5.2.1).<br />

Ein weiteres Problem tritt bei einer gemeinsamen Verwendung einer TV-Quelle<br />

durch mehrere Anwendungen auf. Teilen sich Live TV <strong>und</strong> der Videorekorder eine<br />

TV-Karte, stellt sich die Frage, wer zum Wechseln des Kanals berechtigt ist. Eine<br />

Aufnahme durch den Videorekorder soll nicht unterbrochen werden, was bei einem<br />

Kanalwechsel durch Live TV geschehen würde. Selbst wenn der Videorekorder<br />

eine neue verwendbare TV-Quelle finden würde, wäre die Aufnahme kurzzeitig<br />

unterbrochen, was nicht akzeptabel ist. Aus diesem <strong>und</strong> weiteren in Abschnitt 5.3<br />

genannten Gründen muss eine Hierarchie der Anwendungen festgelegt werden,<br />

auf deren Basis bestimmt wird, welche kontrollierend auf eine TV-Karte zugreifen<br />

darf um den Kanal zu wechseln. Weiterhin soll die Feststellung ermöglicht werden,<br />

durch welche Anwendung eine TV-Quelle aktuell genutzt wird. Unter den<br />

oben genannten Gesichtspunkten ist nicht ausreichend zu erkennen, dass eine TV-<br />

Quelle verwendet wird, sondern es muss auch bekannt sein, zu welchem Zweck.<br />

Angenommen, es gälte die Regelung, dass bei einem gemeinsamen Zugriff auf eine<br />

TV-Karte durch den Videorekorder <strong>und</strong> Live TV lediglich der Videorekorder<br />

den Kanal wechseln darf, dann bedeutet das: Wird eine TV-Karte momentan von


5.1. VERWENDUNG EINER QUELLE DURCH EINE ANWENDUNG<br />

Live TV genutzt, die der Videorekorder aber zeitgleich für eine Aufnahme verwenden<br />

möchte, so ist dies <strong>und</strong> zusätzlich das Einstellen des von ihm benötigten<br />

Fernsehkanals erlaubt. Möchte der Benutzer der Live TV-Anwendung den Kanal<br />

wechseln, muss die Anwendung wissen, wer die TV-Karte mitverwendet <strong>und</strong> – in<br />

Abhängigkeit davon – den Kanalwechsel zulassen oder verweigern. Die Regeln bei<br />

einem gemeinsamen Zugriff mehrerer Anwendungen auf eine TV-Quelle werden<br />

in Abschnitt 5.3 vorgestellt.<br />

In [LRS05] wird ein Algorithmus beschrieben, der in einem <strong>Mehrbenutzer</strong>-Szenario<br />

verwendbare TV-Quellen bestimmt. Er dient als Vorlage der in diesem Kapitel beschriebenen<br />

Konzepte <strong>und</strong> <strong>Implementierung</strong>en.<br />

5.1 Verwendung einer Quelle durch eine Anwendung<br />

Im einfachsten Fall, der bei einem Zugriff auf TV-Ressourcen eintreten kann, wird<br />

eine TV-Karte von einer einzigen Anwendung entweder zum Sammeln von EPG-<br />

Informationen, zum Aufnehmen einer Sendung oder für LiveTV verwendet.<br />

Diese Funktionaliät wird von <strong>NMM</strong> sowohl für lokale als auch im Netzwerk verteilte<br />

TV-Karten bereitgestellt. Die Analyse der Wechselwirkungen der einzelnen<br />

Anwendungsfälle ist nicht relevant, da nur einer von ihnen eintritt.<br />

5.2 Zugriff einer Anwendung auf mehrere Quellen<br />

Im zweiten Szenario stehen einer Anwendung mehrere TV-Karten zur Verfügung,<br />

auf die zugegriffen werden kann, unter der Prämisse, dass die entsprechenden TV-<br />

Karten für nur einen Anwendungsfall verwendet werden.<br />

Dies erfordert die Kenntnis darüber, welche Kanäle die einzelnen TV-Quellen bereitstellen.<br />

Wenn angenommen wird, dass die Live TV-Anwendung aktuell eine<br />

TV-Karte verwendet <strong>und</strong> nun den Kanal wechseln möchte, muss festgestellt werden,<br />

ob dieser von der momentan genutzten Karte zur Verfügung gestellt wird.<br />

Andernfalls ist der Anwendung eine TV-Quelle zuzuweisen, die den gewünschten<br />

Kanal anbietet. Das Vorgehen ist in Abbildung 5.2 graphisch dargestellt.<br />

Wird ein Kanal von mehreren TV-Quellen bereitgestellt, muss für den Zugriff eine<br />

Ordnung der TV-Karten festgelegt werden. Dadurch ist es möglich die in Abschnitt<br />

1.1 angesprochenen Unterschiede der Übertragungstechniken zu berücksichtigen.<br />

Da in dem betrachteten Fall lediglich eine Anwendung auf TV-Karten<br />

zugreift, wird dieser immer die erste TV-Karte aus der Liste zugeordnet. Wechselwirkungen<br />

mit anderen Anwendungen treten nicht auf. Dennoch ist das Feststellen<br />

verfügbarer Kanäle sowie das Speichern der zugehörigen TV-Quellen erforderlich.<br />

101


KAPITEL 5. Realisierung von Szenarien des <strong>Mehrbenutzer</strong>-TV<br />

102<br />

TV-Karte aus Liste erhalten<br />

Setze Kanal A<br />

Kanal A gesetzt<br />

Kanal A soll<br />

gesetzt werden<br />

Erfrage TV-Karten von<br />

globaler Kanalliste<br />

Liste mit TV-Karten erhalten,<br />

die Kanal A bereitstellen<br />

Nimm TV-Karte aus Liste<br />

XOR<br />

Keine TV-Karte in Liste<br />

vorhanden<br />

Fehlerbehandlung:<br />

Kanal A kann nicht<br />

eingestellt werden<br />

Abbildung 5.2: Vorgehensweise bei einem Zugriff einer Anwendung auf mehrere<br />

TV-Karten.<br />

5.2.1 Die globale Kanalliste<br />

Die globale Kanalliste enthält Informationen darüber, von welchen TV-Quellen<br />

ein entsprechender Kanal empfangen werden kann. Zu diesem Zweck speichert sie<br />

den Sendernamen, die Kanalnummer auf der entspechenden TV-Karte sowie deren<br />

Beschreibung als GraphURL. Die Kanalnummer bezeichnet eine vom Anwender<br />

festgelegte Zuteilung einer Nummer zu einem Kanal. Eine Kanalnummer ist dabei<br />

genau einem Kanal zugeordnet, während ein solcher durch mehrere Kanalnummern<br />

angesprochen werden kann. Die GraphURL [RL04] gibt die Art der Quelle<br />

an, sodass beim Erstellen <strong>eines</strong> <strong>NMM</strong>-Graphen der entsprechende Quellknoten<br />

verwendet wird. Weiterhin enthält sie bei Bedarf quellenspezifische Parameter sowie<br />

den Rechnernamen, wenn auf die TV-Karte über das Netzwerk zugegriffen<br />

werden soll . Die allgemeine Form einer solchen URL lautet wie folgt:<br />

://?=&...<br />

In dieser Diplomarbeit wurden als TV-Quellen die in Abschnitt 3.1 vorgestellten<br />

Knoten DVBReadNode <strong>und</strong> IVTVReadNode verwendet. Die entsprechenden<br />

GraphURLs haben die folgende Form:<br />

dvbtv:///?=&...<br />

ivtv:///?=&...<br />

Die globale Kanalliste speichert zu jedem Kanal eine Liste von GraphURLs, da ein<br />

Sender von mehreren TV-Karten empfangen werden kann. Diese Liste repäsentiert


5.2. ZUGRIFF EINER ANWENDUNG AUF MEHRERE QUELLEN<br />

Abbildung 5.3: Die Klasse TVChannel speichert Informationen zu Kanälen. Diese<br />

werden in der Klasse TVChannelList verwaltet.<br />

die Hierarchie der Karten <strong>und</strong> ist absteigend nach deren Präferenz geordnet. Die<br />

Quelle mit der höchsten Präferenz legt den Kanalnamen fest, der zu dem Sender<br />

gespeichert wird. Ebenso sind die Kanal-Informationen selbst in einer Liste verwaltet.<br />

Die Position der Kanäle innerhalb dieser Liste gibt zugleich die Kanalnummer<br />

des Senders innerhalb der globalen Kanalliste an. Die initiale Ordnung der<br />

Kanäle wird von der Reihenfolge bestimmt, mit der die TV-Quellen nach verfügbaren<br />

Kanälen befragt werden. Zu jeder neuen Kanal-Information wird geprüft, ob<br />

der Sender in der globalen Kanalliste schon enthalten ist <strong>und</strong> diesem lediglich die<br />

GraphURL der Quelle hinzugefügt. Bisher unbekannte Sender werden der globalen<br />

Kanalliste angehängt.<br />

5.2.1.1 Datenstruktur der globalen Kanalliste<br />

Die Kanaldaten der TV-Quellen für die globale Kanalliste sind in der serialisierbaren<br />

Datenstruktur TVChannelList gespeichert. Dies ist notwendig, da sie auch<br />

bei der Erstellung der globalen Kanalliste verwendet wird um Informationen über<br />

verfügbare Kanäle von entfernten TV-Karten zu erhalten (siehe Abschnitt 5.2.1.2).<br />

Sie verwaltet intern die Kanal-Informationen in einer Liste von Objekten der TV-<br />

Channel-Klasse. Die Klassendiagramme sind in Abbildung 5.3 zu sehen. Diese<br />

Klassen enthalten als Informationen über einen einzelnen Kanal sowohl den Na-<br />

103


KAPITEL 5. Realisierung von Szenarien des <strong>Mehrbenutzer</strong>-TV<br />

104<br />

men des Senders als auch eine Liste von TV-Karten, repräsentiert durch eine GraphURL,<br />

über die der Sender empfangen werden kann. Zu den einzelnen TV-Karten<br />

wird zum schnellen Zugriff auf den Kanal die Nummer des Senders in der Kanalliste<br />

der entsprechenden TV-Karte abgelegt. Weiterhin können Aliase zu dem<br />

Kanalnamen angegeben werden, da, wie schon in Abschnitt 4.2 beschrieben, unterschiedliche<br />

Namen für Sender existieren können.<br />

Die gespeicherten Daten der TVChannelList-Klasse können in eine XML-Datei<br />

geschrieben bzw. von dort gelesen werden. Die Kanal-Informationen aus der XML-<br />

Datei sind Bestandteile der tvchannel-Elemente, welche als Attribut name den<br />

Kanalnamen enthalten. Dieser wird von der TV-Quelle festgelegt, welche die höchste<br />

Benutzerpräferenz besitzt. Als Kinder enthalten die tvchannel-Elemente die<br />

dem in name angegebenen Kanal zugeordneten Informationen. Diese sind zum<br />

einen in card-Elementen abgelegt, die Daten zu jeweils einer TV-Karte enthalten,<br />

über die der Sender empfangen werden kann. Als Attribut number ist die Kanalnummer<br />

des entsprechenden Kanals auf der genannten TV-Karte angegeben <strong>und</strong><br />

als Daten die GraphURL der TV-Quelle. Zum anderen können die tvchannel-<br />

Elemente alias-Elemente enthalten, die alternative Schreibweisen für Sender<br />

aufweisen. Eine entfernte TV-Quelle kann in ihrer channelAlias.xml Aliase<br />

definieren, welche in der lokalen fehlen. Da die Datei channelAliases.xml<br />

bei einer Installation von <strong>NMM</strong> schreibgeschützt sein kann, werden diese Aliase<br />

in der XML-Datei der globalen Kanalliste abgelegt. Zudem werden die lokalen<br />

Aliase beim Hinfzufügen <strong>eines</strong> neuen Kanals zwecks <strong>eines</strong> schnellen Zugriffs ermittelt<br />

<strong>und</strong> ebenfalls in der globalen Kanalliste gespeichert. So muss die Datei<br />

channelAliases.xml nicht bei jeder Abfrage nach einem Kanalnamen geöffnet<br />

<strong>und</strong> durchsucht werden, was sich bei der <strong>Implementierung</strong> als nicht performant<br />

erwiesen hat.<br />

Der folgende Auszug aus der XML-Datei der globalen Kanaliste zeigt die gespeicherten<br />

Informationen der Sender ARD, ZDF <strong>und</strong> RTL. ARD <strong>und</strong> ZDF werden<br />

sowohl von der lokal vorhandenen DVB-Karte als auch von der entfernten analogen<br />

TV-Quelle in Rechner ’host’ zur Verfügung gestellt. RTL ist ausschließlich<br />

über die lokale DVB-Karte zu empfangen. Um nun z.B. ARD zu empfangen, muss<br />

entweder auf der lokalen DVB-Karte Kanal 1 oder auf der analogen Karte Kanal<br />

0 eingestellt werden, was durch die number-Attribute der card-Elemente angezeigt<br />

wird. Weiterhin ist für den Sender ARD ein Alias festgelegt, da dieser auch<br />

als ’Das Erste’ bezeichnet werden kann.<br />

<br />

<br />

<br />

dvbtv://localhost<br />

ivtv://host?freqtable=pal-europe<br />

Das Erste<br />

<br />

<br />

dvbtv://localhost<br />

ivtv://host?freqtable=pal-europe<br />

<br />

<br />

dvbtv://localhost


...<br />

<br />

5.2. ZUGRIFF EINER ANWENDUNG AUF MEHRERE QUELLEN<br />

Zum Zugriff auf die TVChannel-Objekte stellt die Klasse TVChannelList die<br />

folgenden Methoden bereit:<br />

getChannelByNumber(unsigned int number) dient der Abfrage des<br />

Kanals über dessen Kanalnummer in der globalen Kanalliste. Die TVChannel-Objekte<br />

sind in einer Liste gespeichert, sodass die Kanalnummer die<br />

Position des Kanals in dieser Liste angibt.<br />

getChannelByName(string name) dient der Abfrage <strong>eines</strong> Kanals unter<br />

Verwendung <strong>eines</strong> Sendernamens. Hierbei werden der gespeicherte Name <strong>eines</strong><br />

Senders sowie dazu bekannte Aliase mit dem Parameter verglichen <strong>und</strong><br />

bei Übereinstimmung das entsprechende Objekt der TVChannel-Klasse<br />

zurückgeliefert.<br />

5.2.1.2 Auslesen der Kanäle einer TV-Quelle<br />

Zum Erstellen der globalen Kanalliste muss zuerst festgelegt werden, welche TV-<br />

Quellen zur Verfügung stehen. Dies geschieht durch entsprechende Einträge in der<br />

Konfigurations-Datei der Multimedia-Box (siehe Anhang A), wodurch Art <strong>und</strong> Ort<br />

der TV-Quelle durch Angabe der entsprechenden GraphURL spezifiziert werden.<br />

Wie bereits erwähnt, ist die Qualiät der Übertragung unterschiedlich. Es ist jedoch<br />

nicht möglich dynamisch festzustellen, welche Bild- <strong>und</strong> Ton-Qualität die entsprechende<br />

Quelle bereitstellt. Aus diesem Gr<strong>und</strong> wird die Reihenfolge bei der Angabe<br />

der TV-Quellen beachtet, die vom Benutzer mit absteigender Präferenz anzugeben<br />

sind. Ein möglicher Konfigurationseintrag für die Multimedia-Box zur Verwendung<br />

einer digitalen <strong>und</strong> analogen TV-Karte könnte wie folgt aussehen, unter der<br />

Voraussetzung, dass der DVB-Karte gegenüber der analogen eine höhere Präferenz<br />

zukommt:<br />

# Angabe der i n s g e s a m t v e r w e n d e t e n TV−Karten<br />

tvhosts_number=2<br />

## DVB−Karte i n dem l o k a l e n Rechner<br />

tvhost_0=dvbtv://localhost<br />

## IVTV−Karte i n dem e n t f e r n t e n Rechner ’ host ’<br />

tvhost_1=ivtv://host?freqtable=pal-europe<br />

Anschließend ist die Ermittlung der empfangbaren Kanäle der angegebenen TV-<br />

Karten notwendig. Diese Informationen werden bei den verwendeten TV-Quellen<br />

erfragt, wozu die entsprechenden <strong>NMM</strong>-Knoten um die <strong>Implementierung</strong> des IChannelInfo-Interfaces<br />

(siehe Abbildung 5.4) erweitert wurden. Bei einer Abfrage<br />

ermittelt der Knoten die Kanäle, die er bereiststellen kann. Dazu wertet er seine<br />

105


KAPITEL 5. Realisierung von Szenarien des <strong>Mehrbenutzer</strong>-TV<br />

106<br />

Abbildung 5.4: Die in dieser Arbeit verwendeten TV-Quellknoten wurden zum Erfragen<br />

von verfügbaren Kanälen um die <strong>Implementierung</strong> des IChannelInfo-<br />

Interfaces erweitert.<br />

eigene Konfigurations-Datei aus, in der angegeben ist, welche Kanäle von der TV-<br />

Quelle empfangen werden können <strong>und</strong> analysiert zusätzliche Informationen über<br />

technische Parameter. Diese sind jedoch ausschließlich für das exakte Einstellen<br />

der TV-Karte zum Empfang des entsprechenden Kanals relevant <strong>und</strong> spielen somit<br />

in der globalen Kanalliste keine Rolle. Für diese ist lediglich die Bezeichnung des<br />

Kanals sowie dessen Nummer in der Kanalliste der TV-Karte wichtig. Diese Informationen<br />

werden schließlich mittels der Klasse TVChannelList übertragen.<br />

Eine Beschreibung der Konfiguration der verwendeten TV-Karten kann in [Wel05]<br />

nachgelesen werden.<br />

Zum Auslesen der Daten <strong>und</strong> Erstellen der globalen Kanalliste wurde das Kommandozeilen-Programm<br />

channelReader implementiert. Dieses wertet die Angaben<br />

über TV-Karten in der Konfigurations-Datei der Multimedia-Box aus <strong>und</strong><br />

erfragt reihum die Kanallisten der TV-Quellen. Die erhaltenen Listen fasst er in<br />

einem Objekt der TVChannelList zusammen, wobei er erkennt, ob ein Kanal<br />

von einer vorher befragten TV-Quelle schon zur Verfügung gestellt wird. In<br />

diesem Fall fügt er dem entsprechenden TVChannel-Eintrag die GraphURL der<br />

TV-Karte hinzu. Zum Abschluss schreibt der channelReader die gesammelten<br />

Informationen in die XML-Datei der globalen Kanalliste. Diese wird standardmäßig<br />

in dem $HOME-Verzeichnis des jeweiligen Benutzers im Unterverzeichnis<br />

.nmm unter dem Namen tv_channels.xml abgelegt. Sie kann anschließend<br />

vom Benutzer bei Bedarf bearbeitet werden um u.a. die Kanalreihenfolge festzulegen.<br />

5.2.2 Ein Videorekorder auf Basis von <strong>NMM</strong><br />

Ein Anwendungsfall für den Zugriff auf TV-Karten stellt die Aufnahme von Sendungen<br />

des Fernsehprogramms dar. Um möglichst viele Sendungen aufzeichnen zu<br />

können, sind die einprogrammierten Aufnahmen auf verfügbare TV-Karten aufzuteilen.<br />

Dazu wurde der Videorekorder entwickelt, der überlappende Aufnahmen<br />

erkennen <strong>und</strong> auf verfügbare TV-Quellen verteilen kann <strong>und</strong> schließlich die gewünschte<br />

Sendung aufzeichnet. Darüberhinaus wird der Videorekorder an einen


5.2. ZUGRIFF EINER ANWENDUNG AUF MEHRERE QUELLEN<br />

Netzwerk<br />

Videorekorder<br />

mit lokaler<br />

TV-Karte<br />

Netzwerk Netzwerk<br />

Zugriff auf Dienst<br />

Zugriff auf TV-Karte<br />

TV-Karte TV-Karte<br />

Abbildung 5.5: Der Videorekorder steht im Netzwerk als zentraler Server zur Verfügung,<br />

zu dem sich Anwendungen bei Bedarf verbinden. Er selbst hat wiederum<br />

Zugriff auf eine lokale <strong>und</strong> zwei im Netzwerk verteilte TV-Karten.<br />

EPG angeb<strong>und</strong>en, sodass Informationen zu einzelnen Aufnahmen abgefragt <strong>und</strong><br />

auf Gr<strong>und</strong> dieser Daten automatische Wiederholungen programmiert werden können.<br />

Vor der Realisierung stellte sich die Frage, inwieweit eine Verteilung des Videorekorders<br />

im Netzwerk vorgenommen werden soll. Eine Variante bestand darin<br />

den Videorekorder als zentralen Server zu installieren <strong>und</strong> lediglich von entfernten<br />

Rechnern Knoten zur Aufnahme von Sendungen anzufordern oder mehrere Videorekorder<br />

im Netzwerk verfügbar zu machen. Eine weitere, mögliche Realisierung<br />

wird in [Har02] vorgeschlagen, wo mehrere im Netzwerk verteilte Videorekorder<br />

ansprechbar sind. Die Quelle beinhaltet lediglich eine Projektbeschreibung, was bis<br />

zum Zeitpunkt dieser Arbeit noch nicht realisiert wurde. Dort ist auf jedem Rechner,<br />

der eine TV-Karte zur Verfügung stellt, ein Videorekorder aktiv, der selbst<br />

jedoch nur auf die lokale TV-Karte zugreifen kann. Zum Einprogrammieren einer<br />

Aufnahme werden die verfügbaren Videorekorder reihum gefragt, ob dies möglich<br />

ist. Dies erfordert eine Kommunikation der Videorekorder untereinander, wenn eine<br />

automatische Wiederholung auf Gr<strong>und</strong> von Konflikten in einer Instanz nicht<br />

vorgenommen werden kann. Zur Lösung dieses Problems <strong>und</strong> zur einfachen Verwaltung<br />

der Aufnahmen wurde der Videorekorder schließlich als zentraler Server<br />

realisiert, mit dem sich die Anwendung <strong>eines</strong> Benutzers zur Programmierung von<br />

Aufnahmen verbinden muss. Der Zugriff auf im Netzwerk verteilte TV-Karten wird<br />

durch <strong>NMM</strong> realisiert. Abbildung 5.5 zeigt ein mögliches Szenario. Mehrere Anwendungen<br />

verbinden sich mit dem zentralen Videorekorder, der eine lokale <strong>und</strong><br />

zwei im Netzwerk verteilte TV-Karten verwendet.<br />

107


KAPITEL 5. Realisierung von Szenarien des <strong>Mehrbenutzer</strong>-TV<br />

108<br />

Abbildung 5.6: Dieses Diagramm zeigt die Klassen des Videorekorders.<br />

5.2.2.1 Realisierung des Videorekorders<br />

Der Videorekorder wurde zur Realisierung in verschiedene Klassen aufgeteilt (siehe<br />

Abbildung 5.6), welche die einzelnen Funktionalitäten implementieren. Die<br />

Klasse TVTimerControl erstellt die Objekte dieser Klassen <strong>und</strong> gibt die zu<br />

programmierenden Aufnahmen zur Bearbeitung an sie weiter. Für den Zugriff von<br />

Anwendungen auf den Videorekorder implementiert diese Klasse das ITVTimer-<br />

Interface (siehe Abbildung 5.7). Um Anwendungen über Statusänderungen von<br />

Aufnahmen zu informieren, implementiert die TVTimerControl-Klasse zusätzlich<br />

das ITVTimerEvents-Interface. Für seine Methoden kann eine Anwendung<br />

einen EventListener (siehe Abschnitt 3.1) registrieren <strong>und</strong> so über Statusänderungen<br />

benachrichtigt werden.<br />

Der TVTimerScheduler sorgt für die Zuordnung einer geeigneten freien TV-<br />

Karte zu einer Aufnahme. Dazu verwendet er die Klasse TVTimerConflict-<br />

Checker, welche Überlappungen einer neuen Aufzeichnung mit schon einprogrammierten<br />

erkennt. Die Klasse TVRecorderManager übernimmt deren Starten<br />

<strong>und</strong> Beenden <strong>und</strong> erstellt zur Aufnahme einer Sendung zum entsprechenden<br />

Zeitpunkt lokal einen TVRecorder. Dieser wiederum baut, je nach verwendeter<br />

Quelle, den lokalen oder verteilten Flussgraphen zur Aufzeichnung auf.<br />

Alle Informationen bzgl. einer Aufnahme werden in der Klasse TVTimerEntry<br />

(siehe Abbildung 5.8) gespeichert, wozu vor allem die Start- <strong>und</strong> Stopp-Zeit sowie<br />

der entsprechende Kanal zählen. Weiterhin werden sowohl die GraphURL der<br />

TV-Karte, die von der Aufzeichnung als Quelle verwendet werden soll, als auch<br />

die Nummer des einzustellenden Kanals auf dieser TV-Karte gespeichert, die in<br />

der globalen Kanalliste zu der GraphURL abgelegt ist. Der Zugriff auf den EPG<br />

ermöglicht die Abfrage einer Programmbeschreibung der Aufnahme, welche ebenfalls<br />

der TVTimerEntry-Klasse hinzugefügt werden kann. Zusätzlich erhält jeder<br />

TVTimerEntry eine ID um z.B. im Konfliktfall eine Aufnahme eindeutig<br />

zu identifizieren, was in Abschnitt 5.2.2.3 erklärt wird. Zur Festlegung des Status<br />

einer Aufzeichnung wurde ein Zustandsmodell entwickelt. Abbildung 5.9 zeigt<br />

die Zustände sowie die Zustandsübergänge. Der Status einer Aufnahme in einem


5.2. ZUGRIFF EINER ANWENDUNG AUF MEHRERE QUELLEN<br />

Abbildung 5.7: Dieses Diagramm zeigt die Klasse TVTimerControl <strong>und</strong> das<br />

Interface ITVTimer, über das Anwendungen mit dem Videorekorder kommunizieren.<br />

bestimmten Zustand wird im Folgenden beschrieben:<br />

SLEEPING Die Aufnahme wurde erfolgreich programmiert <strong>und</strong> wird zu dem<br />

angegeben Zeitpunkt gestartet. Solche, die automatisch wiederholt werden<br />

sollen, haben auch den Status SLEEPING, da sie noch zur Aufzeichnung<br />

ausstehen. Derartige Aufnahmen werden durch den entsprechend gesetzten<br />

Modus identifiziert, was in diesem Abschnitt noch beschrieben wird.<br />

CONFLICT Die Aufnahme konnte nicht programmiert werden, weil zum angegebenen<br />

Zeitpunkt alle TV-Karten, die den entsprechenden Kanal anbieten,<br />

schon programmierte Aufzeichnungen zugeteilt sind.<br />

RECORDING Zeigt eine momentan laufende Aufnahme an.<br />

RECORDED Die Aufnahme wurde erfolgreich ausgeführt.<br />

RECORDED_WITH_ERROR Während der Aufnahme ist ein Fehler aufgetreten,<br />

weshalb sie nicht ordnungsgemäß beendet werden konnte. Eine weitere<br />

Ursache für diesen Zustand liegt darin, dass zum Start-Zeitpunkt die vorher<br />

festgelegte TV-Karte nicht mehr verfügbar ist <strong>und</strong> alle weiteren Quellen mit<br />

Aufnahmen belegt sind.<br />

109


KAPITEL 5. Realisierung von Szenarien des <strong>Mehrbenutzer</strong>-TV<br />

110<br />

Abbildung 5.8: Die Klasse TVTimerEntry dient der Speicherung der Informationen<br />

zu einer Aufnahme.


5.2. ZUGRIFF EINER ANWENDUNG AUF MEHRERE QUELLEN<br />

Abbildung 5.9: Zustände <strong>und</strong> Zustandsübergänge einer Aufnahme.<br />

Eine weitere zu einer Aufnahme gespeicherte Information ist der Benutzername<br />

des Anwenders, der sie programmiert hat. Durch die Abfrage dieses Namens wird<br />

geprüft, ob der Anwender zum Bearbeiten oder Löschen einer Aufzeichnung berechtigt<br />

ist. Dazu muss der Methode zum Löschen bzw. Ändern einer Aufnahme<br />

der Benutzername mit angegeben werden um die Berechtigungsprüfung vornehmen<br />

zu können.<br />

Tritt während der Programmierung von Aufnahmen ein Konflikt auf, werden zusätzliche<br />

Informationen in dem TVTimerEntry abgelegt. Zum Setzen des entsprechenden<br />

Status werden zusätzlich die IDs der in Konflikt stehenden Aufzeichnungen<br />

gespeichert. Dadurch lassen sie sich leicht ermitteln <strong>und</strong> können in einer<br />

Anwendung angezeigt werden. Der Gr<strong>und</strong>, warum IDs <strong>und</strong> keine Referenzen<br />

oder Zeiger [Str98] auf Objekte der TVTimerEntry-Klasse von in Konflikt stehenden<br />

Aufnahmen gespeichert werden, besteht darin, dass die Referenzen auf<br />

lokale Speicheradressen zeigen <strong>und</strong> diese Adressen bei einer Anforderung <strong>eines</strong><br />

TVTimerEntrys von einem im Netzwerk verfügbaren Videorekorder in der lokalen<br />

Anwendung nicht gültig sind. Dadurch kann nicht mehr festgestellt werden,<br />

welche Aufzeichnungen zu der angefragten in Konflikt stehen.<br />

Der Videorekorder bietet die Möglichkeit Aufnahmen in einem bestimmten Zeitrhythmus<br />

zu wiederholen. Informationen über die entsprechende Periode werden<br />

ebenfalls in dem TVTimerEntry gespeichert. Der Videorekorder unterstützt dabei<br />

folgende Modi zur zeitlichen Wiederholung von Aufnahmen:<br />

ONCE Die Aufnahme wird einmalig aufgezeichnet. Es findet keine automatische<br />

Wiederholung statt.<br />

DAILY Die Aufnahme wird täglich zu der angegebenen Zeit auf dem entsprechenden<br />

Kanal gestartet.<br />

WEEKLY Die Aufnahme wird wöchentlich zu der angegebenen Zeit auf dem<br />

entsprechenden Kanal gestartet.<br />

111


KAPITEL 5. Realisierung von Szenarien des <strong>Mehrbenutzer</strong>-TV<br />

112<br />

MONTHLY Die Aufnahme wird monatlich zu der angegebenen Zeit auf dem entsprechenden<br />

Kanal gestartet, d.h immer am gleichen Tag im Monat (z.B.<br />

immer am 12. <strong>eines</strong> Monats).<br />

WEEKDAYS Die Aufnahme wird immer montags bis freitags zu der angegebenen<br />

Zeit auf dem entsprechenden Kanal gestartet.<br />

WEEKENDS Die Aufnahme wird immer samstags <strong>und</strong> sonntags zu der angegebenen<br />

Zeit auf dem entsprechenden Kanal gestartet.<br />

Bei Anbindung an einen EPG werden weitere Perioden unterstützt. Als Gr<strong>und</strong>lage<br />

dienen vorhandene EPG-Informationen zu einer Aufnahme. Für die Suche<br />

entsprechender Informationen wird als Schlagwort der Titel der dazu gespeicherten<br />

EPG-Daten verwendet, wobei je nach gewünschter Periode die Ergebnisse zusätzlich<br />

nach Kanal oder Uhrzeit gefiltert sind. Die Perioden, basierend auf EPG-<br />

Informationen, sind im Einzelnen:<br />

RANDOM Die EPG-Daten werden nach dem vorhandenen Titel der Aufnahme-<br />

Informationen durchsucht. Alle Resultate dienen als Gr<strong>und</strong>lage zur automatischen<br />

Reprogrammierung.<br />

RANDOM_ONLY_CHANNEL Beim Durchsuchen der EPG-Daten wird neben<br />

dem Titel auch der Kanal berücksichtigt, für den die Aufnahme erstellt wurde.<br />

RANDOM_ONLY_CHANNEL_AND_TIME Zusätzlich zum vorhandenen Titel<br />

<strong>und</strong> dem angegeben Kanal werden die Daten nach der Uhrzeit der programmierten<br />

Aufnahme gefiltert. Nur Ergebnisse, die in diesen Zeitraum fallen,<br />

dienen als Gr<strong>und</strong>lage zur automatischen Wiederholung.<br />

Alle verwendbaren Ergebnisse der EPG-Suche werden in dem TVTimerEntry<br />

gespeichert um Anfragen an den EPG zu minimieren.<br />

Die Objekte der TVTimerEntry-Klasse werden zur Verwaltung in der TVTimer-<br />

List abgelegt (siehe Abbildung 5.10). Diese Klasse wurde als Singleton [GHJV95]<br />

realisiert, sodass innerhalb des Videorekorders jederzeit darauf zugegriffen werden<br />

kann <strong>und</strong> auch sichergestellt ist, dass immer die gleiche Instanz der TVTimer-<br />

List angesprochen wird. Von dieser Klasse können bei Bedarf entsprechende<br />

TVTimerEntrys angefordert werden, wobei folgende Abfragen möglich sind:<br />

getTimer(unsigned int id) Abfrage einer einzelnen Aufnahme mit der<br />

angegebenen ID. Wurde keine Aufnahme mit der entsprechenden ID gef<strong>und</strong>en,<br />

wird eine NoTimerFo<strong>und</strong>Exception geworfen.<br />

getTimers() Liefert eine Liste mit allen vorhandenen Aufnahmen.<br />

getTimers(string day, string channel) Liefert eine Liste von Aufnahmen,<br />

die für den angegebenen Tag <strong>und</strong> Kanal verfügbar sind.


5.2. ZUGRIFF EINER ANWENDUNG AUF MEHRERE QUELLEN<br />

Abbildung 5.10: In der Klasse TVTimerList werden die TVTimerEntry-<br />

Objekte verwaltet.<br />

getTimers(string tvcardUrl) Liefert eine Liste von Aufnahmen, denen<br />

die angegebene TV-Karte zugeordnet ist.<br />

getSleepingTimers() Liefert alle erfolgreich programmierten Aufnahmen,<br />

deren Aufzeichnung noch aussteht.<br />

getRecordingTimers() Liefert eine Liste aller gegenwärtig laufenden Aufnahmen.<br />

getRecordedTimers() Liefert eine Liste aller Aufnahmen, die erfolgreich<br />

oder mit Fehlern aufgezeichnet worden sind. Periodische Aufnahmen sind<br />

davon ausgeschlossen. Diese können über die Methode getSleeping-<br />

Timers() ermittelt werden.<br />

getConflictTimers() Liefert eine Liste aller Aufnahmen, deren Programmierung<br />

auf Gr<strong>und</strong> von Konflikten fehlgeschlagen ist.<br />

getConflictsWithTimer(const TVTimerEntry &entry) Liefert eine<br />

Liste aller Aufzeichnungen, die mit der angegebenen Aufnahme in Konflikt<br />

stehen.<br />

5.2.2.2 Einprogrammieren von Aufnahmen<br />

Zum Programmieren einer Aufnahme muss zunächst ein Objekt der TVTimer-<br />

Entry-Klasse kreiert werden, wobei die wichtigsten Informationen zu deren Spezifizierung<br />

wie folgt anzugeben sind:<br />

die Start-Zeit Wann soll die Aufnahme starten?<br />

113


KAPITEL 5. Realisierung von Szenarien des <strong>Mehrbenutzer</strong>-TV<br />

114<br />

Abbildung 5.11: Zum Programmieren wird eine Aufnahme von verschiedenen<br />

Klassen geprüft.<br />

Abbildung 5.12: Die Klasse TVTimerScheduler teilt Aufnahmen eine zu verwendende<br />

TV-Karte zu.<br />

die Stopp-Zeit Wann endet die Aufnahme?<br />

der Kanalname Von welchem Kanal soll aufgezeichnet werden?<br />

Alle weiteren Informationen, wie z.B. die verwendete TV-Quelle, werden von dem<br />

Videorekorder automatisch ermittelt <strong>und</strong> hinzugefügt.<br />

Die Programmierung erfolgt durch Aufrufen der Methode programTimer(const<br />

TVTimerEntry &entry) des ITVTimer-Interfaces. Das Sequenzdiagramm<br />

des Programmierens im Videorekorder ist in Abbildung 5.11 dargestellt.<br />

Der Videorekorder stellt zuerst fest, ob die Zeiten korrekt angegeben sind. Ist die<br />

Stopp-Zeit kleiner als die Start-Zeit, d.h. die Aufnahme endet, bevor sie begonnen<br />

hat, wird das Datum der Stopp-Zeit um einen Tag erhöht, sodass die Aufnahme erst<br />

am nächsten Tag endet. Dies geschieht durch Aufrufen der Methode verify()<br />

der TVTimerEntry-Klasse.<br />

Anschließend wird nach EPG-Informationen bzgl. der angegebenen Zeit <strong>und</strong> nach<br />

zukünftigen Sendungen bei entsprechend eingestellter Periode gesucht. Unabhängig<br />

vom Ergebnis der EPG-Suche wird das Objekt dem TVTimerScheduler<br />

übergeben (siehe Abbildung 5.12). Dieser ermittelt durch Abfrage der globalen<br />

Kanalliste alle bekannten TV-Karten für den angegebenen Kanal <strong>und</strong> stellt für jede


5.2. ZUGRIFF EINER ANWENDUNG AUF MEHRERE QUELLEN<br />

Abbildung 5.13: Dieses Diagramm zeigt die Klasse TVTimerConflict-<br />

Checker, welche eine neue Aufnahme mit einprogrammierte Aufnahmen auf<br />

konflikte vergleicht.<br />

erhaltene Karte fest, ob die neue Aufnahme mit schon programmierten in Konflikt<br />

steht. Dazu wird bei der TVTimerList eine Anfrage nach allen einprogrammierten<br />

Aufzeichnungen gestellt, denen die gerade betrachtete TV-Karte zugeordnet ist.<br />

Da die TV-Karten in der globalen Kanalliste nach Benutzerpräferenz geordnet sind,<br />

wird bei der Zuteilung einer TV-Karte zu einer Aufnahme die Reihenfolge durch<br />

das sequentielle Abarbeiten der erfragten Kanalliste berücksichtigt. Die erhaltene<br />

Liste <strong>und</strong> die neue Aufzeichnung werden dem TVTimerConflictChecker<br />

zur Prüfung übergeben. Bei einem negativen d.h. konfliktfreien Ergebnis, wird<br />

die in der globalen Kanalliste angegebene GraphURL der TV-Karte in dem TV-<br />

TimerEntry gespeichert, bei einem positiven mit der nächsten TV-Karte auf die<br />

gleiche Weise verfahren.<br />

5.2.2.3 Erkennen <strong>und</strong> Auflösen von Konflikten<br />

Ein Konflikt entsteht dadurch, dass sich zwei Aufnahmen auf der gleichen TV-<br />

Karte zeitlich überschneiden <strong>und</strong> von unterschiedlichen Kanälen aufgezeichnet<br />

werden sollen. Der TVTimerConflictChecker (siehe Abbildung 5.13) vergleicht<br />

in einem Testverfahren alle in einer Liste enthaltenen Aufzeichnungen, die<br />

schon für eine bestimmte TV-Karte vorgesehen sind, mit der zu programmierenden.<br />

Hierbei sind auch die Perioden der bereits programmierten Aufnahmen zu<br />

berücksichtigen. Abbildung 5.14 zeigt sich überschneidende <strong>und</strong> deren Verteilung<br />

auf TV-Karten, welche beide Kanal A <strong>und</strong> B bereitstellen. Aufnahme 1 wurde zuerst<br />

programmiert, weshalb ihr TV-Karte1 zugeteilt wurde. Die Programmierung<br />

von Nummer 2 bis 5 erfolgte in zeitlichem Abstand. Weil alle Aufzeichnungen<br />

mit Aufnahme 1 in Konflikt stehen, wurde ihnen TV-Karte2 zugewiesen. Sie überschneiden<br />

sich zwar auch untereinander, da sie aber für den gleichen Kanal erstellt<br />

wurden, können sie eine gemeinsame TV-Karte verwenden.<br />

Um nun einen Konflikt zwischen zwei Aufnahmen festzustellen, werden deren<br />

Start- <strong>und</strong> End-Zeiten verglichen. Überschneiden sich diese, wird überprüft, ob sie<br />

auf dem gleichen Kanal vorgenommen werden sollen. Ist dies der Fall, liegt kein<br />

Konflikt vor, da durch das Session-Sharing in <strong>NMM</strong> die gleiche TV-Karte verwendet<br />

werden kann. Dadurch ist es möglich, viele Aufzeichnungen einer TV-Karte zuzuordnen,<br />

sodass die restlichen für andere frei bleiben können. Bei Überdeckung<br />

der neuen Aufnahme durch eine programmierte wird angezeigt, dass für diesen<br />

Zeitraum schon eine solche vorgesehen ist. Um Speicherplatz zu sparen wird die<br />

neue Aufnahme verworfen, was der Anwendung durch eine TimerAlready-<br />

ProgramedException angezeigt wird. In Abbildung 5.14 wird Aufnahme 3<br />

115


KAPITEL 5. Realisierung von Szenarien des <strong>Mehrbenutzer</strong>-TV<br />

116<br />

5<br />

4<br />

3<br />

2<br />

1<br />

Aufnahme Nr.<br />

Kanal B<br />

Kanal B<br />

Kanal B<br />

Kanal A<br />

Kanal B<br />

Zeit<br />

TV-Karte2<br />

TV-Karte1<br />

Abbildung 5.14: Beide TV-Karten stellen sowohl Kanal A als auch Kanal B zur<br />

Verfügung. Aufnahme 1 wurde zuerst erstellt, weshalb ihr TV-Karte1 zugewiesen<br />

wurde. Die Programmierung der Aufnahmen 2 bis 5 erfolgte zu einem späteren<br />

Zeitpunkt. Da sie von dem gleichen Kanal aufnehmen sollen, wurde allen TV-<br />

Karte2 zugewiesen.<br />

von Nummer 5 überdeckt. Würde diese vor Aufzeichnung 3 programmiert werden,<br />

würde sie abgelehnt werden.<br />

Ist dieser Test erfolgreich absolviert, wird die Periode der einprogrammierten Aufnahme<br />

überprüft. Soll diese täglich gestartet werden, kontrolliert die Methode die<br />

Uhrzeiten der beiden Aufzeichnungen auf Überschneidung. Bei einer wöchentlichen<br />

Aufnahme wird zusätzlich getestet, ob die neue für den gleichen Wochentag<br />

programmiert wurde. Liegt eine monatliche vor, werden die Uhrzeiten <strong>und</strong><br />

die Monatstage verglichen. Analog dazu laufen die Tests für eine Werktag- bzw<br />

Wochenend-Periode ab. Zur Erkennung <strong>eines</strong> Konflikts mit einer auf EPG-Informationen<br />

basierenden Periode werden die in dem TVTimerEntry gespeicherten<br />

EPG-Daten zukünftiger Sendungen abgefragt <strong>und</strong> auf Überschneidung getestet,<br />

weil sie zukünftige Aufnahmen repäsentieren. In allen Fällen werden bei festgestellter<br />

Überschneidung immer die angegebenen Kanäle ermittelt sowie bei Überdeckung<br />

die neue Aufzeichnung verworfen. Sind diese verschieden, liegt ein Konflikt<br />

vor.<br />

Bei Erkennung <strong>eines</strong> Konflikts bzgl. einer TV-Karte werden entsprechende Informationen<br />

in den TVTimerEntry-Objekten gespeichert. Zu der einprogrammierten<br />

Aufnahme wird die ID der neuen hinzugefügt <strong>und</strong> die ID der einprogrammierten<br />

in der neuen gespeichert. Somit kann schnell festgestellt werden, welche Aufzeichnungen<br />

miteinander in Konflikt stehen.<br />

Einen Sonderfall stellen Aufnahmen dar, deren Stopp-Zeit null ist. Dies kennzeichnet<br />

endlose Aufnahmen, die zwar von dem Videorekorder gestartet jedoch nicht zu<br />

einem vorgegebenen Zeitpunkt beendet werden. Dies erfordert ihre Berücksichtigung<br />

bei der Konflikterkennung <strong>und</strong> dem Starten von Aufzeichnungen. Es wurde<br />

die Konvention getroffen, dass endlose Aufnahmen bei der Prüfung auf Konflikte


5.2. ZUGRIFF EINER ANWENDUNG AUF MEHRERE QUELLEN<br />

Abbildung 5.15: Die Klasse TVRecorderManager, startet zu einem festgelegten<br />

Zeitpunkt eine Aufnahme <strong>und</strong> beendet sie wieder.<br />

unberüchsichtigt bleiben. Sollte einer solchen mit Start- <strong>und</strong> Stopp-Zeit die TV-<br />

Karte zugeteilt worden sein, welche die endlose Aufnahme verwendet, führt dies<br />

zur Beendigung dieser durch den Videorekorder. Endlose Aufzeichnungen können<br />

in dieser Arbeit nur aus dem LiveTV-Zustand der Multimedia-Box heraus erstellt<br />

werden, was in Abschnitt 5.4.2 erklärt wird.<br />

Das Resultat der Untersuchung wird an den TVTimerScheduler zurückgegeben.<br />

Liegt kein Konflikt vor, wird die gerade getestete TV-Karte der Aufnahme<br />

zugeordnet, andernfalls wird die nächste TV-Karte überprüft.<br />

Sollte für alle verfügbaren TV-Karten ein Konflikt vorliegen, wird der Status der<br />

Aufzeichnung auf CONFLICT gesetzt <strong>und</strong> dies dem TVTimerControl durch<br />

den Rückgabewert der aufgerufenen Methode mitgeteilt.<br />

5.2.2.4 Starten <strong>und</strong> Beenden von Aufnahmen<br />

Im Falle einer konfliktfreien Aufnahme wird der korrespondierende TVTimer-<br />

Entry dem TVRecorderManager (siehe Abbildung 5.15) übergeben, der die<br />

zeitgesteuerte Aufzeichnung einrichtet.<br />

Dazu wird der von <strong>NMM</strong> bereitgestellte TimerProducer verwendet. Dieser<br />

schickt zu einem festgelegten Zeitpunkt ein zuvor definiertes Event, auf das entsprechend<br />

reagiert werden kann.<br />

Diesem Event können Parameter mitgegeben werden, was in diesem Fall die zugehörige<br />

ID der Aufnahme ist. Dadurch wird beim Auslösen des Events festgestellt,<br />

welche gestartet werden soll (siehe Abbildung 5.16). Mit Hilfe dieser ID erfragt der<br />

TVRecorderManager bei der TVTimerList die entsprechenden Aufnahmeinformationen.<br />

Sind diese vorhanden, wird ein Objekt der TVRecorder-Klasse<br />

(siehe Abbildung 5.17) inklusive Übergabe des erhaltenen TVTimerEntry erstellt.<br />

Der Rekorder wird zur Verwaltung in einer map gespeichert <strong>und</strong> nach dem<br />

Beenden der Aufnahme wieder gelöscht. Durch diesen Mechanismus können meh-<br />

117


KAPITEL 5. Realisierung von Szenarien des <strong>Mehrbenutzer</strong>-TV<br />

118<br />

Abbildung 5.16: Der TVRecorderManager erstellt zum Aufnahmezeitpunkt<br />

den TVRecorder <strong>und</strong> löscht diesen nach dem Beenden der Aufnahme.<br />

Abbildung 5.17: Die Klasse TVRecorder erstellt den zur Aufzeichnung verwendeten<br />

Flussgraphen.


5.2. ZUGRIFF EINER ANWENDUNG AUF MEHRERE QUELLEN<br />

Abbildung 5.18: Zur Aufnahme einer Sendung von einer digitalen TV-Karte<br />

wird der DVBReadNode mit dem GenericWriteNode verb<strong>und</strong>en. Der<br />

GenericWriteNode wird von <strong>NMM</strong> zum Schreiben von Multimedia-Daten in<br />

eine Datei bereitgestellt.<br />

rere Rekorder gleichzeitig tätig sein. In der Folge erstellt der entsprechende TV-<br />

Recorder einen <strong>NMM</strong>-Flussgraphen anhand der gespeicherten GraphURL (siehe<br />

Abbildung 5.18) <strong>und</strong> zeichnet die Sendung von dem entsprechenden Kanal<br />

auf. Die GraphURL legt den zu verwendenden Quellknoten fest, welcher mit einem<br />

GenericWriteNode verb<strong>und</strong>en wird, der die Audio-Video-Daten in eine<br />

Datei schreibt. Als Anforderungs-Richtlinie für das Session-Sharing (siehe Abschnitt<br />

3.2.2) wird bei der Quelle SHARED_OR_EXCLUSIVE_THEN_SHARED<br />

verwendet. Dies ermöglicht das Anfordern des Quellknotens auch dann, wenn dieser<br />

bereits von einer anderen Anwendung verwendet wird. Zuvor muss ein Dateiname<br />

festgelegt werden, unter dem die Aufzeichnung auf der Festplatte gespeichert<br />

wird. Vorhandene Dateien dürfen nicht überschrieben werden. Deshalb ist es<br />

notwendig einen eindeutigen Dateinamen zu wählen. Dieser setzt sich aus dem Kanalnamen,<br />

von dem die Sendung aufgezeichnet wurde, <strong>und</strong> der Start-Zeit inklusive<br />

Datum zusammen. Zusätzlich wird bei vorhandenen EPG-Informationen dem Dateinamen<br />

der Titel der aufgenommenen Sendung vorangestellt, damit der Benutzer<br />

den Inhalt einer Datei leichter identifizieren kann.<br />

Beispiel<br />

Das folgende Beispiel zeigt mögliche Dateinamen für eine Aufnahme der ’Tagesschau’<br />

der ARD am 14. September 2005. Sind keine EPG-Informationen vorhanden,<br />

wird die Aufzeichnung unter dem Namen<br />

ARD_2005-09-14_20:00.mpeg<br />

gespeichert. Andernfalls beginnt der Dateiname mit dem Titel der Sendung.<br />

Tagesschau_ARD_2005-09-14_20:00.mpeg<br />

Beim TimerProducer wird nach dem Starten des Graphen ein Event zur Festlegung<br />

des Aufnahmeendes registriert. Dieses Event wird wiederum von dem TV-<br />

RecorderManager gefangen, der den Rekorder stoppt <strong>und</strong> das TVRecorder-<br />

Objekt löscht.<br />

Kann der Flussgraph nicht aufgebaut werden, da die zugewiesene TV-Karte mittlerweile<br />

auf Gr<strong>und</strong> evtl. technischer Probleme nicht mehr ansprechbar ist, wird dies<br />

der TVTimerControl-Klasse mitgeteilt, indem auf deren ITVTimerEvents-<br />

Interface die Methode tvcardUnavailable() aufgerufen wird. Die Klasse<br />

119


KAPITEL 5. Realisierung von Szenarien des <strong>Mehrbenutzer</strong>-TV<br />

120<br />

Abbildung 5.19: Kann eine Aufnahme nicht erfolgen, weil die vorgesehene TV-<br />

Karte nicht mehr verfügbar ist, wird versucht eine neue TV-Karte zu finden um sie<br />

dann dafür zu nutzen.<br />

versucht daraufhin die Aufnahme neu zu programmieren (siehe Abbildung 5.19).<br />

Mit Hilfe der Methode reschedule() des TVTimerScheduler wird eine<br />

neue TV-Karte gesucht. Im TVTimerEntry zuvor gespeicherte TV-Karten werden<br />

dabei ausgeschlossen. Konnte keine neue TV-Karte gef<strong>und</strong>en werden, wird der<br />

Status der Aufnahme auf RECORDED_WITH_ERROR gesetzt. Sollte diese für eine<br />

periodische Aufzeichnung vorgesehen sein, wird der nächste Aufnahmezeitpunkt<br />

ermittelt <strong>und</strong> die Aufnahme programmiert.<br />

Bei erfolgreicher Aufzeichnung wird ihr Status auf RECORDED gesetzt <strong>und</strong> zusätzlich<br />

eine entsprechende GraphURL gespeichert, die den direkten Zugriff auf die<br />

Datei der getätigten Aufnahme ermöglicht. Diese GraphURL enthält außer dem<br />

Verzeichnispfad <strong>und</strong> dem Dateinamen auch den Rechnernamen, auf dem die betreffende<br />

Datei gespeichert wurde. Somit kann diese mit Hilfe der Netzwerkunterstützung<br />

von <strong>NMM</strong> abgespielt werden, wenn ein anderweitiger Zugriff, z.B.<br />

über das Networking Filesystem (NFS) [Lev], nicht möglich ist. Dies erfolgt dadurch,<br />

dass der entsprechende Quellknoten zum Auslesen der Datei über die Geräteverwaltung<br />

von <strong>NMM</strong> von dem entfernten Rechner angefordert wird <strong>und</strong> die<br />

Multimedia-Daten lokal abgespielt werden.<br />

5.2.2.5 Automatisches Wiederholen von Aufnahmen<br />

Wurde eine Aufnahme (mit oder ohne Fehler) beendet, wird überprüft, ob eine<br />

Periode festgelegt wurde. Ist dies der Fall, wird abhängig von der eingestellten<br />

Wiederholung, die neue Aufnahme nach Berechnung deren Start- <strong>und</strong> Stopp-Zeit<br />

programmiert.<br />

Besondere Beachtung muss diesbezüglich der Periode RANDOM geschenkt werden.<br />

Es ist möglich, dass gef<strong>und</strong>ene Sendungen zur gleichen Zeit auf verschiedenen<br />

Kanälen gesendet werden. So wird z.B. die ’Tagesschau’ um 20:00 Uhr sowohl<br />

von der ARD als auch den dritten Programmen ausgestrahlt. Für die Lösung


5.2. ZUGRIFF EINER ANWENDUNG AUF MEHRERE QUELLEN<br />

dieses Problems wird die Sendung, die auf dem ursprünglich eingestellten Kanal<br />

läuft, mit der entsprechenden Periode neu einprogrammiert. Sofern genügend TV-<br />

Karten zur Verfügung stehen, wird versucht für die restlichen Sendungen einzelne<br />

Aufnahmen zu programmieren, sodass nach Möglichkeit alle parallel laufenden<br />

Sendungen aufgezeichnet werden.<br />

Beispiel<br />

Die Tagesschau soll mittels der Periode RANDOM aufgenommen werden. Der<br />

EPG liefert u.a. die folgenden Daten für diese Sendung:<br />

• Tagesschau auf ARD um 20:00 Uhr<br />

• Tagesschau auf WDR um 20:00 Uhr<br />

Um dennoch beide Sendungen aufnehmen zu können, wird für die Sendung auf<br />

WDR eine zusätzliche Aufnahme programmiert, sofern genügend TV-Karten vorhanden<br />

sind.<br />

5.2.2.6 Ändern <strong>und</strong> Löschen von Aufnahmen<br />

Zum Ändern einer einprogrammierten Aufnahme wird in der Anwendung der entsprechende<br />

TVTimerEntry angefordert <strong>und</strong> die gewünschten Informationen editiert.<br />

Das bearbeitete Objekt wird dem Videorekorder mittels der Methode change-<br />

Timer() übergeben, der versucht die neue Aufzeichnung zu programmieren. Dabei<br />

wird die bisherige bei der Konflikt-Erkennung nicht berücksichtigt. Sie lässt<br />

sich über die ID des TVTimerEntry ermitteln. Nach einer erfolgreichen Programmierung<br />

der neuen Aufnahme wird der alte Eintrag entfernt. Andernfalls bleibt<br />

dieser gültig <strong>und</strong> die Anwendung erhält die Information, dass die Aufzeichnung<br />

nicht, wie gewünscht, geändert werden kann.<br />

Das Löschen einer Aufnahme wird durch Aufrufen der Methode deleteTimer()<br />

bewerkstelligt (wie in Abbildung 5.20 dargestellt), wodurch lediglich der entsprechende<br />

TVTimerEntry aus der TVTimerList entfernt wird. Da der TVRecorderManager<br />

vor dem Starten den Eintrag von der TVTimerList erfragt,<br />

werden für nicht vorhandene Einträge keine Aufzeichnungen gestartet.<br />

Es ist durchaus möglich, dass Aufnahmen mit der geänderten bzw. gelöschten in<br />

Konflikt standen, was durch die erfolgte Änderung aufgehoben ist. Dazu wird festgestellt,<br />

mit welchen Einträgen die entfernte Aufnahme in Konflikt stand <strong>und</strong> diese<br />

neu programmiert. Mit Hilfe der Methode deleteTimersForConflict() ist<br />

es möglich die ID <strong>eines</strong> in Konflikt stehenden TVTimerEntry anzugeben, sodass<br />

dieser zuerst programmiert wird. Erst anschließend wird versucht, die restlichen in<br />

Konflikt stehen Aufnahmen erneut zu programmieren.<br />

121


KAPITEL 5. Realisierung von Szenarien des <strong>Mehrbenutzer</strong>-TV<br />

122<br />

Abbildung 5.20: Beim Löschen einer einprogrammierten Aufnahme wird diese aus<br />

der TVTimerList entfernt. Anschließend wird versucht alle mit ihr in Konflikt<br />

stehenden Aufnahmen neu zu programmieren.<br />

Ein weiterer Übergabeparameter der Methoden zum Löschen <strong>und</strong> Ändern von Aufzeichnungen<br />

ist der Benutzername, welcher von der Anwendung bestimmt werden<br />

muss. Damit soll verhindert werden, dass mehrere Benutzer bei Verwendung<br />

des Videorekorders Aufnahmen <strong>eines</strong> anderen unerlaubt entfernen oder bearbeiten.<br />

Dies geschieht durch einen Vergleich des Namens mit dem in dem entsprechenden<br />

TVTimerEntry gespeicherten.<br />

5.2.2.7 Der Videorekorder als separate Anwendung<br />

Mit Hilfe des Programms vcrserver wird der Videorekorder als eingenständiger<br />

Prozess gestartet. Es bietet den Zugriff auf den Videorekorder durch die Service-<br />

Funktionalität von <strong>NMM</strong> (siehe Abschnitt 3.2.1), wodurch Anwendungen über das<br />

Netzwerk mit dem Videorekorder kommunizieren können. Der Service ist unter<br />

dem Namen ’TVTimer’, in Anlehnung an den TVTimer-Zustand der Multimedia-<br />

Box, ansprechbar. Der vcrserver enthält einen EPG, der ebenfalls als Service<br />

unter dem Namen ’TVGuide’ zur Verfügung gestellt wird, damit entfernte Anwendungen<br />

darauf zugreifen können. Beim Starten der Anwendung kann diese per<br />

Kommandozeilen-Optionen konfiguriert werden.<br />

5.3 Zugriff mehrerer Anwendungen auf mehrere Quellen<br />

In diesem Abschnitt wird der Fall erläutert, dass mehrere Anwendungen auf mehrere<br />

TV-Karten zugreifen wollen. Dafür werden nun die vorangegangenen Verwendungsarten,<br />

nämlich das Sammeln von EPG-Informationen von einer TV-Karte,<br />

das Aufzeichnen von Sendungen sowie Live TV zusammengeführt. Um diesen An-


5.3. ZUGRIFF MEHRERER ANWENDUNGEN AUF MEHRERE QUELLEN<br />

wendungen eine TV-Karte dynamisch zuteilen zu können, müssen Kriterien festgelegt<br />

werden um die Verwendbarkeit einer TV-Quelle bestimmen zu können.<br />

Beispiele<br />

• Erich benutzt eine TV-Karte für Live TV. Nun startet der Videorekorder eine<br />

Aufnahme <strong>und</strong> möchte die gleiche Karte verwenden. Kann ihm diese Karte<br />

zugeteilt werden <strong>und</strong> darf der Videorekorder ggf. den Kanal wechseln?<br />

• Erich <strong>und</strong> Helga greifen mit ihren Live TV-Anwendungen gemeinsam auf<br />

die gleiche TV-Karte zu. Wer darf den Kanal wechseln?<br />

• Der EPG sammelt Informationen von einer TV-Karte. Dieser schaltet minütlich<br />

einen Kanal weiter. Kann diese Karte für andere Anwendungen verwendet<br />

werden?<br />

Zur Lösung dieser Probleme muss zuerst eine Hierarchie der Anwendungen festgelegt<br />

werden. Dies verbietet nicht den Zugriff der Anwendungen auf TV-Karten, da<br />

durch das Session-Sharing in <strong>NMM</strong> [LRS03] die gemeinsame Nutzung von Ressourcen<br />

möglich ist. Vielmehr soll damit bestimmt werden, welche Anwendung<br />

kontrollierend auf die Karte zugreifen darf um den Kanal zu wechseln. Aus diesem<br />

Gr<strong>und</strong> werden den einzelnen Verwendungsarten Prioritäten zugeteilt. Die Anwendung<br />

mit der höchsten Priorität hat dabei die Kontrolle über die Karte, sie ist der<br />

Master, die Anwendungen mit geringerer Priorität werden als Slave bezeichnet.<br />

Für diese Arbeit wurde folgende Hierarchie der Prioritäten festgelegt:<br />

EPG Der EPG besitzt die niedrigste Prioriät. Die einzige Aufgabe des EPG ist das<br />

Sammeln von Daten. Dies kann auch von einer TV-Karte, die gerade von<br />

einer höher priorisierten Anwendung benutzt wird, bewerkstelligt werden.<br />

Live TV Live TV hat mittlere Priorität. In dieser Arbeit wurde die Konvention<br />

getroffen, dass LiveTV eine niedrigere Stellung als der Videorekorder besitzt.<br />

Als Entscheidungshilfe diente dabei die Vorgehensweise handelsüblicher<br />

Kassetten-Videorekorder, die den Kanal wechseln, sobald eine einprogrammierte<br />

Aufnahme startet.<br />

Videorekorder Der Videorekorder besitzt die höchste Priorität.<br />

Weiterhin ist notwendigerweise eine Strategie für die Zuteilung von TV-Karten<br />

zu Anwendungen festzulegen. Bei einem Kartenwechsel muss für jede getestete<br />

TV-Karte ermittelt werden, ob diese verwendbar ist. Zur Minimierung dieser Abfragen<br />

wird zuerst versucht der anfragenden Anwendung eine TV-Karte zuzuteilen,<br />

auf der sie Master ist. Dadurch kann diese beliebig zwischen den bereitgestellten<br />

Kanälen wechseln ohne sich eine neue Karte anfordern zu müssen. Steht keine<br />

solche TV-Quelle zur Verfügung, wird eine gesucht, die als Slave genutzt werden<br />

kann. Dies kann nur erfolgen, wenn der auf der TV-Karte eingestellte Kanal gleich<br />

dem gewünschten ist. Generell gilt als Zuteilungskriterium die Unterstützung des<br />

123


KAPITEL 5. Realisierung von Szenarien des <strong>Mehrbenutzer</strong>-TV<br />

124<br />

gewünschten Kanals durch die TV-Karte. TV-Karten, die zur Verteilung in Frage<br />

kommen, sind in der globalen Kanalliste festgelegt.<br />

Wird eine TV-Karte von mehreren Anwendungen gemeinsam verwendet, gibt es<br />

immer genau einen Master. Sollte dieser die TV-Karte wieder freigeben, muss ein<br />

Slave in den Stand des Masters ”erhoben” werden. Die Wahl fällt dabei auf die<br />

Anwendung, der die TV-Karte an zweiter Stelle nach dem Master zugeteilt wurde.<br />

Die restlichen Anwendungen behalten den Status des Slave.<br />

Nachfolgend werden nun einzelne Szenarien durchgespielt, die in dieser Konstellation<br />

auftreten können. Es wird zudem erklärt, wie in den jeweiligen Situationen<br />

gemäß der genannten Konventionen verfahren wird.<br />

5.3.1 Zusammenspiel EPG - LiveTV/Videorekorder<br />

Die Live TV-Anwendung greift auf eine Karte zu, die vom EPG genutzt wird. In<br />

diesem Fall tritt der EPG die Kontrolle der Karte an die Live TV-Anwendung ab<br />

<strong>und</strong> wird zum Slave. Die Live TV-Anwendung übernimmt die Kontrolle, sie wird<br />

zum Master. Dabei ist es unerheblich, ob noch weitere TV-Karten zur Verfügung<br />

stehen. Dieses Verhalten trägt den unterschiedlichen Qualitäts-Aspekten der TV-<br />

Karten Rechnung, da bei Live TV die Audio/Video-Qualität mehr als bei Verwendung<br />

durch den EPG zum Tragen kommt, der nur Text-Daten aus dem Fernseh-<br />

Strom liest.<br />

Die gleiche Vorgehensweise wird angewendet, wenn der Videorekorder anstatt der<br />

Live TV-Anwendung auf die Quelle zugreifen möchte. Dieser wird auf Gr<strong>und</strong> seiner<br />

höheren Prioriät zum Master, der EPG zum Slave.<br />

Nach dem Beenden der Live TV-Anwendung oder der Aufnahme des Videorekorders<br />

erhält der EPG den Master-Status zurück <strong>und</strong> kann die Kanäle wieder entsprechend<br />

setzen.<br />

Beispiel<br />

In einem Szenario, in dem nur eine TV-Karte zur Verfügung steht, verwendet der<br />

EPG diese im Moment zum Sammeln von Informationen des Kanal A (siehe Abbildung<br />

5.21). Die TV-Karte stellt die Kanäle A <strong>und</strong> B bereit. Erich möchte nun<br />

eine Sendung auf Kanal B sehen. Wegen der Festlegung, dass Live TV eine höhere<br />

Priorität als der EPG besitzt, hat Erich die Kontrolle über diese TV-Karte. Deshalb<br />

wird sie ihm zugeteilt <strong>und</strong> der Sender auf Kanal B gewechselt. Der EPG sammelt<br />

nun seine Daten von Kanal B.<br />

Nun möchte der EPG einen Kanal weiterschalten um von ihm Daten zu sammeln.<br />

Erich verwendet seine Karte jedoch weiterhin für Live TV. Der EPG muss sich nun<br />

eine neue TV-Karte zur Beschaffung seiner Daten anfordern. Da jedoch nur eine<br />

TV-Karte zur Verfügung steht, kann der EPG weiterhin nur Daten von Kanal B


5.3. ZUGRIFF MEHRERER ANWENDUNGEN AUF MEHRERE QUELLEN<br />

a) b)<br />

Live TV-Anwendung<br />

von Erich EPG<br />

möchte Kanal B<br />

einstelen<br />

hat Kanal A<br />

eingestellt<br />

TV-Karte stellt<br />

Kanäle A <strong>und</strong> B<br />

bereit<br />

Live TV-Anwendung<br />

von Erich<br />

hat Kanal B<br />

eingestellt<br />

Anfrage nach TV-Karte<br />

Master-Zugriff auf TV-Karte<br />

Slave-Zugriff auf TV-Karte<br />

EPG<br />

TV-Karte stellt<br />

Kanäle A <strong>und</strong> B<br />

bereit<br />

Abbildung 5.21: In Teil a) sammelt der EPG Daten von Kanal A. Erich möchte<br />

nun Kanal B einstellen. Da Live TV die höhere Priorität besitzt, darf Erich den<br />

Kanal wechseln (siehe Teil b)).<br />

sammeln.<br />

Erich beendet nun seine Live TV-Anwendung <strong>und</strong> gibt die Karte wieder frei, woraufhin<br />

der EPG erneut zum Master wird <strong>und</strong> die Kanäle wechseln kann.<br />

5.3.2 Zusammenspiel Live TV - Live TV<br />

Wollen zwei Live TV-Anwendungen auf die gleiche TV-Karte zugreifen, wird nach<br />

dem First-Come-First-Serve-Prinzip 1 verfahren. Derjenige, der zuerst die Karte für<br />

sich beansprucht hat, ist Master, der sich danach auf sie aufschaltet, ist Slave. Ihm<br />

wird jedoch die Karte nur zugeteilt, wenn der Master den gleichen Kanal eingestellt<br />

hat, den auch der Slave wünscht <strong>und</strong> der von keiner weiteren TV-Karte bereitgestellt<br />

wird.<br />

Weiterhin soll auch im laufenden Betrieb die erneute Zuteilung einer TV-Karte vorgenommen<br />

werden. Dieser Fall tritt dann ein, wenn einer Anwendung eine Karte<br />

als Slave zugeteilt wurde <strong>und</strong> der Master den Kanal wechselt. Der Slave muss sich<br />

daraufhin eine neue TV-Quelle anfordern um den bisher eingestellten Kanal weiterhin<br />

zu empfangen.<br />

Beispiele<br />

In dem folgenden Szenario stehen Helga <strong>und</strong> Erich zwei TV-Karten zur Verfügung.<br />

Die erste TV-Karte, Karte 1, stellt die Kanäle A <strong>und</strong> B bereit, die zweite die Kanäle<br />

B <strong>und</strong> C.<br />

Helga möchte sich eine Sendung auf Kanal A ansehen. Da nur Karte 1 diesen Kanal<br />

bereitstellt <strong>und</strong> frei ist, wird ihr diese Karte zugeordnet.<br />

1 Im Deutschen gibt es dafür das Sprichwort: Wer zuerst kommt, mahlt zuerst<br />

125


KAPITEL 5. Realisierung von Szenarien des <strong>Mehrbenutzer</strong>-TV<br />

126<br />

a)<br />

Live TV-Anwendung<br />

von Erich<br />

TV-Karte stellt<br />

Kanäle A <strong>und</strong> B<br />

bereit<br />

Live TV-Anwendung<br />

von Helga<br />

hat Kanal A<br />

eingestellt<br />

TV-Karte stellt<br />

Kanäle B <strong>und</strong> C<br />

bereit<br />

b)<br />

Live TV-Anwendung<br />

von Erich<br />

hat Kanal A<br />

eingestellt<br />

TV-Karte stellt<br />

Kanäle A <strong>und</strong> B<br />

bereit<br />

Anfrage nach TV-Karte<br />

Master-Zugriff auf TV-Karte<br />

Slave-Zugriff auf TV-Karte<br />

Live TV-Anwendung<br />

von Helga<br />

hat Kanal B<br />

eingestellt<br />

TV-Karte stellt<br />

Kanäle B <strong>und</strong> C<br />

bereit<br />

Abbildung 5.22: In Teil a) empfangen die Benutzer Helga <strong>und</strong> Erich Kanal A über<br />

die erste TV-Karte. Erich möchte Kanal B einstellen, hat aber nicht die Kontrolle<br />

über die TV-Karte. Da die zweite TV-Karte Kanal B ebenfalls zur Verfügung stellt,<br />

wird Erich diese zugewiesen, was in Teil b) dargestellt ist.<br />

Erich möchte nun auch die Sendung auf Kanal A verfolgen. Nur Karte 1 stellt<br />

diesen Kanal bereit, wird jedoch momentan verwendet. Da auf Karte 1 Kanal A<br />

aktuell eingestellt ist, wird ihm diese Karte als Slave zugeteilt, d.h. er darf auf<br />

Karte 1 den Kanal nicht wechseln.<br />

Erich möchte nun aber auf Kanal B umschalten (siehe Abbildung 5.22). Karte 1,<br />

die er gerade nutzt, stellt diesen Kanal bereit. Er ist jedoch Slave auf seiner Karte.<br />

Da Kanal B auch über Karte 2 empfangen werden kann, wird ihm Karte 2 zugeteilt.<br />

Diese TV-Karte wird bisher von niemandem verwendet, sodass Erich als Master<br />

auf dieser Karte gilt.<br />

Helga’s Sendung auf Kanal A ist nun zu Ende. Sie möchte auf Kanal C umschalten.<br />

Dieser Kanal wird jedoch nur von Karte 2 bereitgestellt, welche gerade von Erich<br />

verwendet wird. Da Erich Kanal B eingestellt hat, kann Helga diese Karte nicht<br />

nutzen, d.h. sie kann nicht auf Kanal C wechseln.<br />

Da Kanal B auch von Karte1 bereitgestellt wird, die nun zur Verfügung steht, könnte<br />

Erich Karte 2 entzogen <strong>und</strong> Karte 1 zugeteilt werden. Um aber den Audio/Video-<br />

Strom von Erich nicht zu unterbrechen, behält er die Karte 2. Weiterhin würde dies<br />

bedeuten, dass auch dem Videorekorder während einer Aufnahme eine neue TV-<br />

Karte zugeteilt werden müsste. Da, wie Eingangs erwähnt, die Aufzeichnung nach<br />

Möglichkeit nicht unterbrochen werden soll, ist dieses Vorgehen nicht realisiert.<br />

5.3.3 Zusammenspiel LiveTV - Videorekorder<br />

Bei einer gemeinsamen Verwendung einer TV-Quelle durch den Videorekorder <strong>und</strong><br />

Live TV kann dieser, der Konvention entsprechend, immer die Kontrolle über eine<br />

TV-Karte übernehmen, da ihm die höhere Priorität zugewiesen wurde. Die Live


5.3. ZUGRIFF MEHRERER ANWENDUNGEN AUF MEHRERE QUELLEN<br />

a) b)<br />

Live TV-Anwendung<br />

von Erich Videorekorder<br />

hat Kanal A<br />

eingestellt<br />

möchte Kanal B<br />

einstellen<br />

TV-Karte stellt<br />

Kanäle A <strong>und</strong> B<br />

bereit<br />

Live TV-Anwendung<br />

von Erich<br />

Anfrage nach TV-Karte<br />

Master-Zugriff auf TV-Karte<br />

Slave-Zugriff auf TV-Karte<br />

Videorekorder<br />

hat Kanal B<br />

eingestellt<br />

TV-Karte stellt<br />

Kanäle A <strong>und</strong> B<br />

bereit<br />

Abbildung 5.23: In Teil a) verwendet der Benutzer Erich die TV-Karte für Live<br />

TV. Er hat Kanal A eingestellt. Der Videorekorder möchte auf die gleiche Karte<br />

zugreifen <strong>und</strong> Kanal B einstellen. Auf Gr<strong>und</strong> der höheren Priorität schaltet der<br />

Videorekorder auf Kanal B (siehe Teil b)).<br />

TV-Anwendung wird dabei über den Status-Wechsel auf der TV-Karte informiert.<br />

Diese beginnt daraufhin mit der Suche nach einer neuen TV-Karte, die den bisher<br />

eingeschalteten Kanal unterstützt <strong>und</strong> somit verwendet werden kann. Ein solcher<br />

Vorgang ist allerdings nur notwendig, wenn der einzustellende Kanal des Videorekorders<br />

<strong>und</strong> der von Live TV genutzte unterschiedlich sind. Andernfalls kann<br />

die Live TV-Anwendung die TV-Karte weiterhin einsetzen, muss jedoch bei einem<br />

Kanalwechsel eine neue TV-Karte zugeteilt bekommen.<br />

Beispiel<br />

In diesem Beispiel wird zur einfachen Veranschaulichung ein Szenario beschrieben,<br />

in dem nur eine TV-Karte zur Verfügung steht, welche die Kanäle A <strong>und</strong><br />

B bereitstellt (siehe Abbildung 5.23). Erich schaut Kanal A. Der Videorekorder<br />

startet eine Aufnahme auf Kanal A. Erichs Status ändert sich zwar von Master auf<br />

Slave. Da jedoch der gleiche Kanal aufgenommen wird, muss keine neue TV-Karte<br />

gesucht werden.<br />

Die Aufnahme von Kanal A wurde beendet <strong>und</strong> eine weitere startet, dieses Mal<br />

von Kanal B. Da der Videorekorder die höhere Priorität besitzt, übernimmt er die<br />

Kontrolle von Karte 1 <strong>und</strong> ändert den Kanal. Da der Versuch Erich eine neue TV-<br />

Karte zuzuteilen, nicht möglich ist, kann er Kanal A nicht länger verfolgen.<br />

5.3.4 Zusammenspiel EPG - Live TV - Videorekorder<br />

Nun werden alle beschriebenen Konzepte in einem Algorithmus zusammengefasst,<br />

der alle getroffenen Konventionen zum Festlegen einer verwendbaren TV-Karte berücksichtigt.<br />

Dieser wird im Laufe dieses Abschnitts im Pseudo-Code beschrieben.<br />

Der Ablauf ist in Abbildung 5.24 graphisch dargestellt.<br />

127


KAPITEL 5. Realisierung von Szenarien des <strong>Mehrbenutzer</strong>-TV<br />

128<br />

TV-Karte wird<br />

nicht verwendet<br />

Setze Kanal A<br />

Kanal A gesetzt<br />

TV-Karte aus Liste erhalten<br />

Prüfe, ob TV-Karte schon<br />

von anderer Anwendung<br />

verwendet wird<br />

XOR<br />

Anwendung hat<br />

geringere Priorität<br />

Benachrichtige Anwendung<br />

über Statuswechsel<br />

Anwendung benachrichtigt<br />

Setze Kanal A<br />

Kanal A gesetzt<br />

Kanal A soll<br />

gesetzt werden<br />

Erfrage TV-Karten von<br />

globaler Kanalliste<br />

Liste mit TV-Karten erhalten,<br />

die Kanal A bereitstellen<br />

Nimm TV-Karte aus Liste<br />

TV-Karte wird<br />

bereits verwendet<br />

Prüfe Priorität der<br />

verwendendenen<br />

Anwendung<br />

XOR<br />

XOR<br />

Kanal A ist<br />

eingestellt<br />

Merke TV-Karte zu<br />

eventuellen späteren<br />

Verwendung<br />

TV-Karte gemerkt<br />

Anwendung hat gleiche<br />

oder höhere Priorität<br />

Kanal A noch<br />

eingestellt<br />

Verwende TV-Karte<br />

gemeinsam mit<br />

anderer Anwendung<br />

Prüfe, ob Kanal A<br />

eingestellt ist<br />

XOR<br />

Kanal A ist<br />

nicht eingestellt<br />

TV-Karte erhalten<br />

Prüfe, ob Kanal A<br />

immer noch eingestellt ist<br />

XOR<br />

Kanal A nicht mehr<br />

eingestellt<br />

Keine TV-Karte in Liste<br />

vorhanden<br />

Nimm TV-Karte aus Liste<br />

der gemerkten TV-Karten<br />

XOR<br />

Keine TV-Karte erhalten<br />

Fehlerbehandlung:<br />

Kanal A kann nicht<br />

eingestellt werden<br />

Abbildung 5.24: In einem <strong>Mehrbenutzer</strong>Szenario wird bei einem Zugriff einer<br />

Anwendung auf eine TV-Karte nach dem dargestellten Ablauf vorgegangen.


5.3. ZUGRIFF MEHRERER ANWENDUNGEN AUF MEHRERE QUELLEN<br />

Bei einer TV-Anwendung ist das Setzen <strong>eines</strong> Kanals immer die erste Handlung:<br />

Der Videorekorder schaltet nach dem Zugriff auf eine TV-Quelle auf den Sender,<br />

von dem er eine Sendung aufzeichnen soll. Bei Live TV wird nach dem Starten<br />

der initiale Kanal eingestellt. Der EPG schaltet auf den ersten Kanal, von dem er<br />

Daten sammeln soll.<br />

Als Ausgangspunkt dient deshalb das Setzen des Kanals A, wofür zuerst bestimmt<br />

wird, ob eine TV-Karte bereits verwendet wird. Ist dies der Fall, wird überprüft, ob<br />

die bereits verwendete TV-Karte Kanal A unterstützt. Zu diesem Zweck wird auf<br />

die globale Kanalliste zugegriffen, welche diese Informationen enthält <strong>und</strong> überprüft,<br />

ob die momentan verwendete TV-Karte in der erfragten Kartenliste enthalten<br />

ist. Trifft dies zu, muss weiterhin kontrolliert werden, ob die Anwendung Master<br />

auf dieser Karte ist <strong>und</strong> damit den Kanal wechseln darf.<br />

Diese Vorgehensweise berücksichtigt die Konvention, dass ein Master auf der TV-<br />

Karte bei einem Kanalwechsel keine neue suchen muss, wenn seine aktuell verwendete<br />

den Kanal bereitstellt. Der erste Teil des Algorithmus ist im Pseudocode<br />

wie folgt beschrieben:<br />

if( Eine Karte wird benutzt ){<br />

Erfrage Kartenliste für Kanal A von globaler Kanalliste;<br />

if( Die benutzte Karte ist in Kartenliste ){<br />

if( Benutzer ist Master auf der Karte ){<br />

verwende TV-Karte;<br />

Setze Kanal A;<br />

return;<br />

}<br />

}<br />

}<br />

Sollte einer der Tests fehlschlagen, muss eine neue TV-Karte gesucht werden. Dazu<br />

sind alle zuvor ermittelten Karten in der Kartenliste auf Verwendbarkeit zu untersuchen.<br />

Es wird zuerst ermittelt, ob die zu prüfende TV-Karte verfügbar ist, was bei<br />

einem Zugriff über das Netzwerk auf Gr<strong>und</strong> technischer Probleme nicht möglich<br />

sein kann. Ist die TV-Karte erreichbar, muss getestet werden, ob sie bereits von anderen<br />

Anwendungen genutzt wird. Im negativen Fall kann diese TV-Karte verwendet<br />

<strong>und</strong> Kanal A eingestellt werden. Im positiven Fall wird überprüft, ob die Quelle<br />

von einer geringer priorisierten Anwendung gebraucht wird. Dadurch wird der Benutzer<br />

zum Master <strong>und</strong> kann den Kanal A setzen. Die geringer priorisierte Anwendung<br />

wird dadurch zum Slave <strong>und</strong> über den Statuswechsel benachrichtigt. Im negativen<br />

Fall wird ermittelt, welcher Kanal auf der TV-Karte eingestellt ist. Ist dies<br />

Kanal A, so kann auf diese Quelle später von der Anwendung als Slave zugegriffen<br />

werden. Zu diesem Zweck wird die Karte in der Liste verwendbareTVKarten<br />

für einen evtl. späteren Zugriff gespeichert.<br />

Dies berücksichtigt die Konventionen, dass höher priorisierte Anwendungen den<br />

Kanal wechseln dürfen <strong>und</strong> zuerst versucht wird eine TV-Karte zu finden, auf der<br />

die Anwendung Master-Status besitzt. Der Teil des Algorithmus zur Suche nach<br />

einer Master-TV-Karte lautet wie folgt:<br />

129


KAPITEL 5. Realisierung von Szenarien des <strong>Mehrbenutzer</strong>-TV<br />

130<br />

foreach( Karte in Kartenliste ){<br />

if( Karte ist verfügbar ){<br />

if( Karte wird von einer anderen Anwendung verwendet ){<br />

if( Karte wird von geringer priorisierten<br />

Anwendung verwendet ){<br />

verwende TV-Karte;<br />

Setze Kanal A <strong>und</strong> benachrichtige<br />

die andere Anwendung über Statuswechsel;<br />

return;<br />

}else{<br />

if( Kanal A ist auf TV-Karte eingestellt ){<br />

speichere TV-Karte in Liste verwendbareTVKarten;<br />

}<br />

continue;<br />

}else{<br />

verwende TV-Karte;<br />

Setze Kanal A;<br />

return;<br />

}<br />

}else{<br />

continue;<br />

}<br />

}<br />

Nach diesem Ablauf wurde entweder eine TV-Karte gef<strong>und</strong>en, auf welcher der<br />

Benutzer Master ist oder es sind solche bekannt, die als Slave verwendet werden<br />

können, da auf diesen der gewünschte Kanal A eingestellt ist. Zur Sicherheit wird<br />

vor Verwendung der Karten noch einmal auf den eingestellten Kanal getestet, da<br />

während der oben besprochenen Tests der TV-Karten die Anwendung, welche die<br />

TV-Quelle nutzt, zwischenzeitlich den Kanal gewechselt haben kann, sodass Kanal<br />

A nicht mehr eingestellt ist.<br />

foreach( Karte in verwendbareTVKarten ){<br />

if( Kanal A ist auf Karte eingestellt ){<br />

verwende TV-Karte;<br />

return;<br />

}<br />

}<br />

Fehler: Es konnte keine geeignete TV-Karte gef<strong>und</strong>en werden.<br />

Sollte auch keine TV-Karte zur Verwendung als Slave zur Verfügung stehen, kann<br />

Kanal A nicht empfangen werden. Der Algorithmus liefert einen Fehler zurück,<br />

auf den die Anwendung entsprechend reagieren kann.<br />

5.3.5 Festlegung des Verwendungszwecks einer Quelle<br />

Zum Festlegen des Verwendungszwecks <strong>eines</strong> <strong>NMM</strong>-Knotens reicht es nicht aus,<br />

lediglich die momentane Nutzung des Masters z.b. für Live TV, zu speichern. Wird<br />

diese Information von einem Videorekorder überschrieben, kann der alte Wert nicht<br />

mehr hergestellt werden, wenn der Videorekorder den Knoten wieder freigibt.


5.3. ZUGRIFF MEHRERER ANWENDUNGEN AUF MEHRERE QUELLEN<br />

Abbildung 5.25: Die Usage-Klasse dient dem Speichern des Verwendungszwecks<br />

<strong>eines</strong> Knotens. Das Interface IUsageNotify wird von allen Objekten<br />

implementiert, die eine Verwendung setzen wollen.<br />

Um festzustellen, welcher Benutzer auf welche Weise den angeforderten <strong>NMM</strong>-<br />

Knoten nutzt, wurde die Usage-Klasse entwickelt (siehe Abbildung 5.25). Sie<br />

speichert alle notwendigen Informationen <strong>und</strong> legt fest, welcher Benutzer der Master<br />

<strong>eines</strong> Knotens ist.<br />

Zum Setzen einer Verwendungsart muss die Anwendung das IUsageNotify-<br />

Interface implementieren. Dies dient der Identifizierung des Benutzers <strong>und</strong> dessen<br />

Benachrichtigung bei einem Statuswechsel.<br />

Damit bei jedem Knoten die Verwendung angegeben werden kann, wurde die<br />

Usage-Klasse als Oberklasse von GenericNode in <strong>NMM</strong> integriert. Diese wiederum<br />

dient als Oberklasse für jeden in <strong>NMM</strong> verfügbaren Knoten. Intern speichert<br />

die Usage-Klasse die Benutzer-Daten zu jedem Verwendungszweck zu dessen<br />

Identifizierung in einer map.<br />

Dabei werden Schlüssel vom Typ int gebraucht, welche zur Angabe des Verwendungszwecks<br />

dienen. Diese sind von der Anwendung festgelegt <strong>und</strong> spezifizieren<br />

gleichzeitig die Priorität des Verwendungszwecks.<br />

Zu jedem Schlüssel der map wird eine Liste von Paaren gespeichert, die sich aus<br />

einem Pointer auf das IUsageNotify-Interface der jeweiligen Anwendung <strong>und</strong><br />

einem int zusammensetzen. Der Integer gibt an, wie oft die Applikation den Knoten<br />

mit der durch den Schlüssel bestimmten Verwendung angefordert hat. Durch<br />

131


KAPITEL 5. Realisierung von Szenarien des <strong>Mehrbenutzer</strong>-TV<br />

132<br />

diesen Rang wird sichergestellt, dass eine Anwendung den Knoten für den gleichen<br />

Zweck mehrfach anfordern kann ohne ggf. den Master-Status zu verlieren, sobald<br />

sie den Knoten von einer Verwendung wieder freigibt. Aus diesem Gr<strong>und</strong> muss bei<br />

der isMaster-Abfrage auch der Rang berücksichtigt werden.<br />

Die Methode Result Usage::isMaster() dient zur Abfrage, ob eine Anwendung<br />

auf dem Knoten Master ist. Der beabsichtigte Verwendungszweck einer<br />

solchen wird dabei als Parameter übergeben. Die Methode ermittelt zuerst die<br />

momentane Verwendung des Knotens. Hat diese eine höhere Priorität, wäre die<br />

Anwendung bei einem Zugriff Slave, was durch den Rückgabewert FAILURE angezeigt<br />

wird. Im Falle des Masters lautet der Rückgabewert SUCCESS. Besitzt der<br />

Verwendungszweck die gleiche Priorität, wird ermittelt, wer sich dafür schon registriert<br />

hat. Ist der Benutzer, der sich als erstes dafür registriert hat, gleich dem<br />

anfragenden, so ist dieser der Master, andernfalls Salve.<br />

Die Abfrage nach der Kontrollmöglichkeit <strong>eines</strong> Benutzers über einen Knoten ist<br />

auf Anwendungsebene realisiert. In <strong>NMM</strong> ist es nicht möglich, das Versenden von<br />

Events bei einem Methoden-Aufruf über ein Interface (vergleiche Abschnitt 3.1)<br />

zu blockieren. Aus diesem Gr<strong>und</strong> ist es notwendig, dass jede Anwendung, die in<br />

den vorgestellten Szenarien partizipiert, z.B. vor einem Kanalwechsel prüft, ob sie<br />

dazu berechtigt ist.<br />

Dies bedeutet, dass die Anwendung der Usage-Klasse des Knotens bei dessen<br />

Verwendung ihre Verwendungsart sowie das implementierte IUsageNotify-<br />

Interface mitteilen muss. Dadurch wird sie identifiziert <strong>und</strong> bei Status-Wechsel<br />

benachrichtigt, was wie folgt durchgeführt wird:<br />

/ ∗ V a r i a b l e n d e k l a r a t i o n e n ∗ /<br />

/ ∗ Das ITVCard−I n t e r f a c e der TV−Q u e l l e ∗ /<br />

ITVCard* tvsource;<br />

/ ∗<br />

P r i o r i t ä t der Verwendungsart ,<br />

z . B . L i v e TV h a t P r i o r i t ä t 5<br />

∗ /<br />

int prority = 5;<br />

...<br />

/ ∗<br />

A n f o r d e r n des IUsage−I n t e r f a c e der v e r w e n d e t e n Q u e l l e<br />

∗ /<br />

IUsage *usage = tvsource->getParentObject()<br />

->getInterface();<br />

/ ∗<br />

S e t z e n des Verwendungszwecks f ü r L i v e TV<br />

∗ /<br />

usage->setUsage(priority,<br />

this->getInterface());<br />

Des Weiteren muss vor einem Kanalwechsel bei dem Knoten die Berechtigung der<br />

Anwendung erfragt werden. Nur bei positiver Rückmeldung ist der kontrollierende<br />

Zugriff auf den Knoten gestattet:


5.3. ZUGRIFF MEHRERER ANWENDUNGEN AUF MEHRERE QUELLEN<br />

/ ∗<br />

A n f o r d e r n des IUsage−I n t e r f a c e der v e r w e n d e t e n Q u e l l e<br />

∗ /<br />

IUsage *usage = tvsource->getParentObject()<br />

->getInterface();<br />

/ ∗<br />

Vor dem S e t z e n e i n e s Kanals muss e r m i t t e l t werden ,<br />

ob d i e B e r e c h t i g u n g d a f ü r b e s t e h t<br />

∗ /<br />

if( usage->isMaster(priority,<br />

this->getInterface()) ){<br />

/ ∗<br />

E r s t dann d a r f der Kanal g e s e t z t werden<br />

∗ /<br />

tvsource->setChannel(1);<br />

}<br />

Die Anwendung muss dem Knoten vor dessen Freigabe mitteilen, dass sie ihn nicht<br />

mehr für die angegebenen Zwecke benötigt. Dies ist bei einer gemeinsamen Verwendung<br />

des Knotens durch mehrere Anwendungen wichtig. Der Knoten selbst<br />

kann nicht ohne weiteres feststellen, welche Anwendung ihn freigegeben hat, d.h.<br />

für welchen Verwendungszweck er nicht mehr benötigt wird. Bei Freigabe <strong>eines</strong><br />

Knotens kann nun ermittelt werden, von welchem Benutzer er gebraucht wurde.<br />

Hat ein Anwender nun den Knoten für Live TV eingesetzt <strong>und</strong> auch den Videorekorder<br />

gestartet, kann die Geräteverwaltung von <strong>NMM</strong> den Verwendungszweck<br />

der Knoten nicht erkennen, da lediglich Benutzer-, jedoch keine Verwendungsinformationen<br />

übertragen werden. Das Zurücknehmen des Verwendungszwecks<br />

kann wie folgt vorgenommen werden:<br />

/ ∗<br />

A n f o r d e r n des IUsage−I n t e r f a c e der v e r w e n d e t e n Q u e l l e<br />

∗ /<br />

IUsage *usage = tvsource->getParentObject()<br />

->getInterface();<br />

/ ∗<br />

Zurücknehmen des Verwendungszwecks<br />

∗ /<br />

usage->unsetUsage(priority,<br />

this->getInterface());<br />

5.3.6 Bestimmung einer verwendbaren Quelle<br />

Zur Bestimmung einer verwendbaren TV-Quelle wurde der in Abschnitt 5.3 entwickelte<br />

Algorithmus in der Klasse TVManager implementiert. Das Klassendiagramm<br />

der TVManager-Klasse ist in Abbildung 5.26 zu sehen. Diese bestimmt<br />

für einen zu setzenden Kanal die zugeordneten TV-Karten, was mit einem<br />

Zugriff auf die globale Kanalliste durchgeführt wird. Anschließend ermittelt<br />

sie aus den TV-Quellen eine verwendbare TV-Karte <strong>und</strong> verbindet diese mit<br />

dem angegebenen <strong>NMM</strong>-Flussgraphen. Dazu ist auch festzulegen, für welchen<br />

Zweck der TVManager eine TV-Quelle suchen soll, da dieser neben LiveTV auch<br />

133


KAPITEL 5. Realisierung von Szenarien des <strong>Mehrbenutzer</strong>-TV<br />

134<br />

Abbildung 5.26: Die Klasse TVManager.<br />

zur Suche einer Quelle für das DVB-EPG-Plugin (siehe Abschnitt 4.2.5) genutzt<br />

wird. Dies erfolgt durch Übergabe des Verwendungszwecks im Konstruktor der<br />

TVManager-Klasse.<br />

Die Spezifizierung des Flussgraphen wird von der Anwendung vorgenommen, indem<br />

sie - mit Ausnahme der Quelle - alle zu verwendenden Knoten sowie deren<br />

Kanten festlegt. Diesen Graphen <strong>und</strong> den mit der Quelle zu verbindenden Knoten<br />

teilt sie dem TVManager mit.<br />

Weiterhin kann der TVManager informiert werden, welche Senken der Flussgraph<br />

verwendet. Dadurch werden diese mit einem von <strong>NMM</strong> bereitgestellten Synchronizer<br />

verb<strong>und</strong>en, was bei einem mehrfachen Zugriff auf diese Quelle zu einer<br />

synchronen Wiedergabe der Audio- <strong>und</strong> Video-Daten zwischen den entsprechenden<br />

Rechnern führt. Eine Beschreibung der Synchronisierung findet sich in [Did02].<br />

Zur Suche einer geeigneten TV-Quelle wird der TVManager-Klasse mittels der<br />

setChannel(int c)-Methode eine Kanalnummer übergeben, für welchen eine<br />

TV-Quelle gesucht werden soll. Sie bezieht sich auf den entsprechenden Kanal<br />

in der globalen Kanalliste. Somit sind alle TV-Karten bekannt, die diesen Kanal<br />

bereitstellen.<br />

Die Vorgehensweise des TVManager ist in Abbildung 5.27 graphisch dargestellt.<br />

Die Klasse prüft zuerst, ob momentan eine TV-Karte verwendet <strong>und</strong> der gewünschte<br />

Kanal von dieser zur Verfügung gestellt wird. Bei Verwendung einer TV-Karte<br />

ist deren zugehörige GraphURL gespeichert. Sie wird in der von der globalen Kanalliste<br />

gelieferten TV-Karten-Liste gesucht. Wurde die TV-Karte gef<strong>und</strong>en, wird<br />

überprüft, ob die TV-Quelle als Master verwendet wird. Dies wird durch Erfragen


5.3. ZUGRIFF MEHRERER ANWENDUNGEN AUF MEHRERE QUELLEN<br />

Abbildung 5.27: Das Sequenzdiagramm zeigt den Ablauf der Suche einer verwendbaren<br />

TV-Karte durch den TVManager. Es stehen zwei TV-Karten zur Verfügung,<br />

wobei die erste davon momentan verwendet wird. Die zweite TV-Karte wird von<br />

einer höher priorisierten Anwendung genutzt.<br />

des Staus über das IUsage-Interface des verwendeten Knotens vollzogen. Ist die<br />

Anwendung Master, wird der gewünschte Kanal eingestellt.<br />

Wird momentan keine TV-Quelle verwendet, die aktuell genutzte stellt den gewünschten<br />

Kanal nicht bereit oder wird auf sie als Salve zugegriffen, dann muss<br />

eine neue TV-Quelle ermittelt werden. Dazu wird gemäß der Konvention zuerst<br />

nach einer TV-Karte mit Master-Status gesucht, was in der Methode request-<br />

CardExclusive(...) realisiert wurde. Diese nutzt den von der Anwendung<br />

festgelegten <strong>NMM</strong>-Flussgraphen, mit dem die entsprechend zu testende Quelle<br />

verb<strong>und</strong>en <strong>und</strong> deren Verwendbarkeit geprüft wird. Dazu werden die spezifizierten<br />

Knoten angefordert. Um für das DVB-EPG-Plugin eine geeignete TV-Karte<br />

zu finden wird beim Anfordern der Knoten zusätzlich festgelegt, dass diese das<br />

ITVGuideProducer-Interface implementieren müssen um als EPG-Quelle dienen<br />

zu können. Andernfalls wird mit der Überprüfung der nächsten TV-Karte fortgefahren.<br />

Als Anforderungs-Richtlinie für das Session-Sharing wird bei der Knotenbeschreibung<br />

der Quelle SHARED_OR_EXCLUSIVE_THEN_SHARED gesetzt um bereits<br />

verwendete Knoten anfordern zu können oder anderen Anwendungen das<br />

Mitbenutzen des Knotens zu gestatten. Das Session-Sharing in <strong>NMM</strong> wurde in<br />

Abschnitt 3.2 vorgestellt.<br />

135


KAPITEL 5. Realisierung von Szenarien des <strong>Mehrbenutzer</strong>-TV<br />

136<br />

Ist die Quelle von einer anderen Anwendung bereits belegt, wird nun festgestellt,<br />

welcher Kanal eingestellt ist. Entspricht dieser dem gewünschten, werden Informationen<br />

über die TV-Karte gespeichert um bei einer erfolglosen Suche diese Quelle<br />

u.U. als Slave verwenden zu können. Zu den abgelegten Informationen zählen neben<br />

der GraphURL <strong>und</strong> dem eingestellten Kanal auch der Verwendungszweck der<br />

Quelle, der bei einem evtl. Zugriff als Slave berücksichtigt wird. Falls auf die TV-<br />

Quelle als Master zugegriffen werden kann, wird zuerst der ggf. momentan verwendete<br />

<strong>NMM</strong>-Graph freigegeben. Anschließend werden die Knoten des neuen<br />

Graphen verb<strong>und</strong>en <strong>und</strong> der gewünschte Kanal eingestellt, sodass der Flussgraph<br />

gestartet werden kann. Andernfalls werden die Knoten desselben wieder freigegeben<br />

<strong>und</strong> die nächste TV-Quelle überprüft.<br />

Falls keine TV-Quelle mit Master-Status ermittelt werden konnte, wird versucht<br />

auf eine TV-Karte als Slave zuzugreifen. Dafür in Frage kommende Quellen wurden<br />

bei der Suche nach einer Master-Karte bereits gef<strong>und</strong>en. Diese Funktionalität<br />

wurde in der Methode requestCardShared() implementiert. Sie versucht<br />

zuerst TV-Karten zu nutzen, die mit dem Videorekorder belegt sind, da bei diesem<br />

die Wahrscheinlichkeit <strong>eines</strong> Kanalwechsels im Vergleich zu Live TV geringer<br />

ist. Eine solche Vorgehensweise dient dem Minimieren der Suchanfragen nach<br />

einer neuen TV-Quelle. Eine Berücksichtigung der Präferenz der TV-Karte ist aus<br />

diesen Gründen zweitrangig. Als Anforderungs-Richtlinie des Quellknotens wird<br />

SHARED verwendet, da die ermittelten TV-Karten bereits belegt sind <strong>und</strong> ggf.<br />

mitverwendet werden sollen. Weiterhin wird jede TV-Karte dahingehend geprüft,<br />

ob der gewünschte Kanal noch eingestellt ist <strong>und</strong> somit als Slave daraufzugegriffen<br />

werden kann. Anschließend folgt das Testen der TV-Karten mit LiveTV-Belegung.<br />

Sollte auch auf diesem Wege keine verwendbare TV-Karte gef<strong>und</strong>en werden ist es<br />

nicht möglich, den gewünschten Kanal zur Verfügung zu stellen. Andernfalls wird<br />

der ggf. momentan verwendete Flussgraph freigegeben <strong>und</strong> die Knoten des neuen<br />

Graphen verb<strong>und</strong>en, so dass dieser gestartet werden kann.<br />

Eine besondere Vorgehensweise wird bei einem sequentiellen Kanalwechsel mittels<br />

der Methoden channelUp() <strong>und</strong> channelDown() angewendet. Sie versuchen<br />

solange die Kanäle durchzuschalten, bis sie entweder einen empfangbaren<br />

Sender gef<strong>und</strong>en haben oder wieder an ihrem Ausgangspunkt angelangt sind. Um<br />

den Vorgang zu beschleunigen <strong>und</strong> unnötige Anfragen an TV-Karten zu vermeiden,<br />

werden Daten zu bereits überprüften <strong>und</strong> von höher priorisierten Anwendungen genutzten<br />

TV-Karten gespeichert, sodass diese nicht erneut getestet werden müssen.<br />

Im Gegensatz dazu wären freie oder von niedriger priorisierten Anwendungen verwendete<br />

TV-Karten als benutzbar erkannt <strong>und</strong> der entsprechende Knoten mit dem<br />

<strong>NMM</strong>-Graphen verb<strong>und</strong>en worden. Die zu speichernden Daten umfassen die GraphURL<br />

der TV-Karte sowie deren momentan eingestellten Kanal.<br />

Als Beispiel sei die Vorgehensweise der Methode channelUp() erklärt. Dazu<br />

stehen drei TV-Karten A, B <strong>und</strong> C bereit. Die globale Kanalliste enthält folgende<br />

Informationen: Kanal 1 kann von TV-Karte A <strong>und</strong> B empfangen werden, Kanal<br />

2 von Karte A <strong>und</strong> Kanal 3 von TV-Karte B <strong>und</strong> C. Das Ausgangsszenario stellt<br />

sich wie folgt dar: Der Videorekorder verwendet momentan Karte A <strong>und</strong> hat Kanal<br />

1 eingestellt. Eine Live TV-Anwendung hat Kanal 1 auf Karte B eingestellt <strong>und</strong><br />

schaltet nun mittels channelUp() weiter. Daraufhin wird von der globalen Ka-


5.4. INTEGRATION IN DIE MULTIMEDIA-BOX<br />

nalliste ermittelt, dass lediglich Karte B Kanal 2 bereitstellt. Da Karte B jedoch<br />

zum Empfang von Kanal 1 verwendet wird, werden diese Informationen abgespeichert.<br />

Somit ist Kanal 2 nicht zu empfangen. Deshalb wird nun versucht Kanal<br />

3 einzustellen, welcher von den Karten B <strong>und</strong> C bereitgestellt wird. Auf Gr<strong>und</strong><br />

der zuvor gespeicherten Informationen ist bereits bekannt, dass Karte B verwendet<br />

wird <strong>und</strong> auf dieser Kanal 1 eingestellt ist. Karte B wird deshalb aus der Karten-<br />

Liste, die aus der globalen Kanalliste ermittelt wurde, entfernt. Auf diese Weise<br />

wird verhindert, dass sie beim bei der Suche nach einer Master-Karte angesprochen<br />

wird. Lediglich Karte C wird deshalb getestet, was erfolgreich ist <strong>und</strong> Kanal<br />

3 somit empfangen werden kann. Die gespeicherten Informationen sind anschließend<br />

zu löschen, da Karte 1 beim nächten Umschaltversuch wieder frei sein kann.<br />

5.4 Integration in die Multimedia-Box<br />

Zur Integration der beschriebenen Konzepte in die Multimedia-Box wurden die in<br />

[BCE + 02] <strong>und</strong> [Kle03] entwickelten Zustände TVTimer <strong>und</strong> LiveTV überarbeitet<br />

<strong>und</strong> ergänzt.<br />

5.4.1 Der TVTimer-Zustand<br />

Zur Bedienung des Videorekorders wurde der TVTimer-Zustand der Multimedia-<br />

Box komplett überarbeitet. Der Status des Zustandes zu Beginn dieser Arbeit wurde<br />

bereits in Kapitel 3.3 beschrieben.<br />

Zu den Anforderungen, welche an die neue <strong>Implementierung</strong> des Zustandes gestellt<br />

wurden, zählte neben der übersichtlichen Anzeige der einprogrammierten<br />

Aufnahmen auch das Einblenden vorhandener EPG-Informationen. Zudem sollte<br />

die manuelle Eingabe <strong>und</strong> das Bearbeiten von Aufnahmen erleichtert, erkannte<br />

Konflikte angezeigt <strong>und</strong> manuell aufgelöst werden.<br />

Graphische Benutzeroberfläche<br />

Zur Erfüllung dieser Anforderungen wurde die graphische Benutzeroberfläche des<br />

TVTimer-Zustandes in zwei Widgets aufgeteilt, wie in Abbildung 5.28 zu sehen<br />

ist. Das obere Widget zeigt alle einprogrammierten Aufnahmen, die nach ihrem<br />

Status gruppiert sind. Innerhalb einer Gruppe sind sie nach Zeiten geordnet. Zuerst<br />

werden alle abgeschlossenen Aufzeichnungen angezeigt, gefolgt von solchen, die<br />

gerade aufgezeichnet werden. Es schließt sich eine Gruppe von Aufnahmen an, die<br />

für eine zukünftige Aufzeichnung einprogrammiert sind <strong>und</strong> endet mit denen, für<br />

die ein Konflikt erkannt wurde <strong>und</strong> aus diesem Gr<strong>und</strong> nicht aufgezeichnet werden.<br />

Dadurch wird eine Übersicht aller nicht programmierbaren Aufnahmen geboten<br />

um diese schneller identifizieren zu können.<br />

Die angezeigten Informationen der einzelnen Aufnahmen in der Liste beschrän-<br />

137


KAPITEL 5. Realisierung von Szenarien des <strong>Mehrbenutzer</strong>-TV<br />

138<br />

Abbildung 5.28: Der TVTimer-Zustand zeigt im oberen Widget programmierte<br />

Aufnahmen in einer Listendarstellung an. Im unteren Widget werden zu einer<br />

selektierten Aufnahme zusätzliche Informationen sowie vorhandene EPG-<br />

Informationen angezeigt.<br />

ken sich auf Tag <strong>und</strong> Monat sowie Start- <strong>und</strong> Stopp-Zeit. Die fehlende Angabe der<br />

Stopp-Zeit – dies ist bei Aufnahmen der Fall, die aus dem LiveTV-Zustand heraus<br />

ohne EPG-Informationen programmiert werden (siehe Abschnitt 5.4.2) – wird<br />

durch Querstriche gekennzeichnet. Darauf folgt der Kanal, für den die Aufnahme<br />

programmiert wurde. Die letzte Spalte enthält Informationen über den Status einer<br />

Aufnahme, der jeweils - außer SLEEPING - im Volltext angezeigt wird. Bei<br />

Aufnahmen mit Status SLEEPING bleibt jenes Feld entweder leer oder die einprogrammierte<br />

Periode wird angegebenen. Dazu zählen:<br />

Daily Die Aufnahme wird täglich zu der angegebenen Uhrzeit ausgeführt.<br />

Weekly Die Aufnahme wird wöchentlich zu der angegebenen Uhrzeit ausgeführt.<br />

Monthly Die Aufnahme wird monatlich zu der angegebenen Uhrzeit ausgeführt.<br />

Weekdays Die Aufnahme wird wochentäglich zu der angegebenen Uhrzeit ausgeführt.<br />

Weekends Die Aufnahme wird an jedem Wochenendtag zu der angegebenen Uhrzeit<br />

ausgeführt.<br />

* Die Aufnahme wird auf Basis von EPG-Informationen wiederholt ausgeführt.<br />

*Channel Die Aufnahme wird auf Basis von EPG-Informationen nur auf diesem<br />

Kanal wiederholt.<br />

*ChannelTime Die Aufnahme wird auf Basis von EPG-Informationen nur auf<br />

diesem Kanal zu der angegebenen Uhrzeit wiederholt.<br />

Das untere Widget enthält erweiterte Informationen zu einer Aufnahme. Dazu zählen<br />

Start- <strong>und</strong> Stopp-Zeit inklusive Datum, der für die Aufnahme programmierte


5.4. INTEGRATION IN DIE MULTIMEDIA-BOX<br />

Abbildung 5.29: Wurde eine Wiederholung basierend auf EPG-Informationen programmiert,<br />

werden die Startzeiten aller bisher gef<strong>und</strong>enen Sendungen angezeigt.<br />

Kanal, die GraphURL der zugeteilten TV-Karte <strong>und</strong> der Benutzername des Anwenders,<br />

welcher die Aufnahme programmiert hat.<br />

Sollten EPG-Informationen vorhanden sein, werden zudem der Titel der aufzunehmenden<br />

Sendung <strong>und</strong> die erweiterte Beschreibung angezeigt.<br />

Ist für die Aufnahme eine auf EPG-Informationen basierende Periode eingestellt<br />

worden, sind in diesem Widget zusätzlich die Start-Zeiten der bisher gef<strong>und</strong>enen<br />

Daten aufgeführt (siehe Abbildung 5.29).<br />

Bedienung<br />

In Anlehnung an die Bedienung der restlichen Zustände der Multimedia-Box wird<br />

auch hier das Wechseln der Widgets mit den Tasten ’Rechts’ <strong>und</strong> ’Links’ bewerkstelligt.<br />

Das Scrollen innerhalb der Widgets kann durch Drücken der Tasten ’Hoch’<br />

<strong>und</strong> ’Runter’ erfolgen.<br />

Die Farbknöpfe werden, abhängig von der gewählten Aufnahme, mit unterschiedlicher<br />

Funktionalität belegt. Mittels des roten Farbknopfes kann der Benutzer eine<br />

Aufnahme löschen oder eine laufende Aufnahme stoppen. Ist er dazu nicht berechtigt,<br />

weil die Aufzeichnung von einem anderen Benutzer erstellt wurde, wird bei<br />

dem Versuch eine solche zu löschen, eine Fehlermeldung eingeblendet.<br />

Der gelbe Farbknopf wird in der Übersicht je nach Status der Aufzeichnung unterschiedlich<br />

belegt. Durch Einsatz dieses Knopfes wird eine bereits aufgezeichnete<br />

Sendung mit Hilfe des Playlist-Zustandes [Kle03] abgespielt, wozu diesem der<br />

gespeicherte Dateiname übergeben wird. Ebenso kann eine laufende Aufnahme<br />

betrachtet werden, wozu die Anwendung in den LiveTV-Zustand wechselt.<br />

Bei einem festgestellten Konflikt werden im oberen Widget durch Betätigen des<br />

139


KAPITEL 5. Realisierung von Szenarien des <strong>Mehrbenutzer</strong>-TV<br />

140<br />

gelben Knopfes die markierte Aufzeichnung sowie alle mit ihr in Konflikt stehenden<br />

aufgeführt. Durch Löschen oder Bearbeiten einzelner programmierter Aufnahmen<br />

kann der Konflikt aufgelöst werden.<br />

Durch Drücken des blauen Farbknopfes kann eine Aufnahme manuell erstellt werden,<br />

wobei die Zeiten entsprechend vorbelegt sind. Als Start-Zeit wird die aktuelle<br />

Uhrzeit plus eine Minute, als Stopp-Zeit plus zwei Minuten vorgegeben. Diese Angaben<br />

können nun nach Belieben verändert werden.<br />

Durch betätigen des grünen Farbknopfes können Änderungen an Aufnahme-Daten<br />

vorgenommen werden. So ist es möglich Aufnahme-Zeiten zu bearbeiten mit Hilfe<br />

des Zahlenblocks der Fernbedienung. Weiterhin kann durch die ’Hoch’- bzw<br />

’Runter’-Taste der Kanal gewechselt werden. Der gelbe Farbknopf wird zur Änderung<br />

der Periode eingesetzt. Wiederholtes Drücken desselben ermöglicht das<br />

Durchschalten der verfügbaren Perioden. Hat der Benutzer die Aufnahmeinformationen<br />

seinen Wünschen angepasst, können diese durch Betätigen der grünen Taste<br />

übernommen, durch Drücken des roten Farbknopfes verworfen werden.<br />

<strong>Implementierung</strong><br />

Beim Start der Multimedia-Box legt der TVTimer-Zustand den Videorekorder lokal<br />

an oder verbindet sich mit einem im Netzwerk verfügbaren. Dies ist in der<br />

Konfigurations-Datei der Multimedia-Box angegeben. Eine vollständige Liste der<br />

Variablen zur Konfiguration des Videorekorders ist in Anhang A aufgeführt.<br />

Zur Programmierung <strong>und</strong> Bearbeitung der Aufnahmen werden die GUI-Elemente<br />

ausgewertet <strong>und</strong> die entsprechenden Methoden auf dem ITVTimer-Interface des<br />

Videorekorders aufgerufen. Durch das Registrieren <strong>eines</strong> EventListeners bei dem<br />

ITVTimerEvents-Interface des Videorekorders wird der TVTimer-Zustand über<br />

Zustandsänderungen von Aufzeichnungen benachrichtigt, woraufhin die Anzeige<br />

aktualisiert wird. Zudem werden EventListener für Methoden des ITVTimer-<br />

Interfaces registriert, sodass die Anzeige erneuert wird, wenn eine andere Anwendung<br />

eine Aufnahme bei dem Videorekorder programmiert, ändert oder löscht.<br />

In Abschnitt 3.3 wurde beschrieben, dass eine Aufnahme in dem Tasklist-Zustand<br />

angezeigt wurde, da dies der DVBRecorder-Zustandes vornahm. Durch die in dieser<br />

Arbeit erfolgte Änderung am Videorekorder der Multimedia-Box werden Aufnahmen<br />

nicht mehr durch deren Zustand vorgenommen, weshalb laufende Aufzeichnungen<br />

nicht mehr im Tasklist-Zustand angezeigt werden.<br />

5.4.2 Der LiveTV-Zustand<br />

In diesem Abschnitt wird der LiveTV-Zustand um die Konzepte des <strong>Mehrbenutzer</strong>-<br />

TV erweitert. Die Timeshifting-Funktionalität blieb bei der Neuentwicklung erhalten.<br />

Der Status des LiveTV-Zustands vor dieser Arbeit wurde bereits in Abschnitt<br />

3.3 erläutert.


5.4. INTEGRATION IN DIE MULTIMEDIA-BOX<br />

Abbildung 5.30: Im LiveTV-Zustand werden am unteren Rand die Startzeiten sowie<br />

die Titel der momentan laufenden <strong>und</strong> nachfolgenden Sendung angezeigt. In<br />

der linken oberen Ecke werden Informationen über den Kanal <strong>und</strong> die verwendete<br />

TV-Quelle angezeigt. In der rechten oberen Ecke ist der rote Punkt zu sehen, der<br />

eine momentane Aufnahme des Videorekorders signalisiert.<br />

Benutzeroberfläche<br />

Neben der Anzeige der EPG-Informationen, wie in Abschnitt 4.5.3 beschrieben,<br />

werden allgemeine Senderinformationen in der linken oberen Ecke eingeblendet<br />

(siehe Abbildung 5.30). Diese beinhalten die Kanalnummer des Senders in der<br />

globalen Kanalliste <strong>und</strong> den dort angegebenen Sendernamen. Weiterhin wird angezeigt,<br />

ob man sich gerade im Timeshifting-Modus oder im Live TV befindet. Die<br />

letzte Zeile enthält den Rechnernamen, dessen TV-Karte momentan als Quelle verwendet<br />

wird sowie den Status der Anwendung, ob sie die Quelle als Master oder<br />

als Slave nutzt.<br />

Weiterhin wird darüber informiert, ob momentan eine Aufnahme getätigt wird.<br />

Dies zeigt ein roter Punkt in der rechten oberen Ecke an.<br />

Bedienung<br />

Die Bedienung des LiveTV-Zustandes wurde weitestgehend von der ersten Version<br />

übernommen, wodurch u.a. die Kanäle einzeln durchgeschaltet werden können.<br />

Neu hinzugefügt wurde die Möglichkeit des Kanalwechsels durch Angabe der Kanalnummer<br />

des Senders in der globalen Kanalliste. Dazu wird in der Mitte des<br />

Bildschirms ein Fenster eingeblendet, in das man eine Nummer, bestehend aus<br />

bis zu vier Ziffern, eingeben kann. Drei Sek<strong>und</strong>en nach Eingabe der letzten Ziffer<br />

blendet sich das Fenster wieder aus <strong>und</strong> es wird der gewählte Kanal eingestellt.<br />

Sollte das nicht möglich sein, da alle TV-Karten, die den Kanal bereitstellen, schon<br />

anderweitig verwendet werden oder die eingebene Nummer größer als die Anzahl<br />

verfügbarer Kanäle ist, wird dies dem Benutzer durch eine entsprechende Meldung<br />

mitgeteilt.<br />

141


KAPITEL 5. Realisierung von Szenarien des <strong>Mehrbenutzer</strong>-TV<br />

142<br />

Abbildung 5.31: Der gezeigte Teilgraph wird im LiveTV-Zustand erstellt. Die<br />

Quelle wird von der TVManager-Klasse ermittelt <strong>und</strong> mit diesem Teilgraphen<br />

verb<strong>und</strong>en. Die globalen Knoten der Multimedia-Box sind grau unterlegt.<br />

Außerdem wird die direkte Aufnahme des momentan eingestellten Senders durch<br />

Drücken des roten Farbknopfes unterstützt. Dazu wird bei vorhandenen EPG-Informationen<br />

die aktuelle Sendung bis zu deren Ende aufgezeichnet. Existieren<br />

diese nicht, läuft die Aufnahme solange, bis sie entweder von dem Anwender<br />

im TVTimer-Zustand manuell oder vom Videorekorder automatisch beendet wird,<br />

wie in Abschnitt 5.2.2.4 beschrieben. Sollten der Videorekorder <strong>und</strong> der LiveTV-<br />

Zustand eine TV-Karte gemeinsam verwenden, kann mittels des roten Farbknopfes<br />

in den TVTimer-Zustand gewechselt werden um ggf. die Aufnahme zu beenden.<br />

<strong>Implementierung</strong><br />

Zur Suche einer verwendbaren TV-Karte wird die Klasse TVManager verwendet.<br />

Zuerst wird der Flussgraph aus Knoten für das Timeshifting sowie zum Dekodieren<br />

bzw. Ausgeben der Audio- <strong>und</strong> Video-Daten festgelegt (siehe Abbildung 5.31).<br />

Beim Einstellen von Kanälen können diese sequentiell durchgeschaltet oder direkt<br />

gesetzt werden, was bei der Fehlerbehandlung unterschieden wird. Dies wird bei<br />

einem Wechsel der TV-Karte während der Kanal-Suche durch einen Hinweis angezeigt,<br />

wie in Abbildung 5.32 dargestellt. Sollte keine geeignete TV-Karte zur Verfügung<br />

stehen, wird im sequentiellen Fall solange weitergeschaltet, bis ein verfügbarer<br />

Kanal gef<strong>und</strong>en ist. Wurde ein Kanal gef<strong>und</strong>en, wird durch eine Meldung angezeigt,<br />

dass Sender übersprungen wurden. Entspricht dieser demjenigen, der den<br />

Ausgangspunkt der Suche darstellt, wird ebenfalls eine entsprechende Hinweismeldung<br />

eingeblendet. Ist es nicht möglich, über den Nummernblock der Fernbedienung<br />

einen Sender direkt einzustellen, erfolgt eine Fehlermeldung. Als Alternative<br />

wird die Suche nach dem nächsten verfügbaren Kanal angeboten.<br />

Der LiveTV-Zustand registriert beim Starten einen EventListener bei der TV-Quelle,<br />

um auf einen Kanalwechsel durch den Master zu reagieren. Dadurch wird eine Hinweismeldung<br />

eingeblendet die es ermöglicht, die TV-Quellen-Suche wieder anzustoßen,<br />

damit der aktuell eingestellte Sender weiterhin empfangen werden kann.<br />

Sollte dies erfolglos sein, wird der nächst empfangbare Kanal gesucht. Nach dem<br />

Wechsel einer TV-Quelle wird bei dieser erneut ein EventListener registriert.


5.5. ZUSAMMENFASSUNG<br />

Abbildung 5.32: Sollte bei einem Kanalwechsel die TV-Quelle gewechselt werden,<br />

wird dies durch eine entsprechende Meldung angezeigt.<br />

Zur Benachrichtigung der Anwendung über einen Statuswechsel auf der TV-Karte,<br />

wenn sie also vom Master zum Slave wird oder umgekehrt, implementiert der<br />

LiveTV-Zustand das IUsageNotify-Interface. Dieses übergibt er der TVManager-Klasse<br />

zur Registrierung bei der verwendeten TV-Quelle.<br />

5.5 Zusammenfassung<br />

In diesem Kapitel wurden Szenarien vorgestellt, die den Zugriff mehrerer Anwendungen<br />

auf mehrere TV-Karten beschreiben. Nach einer kurzen Betrachtung des<br />

Zugriffs <strong>eines</strong> Benutzers auf eine TV-Quelle wurde dieses Szenario um mehrere<br />

Quellen erweitert <strong>und</strong> zu dessen Realisierung die globale Kanalliste entwickelt,<br />

welche jedem Kanal die zur Verfügung stehenden TV-Karten gemäß der Präferenz<br />

des Benutzers zuordnet. Neben Aufbau <strong>und</strong> Erstellung wurde zudem die Datenstruktur<br />

erläutert, welche die Informationen der Liste speichert.<br />

Als erste Applikation zur Verwendung der globalen Kanalliste wurde der Videorekorder<br />

beschrieben, der Aufzeichnungen auf vorhandene TV-Karten verteilt <strong>und</strong><br />

Konflikte zwischen verschiedenen Aufnahmen erkennt. Im Weiteren wurden die<br />

Möglichkeiten durch die Anbindung <strong>eines</strong> EPGs <strong>und</strong> dessen Realisierung aufgezeigt,<br />

wozu neben dem Anzeigen der Informationen zu einer Aufnahme die automatische<br />

Wiederholung von Sendungen mit vergleichbaren EPG-Daten zählt.<br />

In der Folge ist ein Algortihmus erarbeitet worden, der den Zugriff mehrerer Benutzer<br />

auf mehrere TV-Quellen steuert. Dieser ordnet den verschiedenen Anwendungen<br />

verfügbare TV-Karten unter Berücksichtigung der momentanen Verwendungsart<br />

zu. Dazu wurde eine Hierachie der Anwendungen EPG, Live TV <strong>und</strong> Videorekorder<br />

festgelegt, mit deren Hilfe die Kontrollmöglichkeit der Anwendungen<br />

auf einzelnen TV-Karten beschränkt werden können. Zur <strong>Implementierung</strong> dessen<br />

wurde die Klasse Usage entwickelt, mit deren Hilfe die Verwendungsart in<br />

<strong>NMM</strong>-Knoten gespeichert wird. Die Zuteilung einer TV-Karte wurde in der Klasse<br />

TVManager realisiert.<br />

143


KAPITEL 5. Realisierung von Szenarien des <strong>Mehrbenutzer</strong>-TV<br />

144<br />

Das Kapitel endet mit der Integration der vorgestellten Klassen <strong>und</strong> Konzepte<br />

in die Multimedia-Box. Zuerst wurde der Multimedia-Box-Zustand TVTimer zur<br />

Steuerung des Videorekorders beschrieben. Mit ihm können Aufnahmen erstellt,<br />

verändert <strong>und</strong> gelöscht werden. Auch die Beschreibung der realisierten manuellen<br />

Konfliktauflösung wurde thematisiert. Darauf folgte die Beschreibung des<br />

LiveTV-Zustandes, der sowohl um die Anbindung an den realisierten EPG als auch<br />

um die Möglichkeit des Zugriffs auf mehrere TV-Karten erweitert wurde. Hierzu<br />

zählen das Erkennen <strong>eines</strong> Status-Wechsels auf der verwendeten Karte sowie<br />

die Ausnahme-Behandlung im Falle einer erfolglosen Suche nach einer geeigneten<br />

TV-Quelle. Letzteres ist durch entsprechende Fehlermeldungen <strong>und</strong> vordefinierte<br />

Reaktionen realisiert worden.


Kapitel 6<br />

Zusammenfassung <strong>und</strong> Ausblick<br />

In diesem Kapitel werden die erreichten Ziele zusammengefasst <strong>und</strong> ein Ausblick<br />

auf Erweiterungmöglichkeiten gegeben.<br />

6.1 Erreichte Ziele<br />

In der vorliegenden Diplomarbeit wurden die TV-Eigenschaften der Multimedia-<br />

Box erweitert. Die anvisierten Ziele bestanden in der Entwicklung einer Elektronischen<br />

Programmzeitschrift (EPG) <strong>und</strong> der Realisierung des <strong>Mehrbenutzer</strong>-TV,<br />

welche Anwendungsszenarien beschreiben, in denen der Zugriff mehrerer Anwendungen<br />

auf mehrere TV-Quellen automatisch geregelt wird. Zu diesem Zweck wurde<br />

der TVTimer- <strong>und</strong> der LiveTV-Zustand der Multimedia-Box um die Möglichkeit<br />

des Zugriffs auf mehrere TV-Karten erweitert.<br />

Als erste Erweiterung wurde der EPG vorgestellt, der mit Hilfe von externen Programmen<br />

Informationen aus dem Internet sammelt oder entsprechende Daten aus<br />

dem digitalen oder analogen Fernsehstrom ausliest. Das Einbinden dieser Werkzeuge<br />

wurde als Plugin-Struktur realisiert, sodass weitere Quellen dem EPG leicht<br />

hinzugefügt werden können. Im Rahmen dieser Arbeit sind verschiedene Plugins<br />

zur Verwendung der oben genannten Quellen erstellt worden. Zum einen wurden<br />

die XMLTV-Tools integriert, welche ihre Informationen bei speziellen Diensten<br />

im Internet abfragen, zum anderen wurde nxtvepg eingeb<strong>und</strong>en, welches Daten<br />

über die Austastlücke des Videotextes erhält. Schließlich wurde ein Plugin entwickelt,<br />

das EPG-Informationen aus dem DVB-Datenstrom extrahiert, wozu der<br />

DVBReadNode von <strong>NMM</strong> um die entsprechende Funktionalität erweitert wurde.<br />

Alle auf diese Weise gesammelten Daten werden auf der Festplatte abgelegt, damit<br />

sie beim Beenden der Anwendung nicht verloren gehen. Dazu werden sie in<br />

einer Verzeichnisstruktur mit XML-Daten gespeichert um einen schnellen Zugriff<br />

auf Informationen zu ermöglichen ohne den gesamten Datenbestand durchsuchen<br />

zu müssen. Die Verzeichnisse sind so aufgebaut, dass zu jedem Kanal ein eigenes<br />

Unterverzeichnis existiert, in welchem die EPG-Informationen in separaten Datei-<br />

145


KAPITEL 6. Zusammenfassung <strong>und</strong> Ausblick<br />

146<br />

en enthalten sind. Für jeden Tag wird eine eigene Datei mit den entsprechenden<br />

XML-Daten erstellt. Weiterhin wird im EPG-Verzeichnis eine Datei angelegt, die<br />

einen XML-Baum mit Kanal-Informationen enthält, was einen schnellen Zugriff<br />

auf diese Informationen ermöglicht.<br />

Eine Eigenschaft des EPG ist das in Abschnitt 4.2 vorgestellte gleichzeitige Sammeln<br />

von Informationen von unterschiedlichen Quellen. Zu diesem Zweck werden<br />

den Quellen Prioritäten zugewiesen, wodurch es möglich ist Daten von höher priorisierten<br />

Quellen zu bevorzugen. Dazu wird festgestellt, ob sich vorhandene Daten<br />

mit neuen überschneiden <strong>und</strong> diese ggf. ersetzt oder ergänzt.<br />

Zum Zugriff auf die gesammelten Informationen werden verschiedene Methoden<br />

unterstützt, womit Daten nach bestimmten Kriterien abgefragt werden können.<br />

Diese reichen von der Abfrage einer einzelnen bis zum Durchsuchen des gesamten<br />

Datensatzes nach mehreren Informationen.<br />

Außerdem wurde der EPG um eine Peer-to-Peer-Funktion erweitert, welche das<br />

Weiterleiten einer Anfrage an im Netzwerk verteilte EPGs erlaubt. Dadurch kann<br />

das Sammeln von EPG-Informationen auf verschiedene Rechner verteilt werden.<br />

Bei lokal nicht vorhandenen oder unvollständigen Informationen werden die verteilt<br />

laufenden EPGs abgefragt, ob sie die gewünschten Daten bereitstellen.<br />

Zur Bedienung des EPG wurde die Multimedia-Box um den TVGuide- <strong>und</strong> den<br />

Search-Zustand ergänzt. Der TVGuide-Zustand dient dem Blättern in den EPG-<br />

Informationen. Hier können das Tagesprogramm der Sender <strong>und</strong> Informationen zu<br />

einzelnen Sendungen eingesehen werden. Der Search-Zustand dient dem Durchsuchen<br />

der Datenbestände des EPG. Hier können verschiedene Suchkriterien definiert<br />

werden wie das Einschränken der Suche z.B. auf bestimmte Kanäle oder<br />

Schlagworte. Anschließend werden die gef<strong>und</strong>enen Daten entsprechend aufbereitet<br />

<strong>und</strong> angezeigt.<br />

Die zweite Erweiterung betrifft den Videorekorder <strong>und</strong> die Live TV-Funktionalität<br />

der Multimedia-Box. Im Rahmen dieser Diplomarbeit wurde die Einschränkung<br />

des Zugriffs auf nur eine TV-Karte aufgehoben. Dazu ist die globale Kanalliste<br />

eingeführt worden die angibt, über welche Quellen der jeweilige Kanal empfangen<br />

werden kann. Diese Karten können lokal oder im Netzwerk verteilt sein. Weiterhin<br />

wurde berücksichtigt, dass jede der oben genannten Anwendungen diese Quellen<br />

nutzen kann, so auch der EPG zum Sammeln von Daten. Zu diesem Zweck<br />

wurden die <strong>NMM</strong>-Knoten um die Speichermöglichkeit <strong>eines</strong> Verwendungszwecks<br />

erweitert. Mit diesen Informationen kann nun festgelegt werden, welche Berechtigung<br />

einer Anwendung auf dem entsprechenden Knoten eingeräumt wird. Zur<br />

Realisierung wurde die Hierarchie der Prioritäten so aufgebaut, dass zunächst dem<br />

Videorekorder die höchste Priorität zukommt, gefolgt von Live TV <strong>und</strong> schließlich<br />

dem EPG. Des Weiteren wurde auf das von <strong>NMM</strong> bereitgestellte Session-Sharing<br />

zurückgegriffen, sodass eine große Auswahl an Kanälen zur Verfügung steht. Dadurch<br />

ist es möglich, dass mehrere Anwendungen eine TV-Quelle gemeinsam nutzen.<br />

Dies erforderte die Einführung des Konzepts des Master- <strong>und</strong> Slave-Zugriffs<br />

auf TV-Karten, sodass festgestellt werden kann, welche Anwendung kontrollierend<br />

auf eine Karte zugreifen darf. Auf dieser Basis wurde ein Algorithmus entwickelt,


6.2. ERWEITERUNGSMÖGLICHKEITEN<br />

der automatisch verwendbare TV-Karten ermittelt <strong>und</strong> diese der Anwendung zur<br />

gewünschten Verwendungsabsicht zuteilt.<br />

Schließlich wurde der Videorekorder um eine Konflikterkennung erweitert, welche<br />

die Zuordnung von TV-Quellen zu Aufnahmen realisiert, indem sie überlappende<br />

Aufzeichnungen feststellt <strong>und</strong> ihnen freie TV-Karten zuteilt. Dabei wird erfragt, ob<br />

überlappende Aufnahmen für den gleichen Kanal programmiert werden sollen. In<br />

diesem Fall kann mittels des in <strong>NMM</strong> vorhandenen Session-Sharing-Dienstes die<br />

gleiche TV-Ressource verwendet werden. Weiterhin unterstützt der Videorekorder<br />

den Zugriff auf einen EPG, was die Abfrage von Informationen zu der Aufzeichnung<br />

einer Sendung ermöglicht. Darüberhinaus können Aufnahmen auf Basis vergleichbarer<br />

EPG-Informationen automatisch wiederholt <strong>und</strong> auf einen bestimmten<br />

Kanal bzw. eine Sendezeit eingeschränkt werden. Neben diesen EPG-Perioden stehen<br />

auch zeitenbasierte Modi, wie z.B. eine tägliche oder wöchentliche Aufnahme,<br />

zur Verfügung.<br />

Die Bedienung des Videorekorders wurde durch die Überarbeitung des TVTimer-<br />

Zustandes realisiert. Über diesen ist es möglich neue Aufzeichnungen zu programmieren<br />

<strong>und</strong> Daten zu bereits einprogrammierten Aufnahmen zu verändern oder diese<br />

zu löschen. Des Weiteren wurde eine manuelle Konflikt-Auflösung implementiert,<br />

durch die alle zu einer bestimmten in Konflikt stehenden Aufnahme kompakt<br />

angezeigt werden um so bei Bedarf entsprechende Einträge zu löschen.<br />

Für die Anwendung der genannten Vorgehensweisen beim Fernsehen wurde der<br />

LiveTV-Zustand der Multimedia-Box überarbeitet. Dieser verwendet den entwickelten<br />

Algorithmus zur Bestimmung einer verwendbaren TV-Karte. Gleichfalls wird<br />

geprüft, ob der Benutzer zu einem Kanalwechsel berechtigt ist oder für den nächsten<br />

Kanal eine neue TV-Karte zugewiesen werden muss. Weiterhin wurde der<br />

LiveTV-Zustand um den Zugriff auf den EPG erweitert, damit vorhandene Informationen<br />

eingeblendet werden können.<br />

6.2 Erweiterungsmöglichkeiten<br />

Im folgenden Abschnitt werden Erweiterungsmöglichkeiten dieser Arbeit aufgeführt.<br />

Neben einer Beschreibung der Funktionalität werden zusätzlich Möglichkeiten<br />

zur Realisierung aufgezeigt.<br />

6.2.1 EPG-Plugins<br />

Neben den in dieser Arbeit realisierten EPG-Plugins existieren noch weitere Quellen<br />

für EPG-Informationen. Ein anderer Lieferant solcher Daten ist z.B. der kostenpflichtige<br />

Dienst von tvtv.de [tvtb], welcher über ein eigenes Programm Daten<br />

im XMLTV-Format bereitstellt. Außerdem wäre das Abrufen der Informationen<br />

bei entsprechenden Service-Providern denkbar, wie es die Windows Media Center<br />

Edition durchführt.<br />

147


KAPITEL 6. Zusammenfassung <strong>und</strong> Ausblick<br />

148<br />

Um diese Quellen zu nutzen müssen analog zu den bereits vorhandenen weitere<br />

Plugins geschrieben werden, die diese Daten sammeln <strong>und</strong> dem EPG zur Verwaltung<br />

übergeben, damit er sie verwalten kann. Änderungen an der <strong>Implementierung</strong><br />

des EPG sind durch die realisierte Plugin-Struktur nicht nötig.<br />

6.2.2 Benachrichtigung über eintreffende EPG-Informationen<br />

Der in dieser Arbeit realisierte EPG kann eine graphische Benutzeroberfläche lediglich<br />

darüber benachrichtigen, dass neue Informationen hinzugefügt wurden.<br />

Über den Inhalt dieser Daten ist dabei nichts in Erfahrung zu bringen. Es wäre möglich<br />

den EPG um einen Benachrichtigungs-Dienst zu erweitern. Der Benutzer kann<br />

sich so über neue Daten informieren lassen, die z.B. ein festgelegtes Schlagwort<br />

enthalten. Eine weitere Option wäre die Benachrichtigung des Videorekorders über<br />

Änderungen in der Programmabfolge <strong>eines</strong> Senders <strong>und</strong> die daraus resultierende<br />

notwendige Anpassung der Startzeit einer geplanten Aufnahme. Außerdem könnte<br />

der Videorekorder so über neue Daten zu vorgesehenen RANDOM-Perioden informiert<br />

werden anstatt nach jeder getätigten Aufnahme eine erneute Suchanfrage<br />

an den EPG zu stellen, wie in Abschnitt 5.2.2.5 beschrieben.<br />

Zur Realisierung müsste eine Klasse implementiert werden, bei der entsprechende<br />

Suchmasken registriert werden können <strong>und</strong> die entsprechende Anwendung über<br />

eventuelle Treffer informiert. Diese Klasse hat die Aufgabe nach erfolgreichem<br />

Hinzufügen der Daten in der insertEvent()-Methode der TVGuide-Klasse<br />

zu prüfen, ob die angegeben Filterkriterien zutreffend sind. Die zu informierende<br />

Anwendung implementiert ein entsprechendes Interface, das sie bei dem Objekt<br />

registriert <strong>und</strong> mit dessen Hilfe sie benachrichtigt wird. Dabei können die neuen<br />

Daten schon übertragen werden, sodass ein erneutes Abfragen des EPG nicht notwendig<br />

ist.<br />

6.2.3 Zusammenschluß mehrerer Videorekorder<br />

Der in dieser Arbeit entwickelte Videorekorder ist als zentraler Server realisiert, damit<br />

Konflikte zwischen Aufnahmen leicht erkannt <strong>und</strong> aufgelöst werden können.<br />

Als weiterer Schritt wäre das Management mehrerer Videorekorder auf verschiedenen<br />

Rechnern denkbar. Dazu müsste ein Algorithmus implementiert werden,<br />

der das Einprogrammieren von Aufnahmen auf die verschiedenen Videorekorder<br />

verteilt. Weiterhin müsste eine Kommunikation zwischen den Videorekordern<br />

realisiert werden. Dadurch sollen Aufnahmen, die auf Gr<strong>und</strong> nicht mehr erreichbarer<br />

TV-Karten oder wegen Konflikten bei einer automatischen Wiederholung fehlschlagen,<br />

auf die restlichen Videorekorder verteilt werden.<br />

Es könnte versucht werden zur Erstellung einer Aufnahme bei allen zur Verfügung<br />

stehenden Videorekordern diese zu programmieren. Dazu müssten die Videorekorer<br />

sequentiell angesprochen werden, bis die Aufzeichnung erfolgreich programmiert<br />

ist oder alle Videorekorder einen Konflikt meldeten. Dabei sollte jedoch garantiert<br />

sein, dass zur Vermeidung von Konflikten nicht zwei Videorekorder auf die


gleiche TV-Karte zugreifen.<br />

6.2.4 Master-Slave-Konzept auf Middleware-Ebene<br />

6.2. ERWEITERUNGSMÖGLICHKEITEN<br />

Das in dieser Arbeit entwickelte Master-Slave-Konzept zur Einschränkung der Zugriffsmöglichkeiten<br />

auf eine TV-Karte wurde auf Anwendungs-Ebene realisiert.<br />

Dies bedeutet, dass jede Applikation vor einem Kanalwechsel prüfen muss, ob sie<br />

dazu berechtigt ist.<br />

Denkbar wäre auch eine Realisierung dieses Konzeptes in der Basis-Schicht von<br />

<strong>NMM</strong>. Dies würde bedeuten, dass ein Knoten automatisch erkennt, welche empfangenen<br />

Events er zulassen darf <strong>und</strong> welche er verwerfen muss. Wichtig dabei ist,<br />

dass der Knoten nicht blind alle Events verwirft, sobald er Slave ist, sondern unterscheiden<br />

kann, welche Events einer speziellen Prüfung bedürfen. Andernfalls wäre<br />

es nicht möglich die Verwendbarkeit des Knotens zu prüfen, da alle Methoden zum<br />

Abfragen von Informationen nicht ausgeführt werden können.<br />

Eine mögliche Realsierung wäre das Blockieren aller Methoden <strong>eines</strong> oder mehrerer,<br />

festgelegter Interfaces im Slave-Fall um eine Ausführung zu verhindern. Ein<br />

Knoten enthält eine Liste von Interface-Namen <strong>und</strong> prüft jede Methode, ob sie<br />

von einem Interface aus dieser Liste stammt. Ist dieses Interface enthalten, wird<br />

die Methode nicht ausgeführt. Dazu müssten bisherige Interfaces, die Methoden<br />

zum Setzen <strong>und</strong> Abfragen von Informationen besitzen, aufgeteilt werden, sodass<br />

Methoden zum Setzen blockiert <strong>und</strong> solche zum Abfragen erlaubt werden können.<br />

Die zweite Möglichkeit wäre ein Test des Methoden-Namens, der über ein Interface<br />

aufgerufen wird. Ein Knoten kann einen oder mehrere Reguläre Ausdrücke<br />

enthalten, mit deren Hilfe geprüft wird, ob eine Methode ausgeführt werden darf.<br />

Dazu müsste ggf. eine Namenskonvention für Methodennamen aufgestellt werden,<br />

die strikt einzuhalten ist.<br />

Zur Prüfung, welche Methode aufgerufen wurde <strong>und</strong> zu welchem Interface sie gehört,<br />

könnte ein entsprechender Test in das Event-System von <strong>NMM</strong> integriert werden.<br />

An dieser Stelle liegen die Methoden- <strong>und</strong> zugehörigen Interface-Namen als<br />

Zeichenkette vor, was einen Test mit Hilfe von Regulären Ausdrücken ermöglicht.<br />

149


KAPITEL 6. Zusammenfassung <strong>und</strong> Ausblick<br />

150


Anhang A<br />

Neue Konfigurations-Variablen in<br />

der Multimedia-Box<br />

Im Folgenden werden alle Variablen aufgelistet, mit deren Hilfe der EPG, der Videorekorder<br />

<strong>und</strong> LiveTV in der Multimedia-Box konfiguriert werden können. Diese<br />

sind in der Konfigurations-Datei der Multimedia-Box anzugeben. Dies ist die<br />

Datei .mmboxrc, welche im $HOME-Verzeichnis des Benutzers abgelegt ist. Sie<br />

wird erstellt durch Kopieren, Editieren <strong>und</strong> anschließendes Umbenennen der Datei<br />

mmboxrc_sample aus dem resources-Verzeichnis von <strong>NMM</strong> [<strong>NMM</strong>].<br />

Weitere Informationen können aus [Wel05] entnommen werden.<br />

A.1 Konfiguration des EPG<br />

• Angabe der Anzahl der zu verwendenden EPG-Quellen:<br />

epgsources_number=0<br />

• Die Variablen zur Angabe der EPG-Quellen sind durchnummeriert von 0 bis<br />

epgsources_number-1. Mögliche Werte sind:<br />

DVB epgsource_x=dvb<br />

xmltv epgsource_x=xmltv<br />

nxtvepg epgsource_x=nxtvepg<br />

• Hier kann angegeben werden, wenn zu einem entfernten EPG eine Verbindung<br />

hergestellt werden aoll um auf dessen Daten zuzugreifen. Es werden<br />

keine Daten lokal gespeichert:<br />

epglocation=:<br />

• Zur Konfiguration der Peer-to-Peer-Funktionalität des EPG muss zuerst die<br />

Anzahl der zu verwendenden Rechner angegeben werden:<br />

epgpeers_number=0<br />

151


ANHANG A. Neue Konfigurations-Variablen in der Multimedia-Box<br />

152<br />

Anschließend werden die Adressen der Rechner spezifiziert:<br />

epgpeer_0=:<br />

epgpeer_1=:<br />

• Zur Konfiguration des XMLTV-Plugins muss festgelegt werden, für welches<br />

Land Informationen gesammelt werden sollen. Dies legt gleichzeitig das zu<br />

verwendende externe Programm fest:<br />

xmltv_locale=de<br />

Zudem kann festgelegt werden, in welchem Intervall ein erneutes Sammeln<br />

ausgeführt werden soll. Dies wird durch den Zeitabstand der Wiederholungen<br />

(m = minütlich, h = stündlich, d = täglich) <strong>und</strong> einem Multiplikator für<br />

den Zeitabstand angegeben. So bedeutet die Angabe von ’d3’ z.B. ’alle drei<br />

Tage’:<br />

xmltv_period=d3<br />

• Zur Verwendung des Nxtvepg-Plugins muss diesem der Provider mitgeteilt<br />

werden, der Informationen bereitstellt. Dies geschieht durch Angabe des entsprechenden<br />

Hexadezimal-Wertes:<br />

nxtvepg_provider=0d92<br />

Des Weiteren muss der Pfad angegeben werden, unter dem nxtvepg die<br />

gesammelten Daten ablegt:<br />

nxtvepg_dbdir=<br />

Zudem kann festgelegt werden, in welchem Intervall ein erneutes Sammeln<br />

ausgeführt werden soll:<br />

nxtvepg_period=d3<br />

• Das DVBEPG-Plugin verwendet zur Feststellung der verfügbaren Kanäle<br />

die globale Kanalliste, die in Abschnitt 5.2.1 vorgestellt wurde. Hier kann<br />

eine alternative Kanalliste zur Festlegung von TV-Karten angegeben werden,<br />

die ausschließlich für den EPG verwendet werden sollen:<br />

dvbepgChannelFile=<br />

/home//.nmm/tv_channels_dvbepg.xml<br />

Sie wird durch Verwendung des channelReader durch folgenden Aufruf<br />

erstellt:<br />

channelReader \<br />

-f /home//.nmm/tv\_channels\_dvbepg.xml<br />

A.2 Konfiguration des Videorekorders<br />

• Die folgende Variable dient der Angabe des Verzeichnisses, in welchem die<br />

Aufnahmen gespeichert werden sollen, ausgehend von dem Pfad, der in der<br />

rootpath-Variable der .mmboxrc festgelegt wurde:


tvdestinationdirectory=TV-Recordings<br />

A.3. KONFIGURATION VON LIVE TV<br />

• Soll eine Verbindung zu einem Videorekorder hergestellt werden, der im<br />

Netzwerk als zentraler Server (siehe Abschnitt 5.2.2) verfügbar ist, kann dies<br />

hier angegeben werden:<br />

tvtimerlocation=:<br />

• Der Videorekorder verwendet die globale Kanalliste zur Bestimmung der<br />

verfügbaren Kanäle. Soll eine alternative Kanalliste verwendet werden um<br />

TV-Karten festzulegen, die ausschließlich vom Videorekorder verwendet werden<br />

sollen, kann diese hier spezifiziert werden. Diese Variable wird nur berücksichtigt,<br />

wenn der Videorekoder lokal in der Multimedia-Box läuft.<br />

recorderChannelFile=<br />

/home//.nmm/tv_channels_rec.xml<br />

Sie wird durch Verwendung des channelReader durch folgenden Aufruf<br />

erstellt:<br />

channelReader \<br />

-f /home//.nmm/tv\_channels\_rec.xml<br />

• Die folgende Variable legt fest, ob in der GUI des TVTimer-Zustandes einprogrammierte<br />

Aufnahmen angezeigt werden sollen:<br />

displaySleeping=1<br />

• Die folgende Variable legt fest, ob in der GUI des TVTimer-Zustandes laufende<br />

Aufnahmen angezeigt werden sollen:<br />

displayRecording=1<br />

• Die folgende Variable legt fest, ob in der GUI des TVTimer-Zustandes aufgezeichnete<br />

Sendungen angezeigt werden sollen:<br />

displayRecorded=1<br />

A.3 Konfiguration von Live TV<br />

Die folgenden Variablen legen die zu verwendenden TV-Quellen fest. Sie werden<br />

von dem Tool channelReader ausgewertet, das, basierend auf diesen Informationen,<br />

die globale Kanalliste erstellt.<br />

• Angabe der Anzahl der zu verwendenden TV-Quellen:<br />

tvhosts_number=0<br />

153


ANHANG A. Neue Konfigurations-Variablen in der Multimedia-Box<br />

154<br />

• Anschließend werden die einzelnen TV-Quellen durch Angabe der GraphURL<br />

festgelegt. Diese sind von 0 bis tvhosts_number-1 durchnummeriert.<br />

Angabe einer DVB-Karte:<br />

tvhost_x=dvbtv:///?=...<br />

Angabe einer IVTV-Karte:<br />

tvhost_x=ivtv:///?=...<br />

• Der LiveTV-Zustand greift zur Feststellung verfügbarer Kanäle auf die globale<br />

Kanalliste zu. Soll eine alternative Kanalliste verwendet werden um<br />

TV-Karten festzulegen, die ausschließlich von Live TV verwendet werden<br />

sollen, kann diese hier angegeben werden:<br />

tvChannelFile=/home//.nmm/tv_channels_live.xml<br />

Sie wird durch Verwendung des channelReader durch folgenden Aufruf<br />

erstellt:<br />

channelReader \<br />

-f /home//.nmm/tv\_channels\_live.xml


Anhang B<br />

Konfigurations-Dateien<br />

Hier wird ein Überblick über die in dieser Arbeit vorgestellten Konfigurations-<br />

Dateien gegeben. Dies beinhaltet die Default-Konfigurations-Dateien der EPG-<br />

Plugins, die Datei zur Angabe von Aliasen für Sendernamen <strong>und</strong> die globale Kanalliste.<br />

Alle diese Dateien dürfen vom Benutzer editiert werden.<br />

B.1 Default-Konfigurations-Dateien für EPG-Plugins<br />

Die Default-Konfigurations-Dateien der EPG-Plugins befinden sich in dem Verzeichnis<br />

resources von <strong>NMM</strong> im Unterverzeichnis tvguide.<br />

Die Datei XMLTVPlugin.conf enthält Default-Konfigurationen für das XML-<br />

TV-Plugin des EPG.<br />

<br />

<br />

<br />

<br />

tv_grab_de_tvtoday<br />

tv_grab_fi<br />

<br />

Die Datei NxtvepgPlugin.conf enhält Default-Konfigurationen für das Nxtvepg-Plugin<br />

des EPG.<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

155


ANHANG B. Konfigurations-Dateien<br />

156<br />

B.2 Datei zur Angabe von Aliasen für Sendernamen<br />

Die Datei channelAliases.xml befindet sich im resources-Verzeichnis<br />

von <strong>NMM</strong> im Unterverzeichnis tvguide <strong>und</strong> enthält Aliase für Sendernamen.<br />

<br />

<br />

Pro 7<br />

PRO 7<br />

Pro sieben<br />

Pro-7<br />

<br />

<br />

KiKa<br />

KinderKanal<br />

<br />

<br />

HESSEN<br />

Hessen-3<br />

<br />

...<br />

<br />

B.3 Videorekorder <strong>und</strong> Live TV<br />

Zur Feststellung der verwendbaren TV-Kanäle greifen der Videorekorder <strong>und</strong> Live<br />

TV auf die globale Kanalliste zu, die in dem $HOME-Verzeichnis des Benutzers im<br />

Unterverzeichnis .nmm standardmäßig unter dem Namen tv_channels.xml<br />

gespeichert wird. Sie wird von dem Programm channelReader durch Auswerten<br />

der in der Datei .mmboxrc festgelegten TV-Quellen erstellt.<br />

<br />

<br />

dvbtv://localhost<br />

\<br />

ivtv://host?freqtable=pal-europe&amp;input=4\<br />

<br />

<br />

<br />

dvbtv://localhost<br />

\<br />

ivtv://host?freqtable=pal-europe&amp;input=4\<br />

<br />

<br />

<br />

dvbtv://localhost<br />

<br />

...<br />


Abbildungsverzeichnis<br />

2.1 Videotext von ARD . . . . . . . . . . . . . . . . . . . . . . . . . 11<br />

2.2 Der TV Guide des Gr<strong>und</strong>ig Sydney SE7240 . . . . . . . . . . . . 11<br />

2.3 InterVideo MSIPVS . . . . . . . . . . . . . . . . . . . . . . . . . 12<br />

2.4 Konfliktauflösung der MS MCE . . . . . . . . . . . . . . . . . . 13<br />

2.5 Der EPG der Microsoft Windows Media Center Edition . . . . . . 14<br />

2.6 Videorekorder GUI bei MS MCE . . . . . . . . . . . . . . . . . . 14<br />

2.7 Der EPG von SageTV2 . . . . . . . . . . . . . . . . . . . . . . . 15<br />

2.8 xawtv mit nxtvepg . . . . . . . . . . . . . . . . . . . . . . . . . 17<br />

2.9 Hauptmenu von WebVCR+ . . . . . . . . . . . . . . . . . . . . . 18<br />

2.10 Der EPG während Live TV bei VDR . . . . . . . . . . . . . . . . 19<br />

2.11 Der EPG von VDR . . . . . . . . . . . . . . . . . . . . . . . . . 20<br />

2.12 Der Videorekorder von VDR . . . . . . . . . . . . . . . . . . . . 20<br />

2.13 Der EPG von freevo . . . . . . . . . . . . . . . . . . . . . . . . . 22<br />

2.14 MythTV - EPG <strong>und</strong> Live TV . . . . . . . . . . . . . . . . . . . . 23<br />

2.15 Konfliktauflösung bei MythTV . . . . . . . . . . . . . . . . . . . 23<br />

3.1 Verteilter Flussgraph . . . . . . . . . . . . . . . . . . . . . . . . 29<br />

3.2 Verteilter Flussgraph . . . . . . . . . . . . . . . . . . . . . . . . 30<br />

3.3 <strong>NMM</strong> Session-Sharing . . . . . . . . . . . . . . . . . . . . . . . 33<br />

3.4 Die Multimedia-Box . . . . . . . . . . . . . . . . . . . . . . . . 34<br />

3.5 Architektur der MMBox-Anwendung . . . . . . . . . . . . . . . 36<br />

3.6 MMBox-Anwendung mit mehreren aktiven Zuständen . . . . . . 37<br />

4.1 Zentraler EPG im Netzwerk . . . . . . . . . . . . . . . . . . . . 40<br />

4.2 Verteilter EPG im Netzwerk . . . . . . . . . . . . . . . . . . . . 42<br />

4.3 Die Klasse TVGuide . . . . . . . . . . . . . . . . . . . . . . . . 43<br />

4.4 Zusammenhang der Klassen des EPG . . . . . . . . . . . . . . . 44<br />

4.5 Die Klasse TVGuidePluginManager . . . . . . . . . . . . . 46<br />

4.6 Laden <strong>eines</strong> TVGuidePlugins <strong>und</strong> Anfordern <strong>eines</strong> Interface . . . 47<br />

4.7 Die Klasse TVGuidePlugin . . . . . . . . . . . . . . . . . . . 47<br />

4.8 Die Zustände <strong>eines</strong> TVGuidePlugins . . . . . . . . . . . . . . 48<br />

4.9 Die Klasse ChannelDescription . . . . . . . . . . . . . . . 50<br />

4.10 Die Klasse ProgramDescription . . . . . . . . . . . . . . . 51<br />

4.11 Die Klasse LocalTime . . . . . . . . . . . . . . . . . . . . . . 52<br />

4.12 Die Klasse XMLTVPlugin . . . . . . . . . . . . . . . . . . . . 54<br />

4.13 Die Klasse Fork . . . . . . . . . . . . . . . . . . . . . . . . . . 56<br />

4.14 Die Klasse NxtvepgPlugin . . . . . . . . . . . . . . . . . . . 62<br />

4.15 Die Klasse DVBEPGPlugin . . . . . . . . . . . . . . . . . . . . 63<br />

4.16 Graph zum Sammeln von EPG-Informationen von DVB . . . . . 63<br />

157


ABBILDUNGSVERZEICHNIS<br />

158<br />

4.17 Die Klasse DVBReadNodeTVGuideManager . . . . . . . . . 64<br />

4.18 Vergleich libxml2 - Xerces-c . . . . . . . . . . . . . . . . . . . . 66<br />

4.19 Die Klasse TVGuideDataManagement . . . . . . . . . . . . 67<br />

4.20 Die Verzeichnisstruktur des EPG . . . . . . . . . . . . . . . . . . 67<br />

4.21 Abfragen von EPG-Informationen . . . . . . . . . . . . . . . . . 72<br />

4.22 Die Klasse ProgramFilter . . . . . . . . . . . . . . . . . . . 73<br />

4.23 Ein Peer-to-Peer-Szenario des EPG . . . . . . . . . . . . . . . . . 76<br />

4.24 Eine Lücke in EPG-Daten . . . . . . . . . . . . . . . . . . . . . 77<br />

4.25 Schleife im Peer-to-Peer-Szenario des EPG . . . . . . . . . . . . 78<br />

4.26 Die Klasse TVGuidePeerConnector . . . . . . . . . . . . . 79<br />

4.27 Stellen einer verteilten Anfrage . . . . . . . . . . . . . . . . . . . 80<br />

4.28 Die Klassendiagramme der Handler-Klassen des EPG . . . . . . . 81<br />

4.29 Die Klasse TVGuidePeerHandlerFactory . . . . . . . . . 82<br />

4.30 Anfragen <strong>eines</strong> Handlers bei der Factory . . . . . . . . . . . . . . 83<br />

4.31 Interfaces zur Peer-to-Peer-Funktionalität . . . . . . . . . . . . . 83<br />

4.32 Verteilung einer Anfrage im Netzwerk . . . . . . . . . . . . . . . 84<br />

4.33 GUI des TVGuide-Zustandes . . . . . . . . . . . . . . . . . . . . 86<br />

4.34 Anzeige von Aufnamhen im TVGuide-Zustand . . . . . . . . . . 87<br />

4.35 Die Klasse TableUnit . . . . . . . . . . . . . . . . . . . . . . 88<br />

4.36 GUI des Search-Zustandes . . . . . . . . . . . . . . . . . . . . . 91<br />

4.37 Ergebnisanzeige des Search-Zustandes . . . . . . . . . . . . . . . 92<br />

4.38 Die Klasse TextInput . . . . . . . . . . . . . . . . . . . . . . 93<br />

4.39 GUI des LiveTV-Zustandes . . . . . . . . . . . . . . . . . . . . . 95<br />

4.40 Übersicht aller aktuell laufenden Sendungen . . . . . . . . . . . . 96<br />

5.1 Szenario <strong>Mehrbenutzer</strong>-TV . . . . . . . . . . . . . . . . . . . . . 100<br />

5.2 Zugriff einer Anwendung auf mehrere TV-Karten . . . . . . . . . 102<br />

5.3 Die Klassen TVChannel <strong>und</strong> TVChannelList . . . . . . . . 103<br />

5.4 Das Interface IChannelInfo . . . . . . . . . . . . . . . . . . 106<br />

5.5 Videorekorder im Netzwerk . . . . . . . . . . . . . . . . . . . . 107<br />

5.6 Die Klassen des Videorekorder . . . . . . . . . . . . . . . . . . . 108<br />

5.7 Die Klasse TVTimerControl . . . . . . . . . . . . . . . . . . 109<br />

5.8 Die Klasse TVTimerEntry . . . . . . . . . . . . . . . . . . . . 110<br />

5.9 Zustände der Klasse TVTimerEntry . . . . . . . . . . . . . . . 111<br />

5.10 Die Klasse TVTimerList . . . . . . . . . . . . . . . . . . . . 113<br />

5.11 Programmieren einer Aufnahme . . . . . . . . . . . . . . . . . . 114<br />

5.12 Die Klasse TVTimerScheduler . . . . . . . . . . . . . . . . 114<br />

5.13 Die Klasse TVTimerConflictChecker . . . . . . . . . . . . 115<br />

5.14 Konflikte zwischen Aufnahmen . . . . . . . . . . . . . . . . . . . 116<br />

5.15 Die Klasse TVRecorderManager . . . . . . . . . . . . . . . . 117<br />

5.16 Starten einer Aufnahme . . . . . . . . . . . . . . . . . . . . . . . 118<br />

5.17 Die Klasse TVRecorder . . . . . . . . . . . . . . . . . . . . . 118<br />

5.18 Flussgraph zur Aufnahme einer Sendung . . . . . . . . . . . . . . 119<br />

5.19 Reaktion des Videorekorders bei nicht-vorhandener TV-Karte . . . 120<br />

5.20 Löschen einer Aufnahme . . . . . . . . . . . . . . . . . . . . . . 122<br />

5.21 Zusammenspiel Live TV - EPG . . . . . . . . . . . . . . . . . . . 125<br />

5.22 Zusammenspiel Live TV - Live TV . . . . . . . . . . . . . . . . . 126<br />

5.23 Zusammenspiel LiveTV - Videorekorder . . . . . . . . . . . . . . 127


ABBILDUNGSVERZEICHNIS<br />

5.24 Zugriff mehrerer Anwendung auf mehrere TV-Karten . . . . . . . 128<br />

5.25 Die Usage-Klasse . . . . . . . . . . . . . . . . . . . . . . . . . 131<br />

5.26 Die Klasse TVManager . . . . . . . . . . . . . . . . . . . . . . 134<br />

5.27 Bestimmen einer verwendbaren TV-Karte . . . . . . . . . . . . . 135<br />

5.28 GUI des TVTimer-Zustandes . . . . . . . . . . . . . . . . . . . . 138<br />

5.29 Aufnahme-Wiederholungen basierend auf EPG-Informationen . . 139<br />

5.30 GUI des LiveTV-Zustandes . . . . . . . . . . . . . . . . . . . . . 141<br />

5.31 LiveTV-Graph der MMBox . . . . . . . . . . . . . . . . . . . . . 142<br />

5.32 Meldung über Kartenwechsel . . . . . . . . . . . . . . . . . . . . 143<br />

159


ABBILDUNGSVERZEICHNIS<br />

160


Literaturverzeichnis<br />

[Apa] Apache XML Project. Xerces-C++. http://xml.apache.org/xerces-c.<br />

[ASTa] SES ASTRA. Empfang von ASTRA - Digitale Satellitenprogramme<br />

von ASTRA. http://www.ses-astra.com/market/deutschland/<br />

receiving/digital.<br />

[ASTb] SES ASTRA. Homepage. http://www.ses-astra.com.<br />

[Avo] Bram Avontuur. vcr - A video capture program for Linux.<br />

http://www.stack.nl/~brama/vcr.<br />

[BBE + 00] H. Baldus, M. Baumeister, H. Eggenhuisen, A. Montvay, and W. Stut.<br />

WWICE - An architecture for In-Home Digital Networks. In<br />

Proceedings of Multimedia Computing and Networking (MMCN), 2000.<br />

[BCE + 02] Patrick Becker, Patrick Cernko, Wolfgang Enderlein, Marc Klein, and<br />

Markus Sand. The Multimedia-Box - <strong>Design</strong> and Development of a<br />

Multimedia Home Entertainment System for Linux, 2002.<br />

Fortgeschrittenen Praktikum, Universität des Saarlandes.<br />

[Ber72] Lexikon-Institut Bertelsmann, editor. Das moderne Lexikon.<br />

Verlagsgruppe Bertelsmann GmbH/Bertelsmann Lexikon-Verlag, 1972.<br />

Band 9.<br />

[Bon03] Sabina Bonnici. A <strong>Design</strong> Model for Electronic Programme Guides. In<br />

Proceedings of the 1st European Conference on Interactive Television:<br />

from Viewers to Actors?, pages 49–57, 2003.<br />

[Bou] Ronald Bourret. XML and Databases.<br />

http://www.rpbourret.com/xml/XMLAndDatabases.htm.<br />

[Cla99] James Clark. XSL Transformations (XSLT), 1999.<br />

http://www.w3.org/TR/xslt.<br />

[Cli01] Clip2. The Gnutella Protocol Specification v0.4, März 2001.<br />

[Deu] Deutsche TV-Plattform e.V. Das ÜberallFernsehen.<br />

http://www.ueberall-tv.de/.<br />

[Did02] Stephan Didas. Synchronization in the Network-Integrated Multimedia<br />

Middleware (<strong>NMM</strong>), 2002. Fortgeschrittenen Praktikum, Universität<br />

des Saarlandes.<br />

161


LITERATURVERZEICHNIS<br />

162<br />

[ETS97a] ETSI. A guideline for the use of DVB specifications and standards.<br />

Technical report, European Telecommunication Standards Institute,<br />

1997.<br />

[ETS97b] ETSI. Electronic Programme Guide (EPG); Protocol for a TV Guide<br />

using electronic data transmission, 1997.<br />

[ETS97c] ETSI. Enhanced Teletext specification, 1997.<br />

[ETS03] ETSI. Digital Video Broadcasting (DVB): Multimedia Home Platform<br />

(MHP) Specification 1.1.1, 2003.<br />

[ETS04a] ETSI. Digital Video Broadcasting (DVB); Guidelines of<br />

implementation and usage of Service Information (SI), 2004.<br />

[ETS04b] ETSI. Digital Video Broadcasting (DVB); Specification for Service<br />

Information (SI) in DVB Systems, 2004.<br />

[Fre] Frey Technologies LCC. SageTV. http://www.sage.tv.<br />

[fRG99] Institut für R<strong>und</strong>funktechnik GmbH. CustomTV, 1999.<br />

http://www.irt.de/customtv/.<br />

[Fri03] Jeffrey E. F. Friedl. Reguläre Ausdrücke. O’Reilly, 2003.<br />

[GHJV95] Erich Gamma, Richard Helm, Raplh E. Johnson, and John Vlissides.<br />

<strong>Design</strong> Patterns : elements of reusable object-oriented software.<br />

Addison-Wesley, 1995.<br />

[Hal97] Brian Hall. Beej’s Guide to Unix Interprocess Communication, 1997.<br />

http://www.ecst.csuchico.edu/~beej/guide/ipc/.<br />

[Har02] Ian Harries. Distributed Video Recorder and Player, 2002.<br />

http://www.doc.ic.ac.uk/~ih/teaching/dvcr/.<br />

[Hau] Hauppauge Computer Works. WinTV-PVR-350.<br />

http://www.hauppauge.com/pages/products/data_pvr350.html.<br />

[Ins] European Telecommunication Standards Institute. Homepage.<br />

http://www.etsi.org.<br />

[ISO04] ISO/IEC. MPEG-2, Offizieller Titel: 13818-1 bis 11: Information<br />

Technology – Generic coding of movingpictures and associated audio<br />

information – Part 1 to 11, 1994 bis 2004.<br />

[ITW] ITWissen.info. Bibliothek - Definition: ITWissen.info - IT Lexikon.<br />

http://www.itwissen.info/?ano=01-005774&id=31.<br />

[Kaba] Kabel Deutschland. Homepage.<br />

http://www.kabeldeutschland.de/index.php.<br />

[Kabb] Kabel Deutschland. Service. http://www.kabeldeutschland.de/service/<br />

haeufiggestelltefragen/kabelanschluss.html.


[Kle03] Marc Klein. <strong>Design</strong> and Development of a Multimedia<br />

Home-Entertainment System, 2003. Diplomarbeit, Universität des<br />

Saarlandes.<br />

[Knoa] Gerd Knorr. bttv. http://www.bytesex.org/v4l2/bttv.html.<br />

[Knob] Gerd Knorr. xawtv. http://www.bytesex.org/xawtv.<br />

[Koo] Andreas Kool. vdr-analogTV.<br />

http://www.akool.homepage.t-online.de/analogtv/index.html.<br />

[Lag] Krister Lagerström. Freevo. http:://freevo.sourceforge.net.<br />

[Lev] Chuck Lever. Linux NFS faq. http://nfs.sourceforge.net/.<br />

[lib] libXML2. libXML2 - The XML C parser and toolkit of Gnome.<br />

http://www.xmlsoft.org/.<br />

[LLC02] McObject LLC. Data Management in Set-Top Box Electronic<br />

Programming Guides, 2002.<br />

[Loh03] Marco Lohse. The <strong>NMM</strong> Interface Definition Language, April 2003.<br />

http://www.networkmultimedia.org/Docs/.<br />

[Loh05] Marco Lohse. Network-Integrated Multimedia Middleware, Services,<br />

and Applications. PhD thesis, Lehrstuhl für Computergrafik,<br />

Universtität des Saarlandes, Juni 2005.<br />

LITERATURVERZEICHNIS<br />

[LRS02] Marco Lohse, Michael Repplinger, and Philipp Slusallek. An Open<br />

Middleware Architecture for Network-Integrated Multimedia. In<br />

Protocols and Systems for Interactive Distributed Multimedia Systems,<br />

Joint International Workshops on Interactive Distributed Multimedia<br />

Systems and Protocols for Multimedia Systems, IDMS/PROMS 2002,<br />

Proceedings, volume 2515 of Lecture Notes in Computer Science, pages<br />

327–338. Springer, 2002.<br />

[LRS03] Marco Lohse, Michael Repplinger, and Philipp Slusallek. Session<br />

Sharing as Middleware Service for Distributed Multimedia<br />

Applications. In Interactive Multimedia on Next Generation Networks,<br />

Proceedings of First International Workshop on Multimedia Interactive<br />

Protocols and Systems, MIPS 2003, volume 2899 of Lecture Notes in<br />

Computer Science, pages 258–269. Springer, 2003.<br />

[LRS05] Marco Lohse, Michael Repplinger, and Philipp Slusallek. Dynamic<br />

Media Routing in Multi-User Home Entertainment Systems. In<br />

Proceedings of The Eleventh International Conference on Distributed<br />

Multimedia Systems (DMS), pages 271–276. Knowledge Systems<br />

Institute, 2005.<br />

[LS02] Marco Lohse and Philipp Slusallek. An Open Platform for Multimedia<br />

Entertainment Systems. In EUROPRIX Scholars Conference at<br />

MindTrek Media Week, 2002.<br />

163


LITERATURVERZEICHNIS<br />

164<br />

[LS03] Marco Lohse and Philipp Slusallek. Middleware Support for Seamless<br />

Multimedia Home Entertainment for Mobile Users and Heterogeneous<br />

Environments. In Proceedings of The 7th IASTED International<br />

Conference on Internet and Multimedia Systems and Applications<br />

(IMSA), pages 217–222. ACTA Press, 2003.<br />

[LSW01] Marco Lohse, Philipp Slusallek, and Patrick Wambach. Extended<br />

Format Definition and Quality-driven Format Negotiation in<br />

Multimedia Systems. In Multimedia 2001 – Proceedings of the<br />

Eurographics Workshop, pages 65–74. Springer, 2001.<br />

[man01] ctime manpage, Dezember 2001.<br />

[Mica] Microsoft Corporation. Microsoft Media Center Extender.<br />

http://www.microsoft.com/windowsxp/mediacenter/<br />

extender/default.mspx.<br />

[Micb] Microsoft Corporation. Microsoft Windows XP Media Center Edition<br />

2005. http://www.microsoft.com/germany/windowsxp/<br />

mediacenter/default.mspx.<br />

[MPl] MPlayer. http://www.mplayerhq.hu.<br />

[MSIC] Ltd Micro-Star Int’l Co. VOX USB2.0 TV Box.<br />

http://www.msi.com.tw/program/products/multimedia/<br />

mut/pro_mut_detail.php?UID=536.<br />

[MyS] MySQL AB. MySQL AB :: The World’s Most Popular Open Source<br />

Database. http://www.mysql.com/.<br />

[<strong>NMM</strong>] <strong>NMM</strong> work group. Network-Integrated Multimedia Middleware<br />

(<strong>NMM</strong>). http://www.networkmultimedia.org.<br />

[Per] Perl.com. http://www.perl.com.<br />

[Qui05] Liam Quin. Extensible Markup Language (XML), 2005.<br />

http://www.w3.org/XML/.<br />

[Rep03] Michael Repplinger. An Architecture for the Integration and Control of<br />

Distributed Multimedia Devices, 2003. Diplomarbeit, Universität des<br />

Saarlandes.<br />

[Ric] Isaac Richards. MythTV. http://www.mythtv.org.<br />

[RL04] Michael Repplinger and Marco Lohse. Clic - An Application for<br />

Setting up <strong>NMM</strong> Multimedia Flow Graphs, Juli 2004.<br />

http://www.networkmultimedia.org/Docs.<br />

[Sch] Klaus Schmiedinger. Video Disc Recorder.<br />

http:://www.cadsoft.de/vdr.<br />

[SGI] SGI. Standard Template Library Programmer’s Guide.<br />

http://www.sgi.com/tech/stl.


[SM00] Richard Stones and Neil Mathew. Linux Programmierung. MITP<br />

Verlag, 2000.<br />

[STO02] STORit consortium. STORit Home page, 2002.<br />

http://www.extra.research.philips.com/euprojects/storit/.<br />

[Str98] Bjarne Stroustrup. The C++-programming language.<br />

Addison-Wesley-Longman, 1998.<br />

[Sun] Sun Microsystems. Java Technology. http://java.sun.com.<br />

LITERATURVERZEICHNIS<br />

[TBL96] H. Frystyk T. Berners-Lee, R. Fielding. RFC 1945 - Hypertext Transfer<br />

Protocol – HTTP/1.0. Technical report, MIT/LCS, May 1996.<br />

[Thu] Paul Thurrott. Paul Thurrott’s SuperSite for Windows.<br />

http://www.winsupersite.com/.<br />

[TVA] TVAnytime Forum. http://www.tv-anytime.org/.<br />

[TVTa] TVToday. http://www.tvtoday.de.<br />

[tvtb] tvtv.de. http://www.tvtv.de.<br />

[UMT] UMTS Forum : Home. http://www.umts-forum.org/.<br />

[Vix93] Paul Vixie. cron manpage, Dezember 1993.<br />

[Vol] Sascha Volkenandt. Video Disk Recorder Extensions and Scripts:<br />

Client/Server Streaming.<br />

www.magoa.net/linux/index.php?view=streamdev-stable.<br />

[Wam01] Patrick Wambach. Formatdefinition <strong>und</strong> Formatverhandlung von<br />

Multimedia-Geräten, 2001. Diplomarbeit, Universität des Saarlandes.<br />

[Web] WebVCR+. http:://webvcrplus.sourceforge.net.<br />

[Wel05] Christoph Wellner. Setting up LiveTV, TVGuide and TVTimer of the<br />

<strong>NMM</strong> Multimedia-Box, August 2005.<br />

http://www.networkmultimedia.org/Docs/.<br />

[Wie] Christian Wieninger. VDR-EPG-Search.<br />

http://people.freenet.de/cwieninger/html/vdr-epg-search.html.<br />

[Wika] Wikipedia. Digitales Fernsehen.<br />

http://de.wikipedia.org/wiki/Digitales_Fernsehen.<br />

[Wikb] Wikipedia. Elektonische Programmzeitschrift.<br />

http://de.wikipedia.org/wiki/EPG.<br />

[Wikc] Wikipedia. Fernsehen. http://de.wikipedia.org/wiki/Fernsehen.<br />

[Wikd] Wikipedia. Hamming-Code.<br />

http://de.wikipedia.org/wiki/Hamming_code.<br />

[Wike] Wikipedia. Koordinierte Weltzeit.<br />

http://de.wikipedia.org/wiki/Koordinierte_Weltzeit.<br />

165


LITERATURVERZEICHNIS<br />

166<br />

[Wikf] Wikipedia. Peer-to-Peer. http://de.wikipedia.org/wiki/Peer-to-Peer.<br />

[Wikg] Wikipedia. Sommerzeit. http://de.wikipedia.org/wiki/MESZ.<br />

[Wikh] Wikipedia. Zeitzone. http://de.wikipedia.org/wiki/Zeitzone.<br />

[XML] XMLTV. http://membled.com/work/apps/xmltv/.<br />

[Zoe] Th. Zoerner. nexTView EPG Decoder Software.<br />

http://nxtvepg.sourceforge.net.<br />

[Zot05] Volker Zota. Multimedial Vereint. c’t - Magazin für Computertechnik,<br />

1, 2005.

Hurra! Ihre Datei wurde hochgeladen und ist bereit für die Veröffentlichung.

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!