Design und Implementierung eines Mehrbenutzer- Szenarios ... - NMM
Design und Implementierung eines Mehrbenutzer- Szenarios ... - NMM
Design und Implementierung eines Mehrbenutzer- Szenarios ... - NMM
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&input=4\<br />
<br />
<br />
<br />
dvbtv://localhost<br />
\<br />
ivtv://host?freqtable=pal-europe&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.