diff options
-rw-r--r-- | projekt_doku.asciidoc | 127 | ||||
-rw-r--r-- | thesis.sty | 2 |
2 files changed, 89 insertions, 40 deletions
diff --git a/projekt_doku.asciidoc b/projekt_doku.asciidoc index 2ecafa7..7106d44 100644 --- a/projekt_doku.asciidoc +++ b/projekt_doku.asciidoc @@ -5,6 +5,14 @@ Philips TV-Remote unter Linux :imagesdir: image // a2x: --dblatex-opts="-p thesis.xsl -s thesis.sty -b xetex" +[abstract] +== Aufgabe +Ziel dieses Forschungsprojektes ist die Programmtechnische Umsetzung +der Nutzung der Philips TV-Firmware als Netzwerkbasierter-Infoscreen. +Als Platform ist dabei GNU/Linux zu verwenden und Lösungsmögliuchkeiten für +die Probleme der aktuellen Konfiguration mit dem Windows Client Pluggit +sind zu evaluieren. + == Grundlagen *DirectFB* @@ -39,7 +47,7 @@ Das API zur Steuerung der Fernseher basiert auf einem REST-full HTTP-Protokoll. Für die Bildübertragung wird 'DirectFB Voodoo' eingesetzt. -== Vorhergehensweise für die Implementation +== Problemlösung & Implementation Im ersten Schritt ist eine eins-zu-eins Umsetzung der Anzeige einen Linux-Screens auf einen Fernseher zu implementieren. @@ -49,8 +57,21 @@ gesandt werden. In diesem Fall 3 Clients. .Client-Server Interaktion image::directfb-voodoo-js.eps[] +=== Pluggit + +Als Basis für die Programmtechnische Umsetzung dient der Bestehende +Windows-Client Pluggit, sodass die bereits ausgetestete Remote-Rendering +Infrastruktur wiederverwendet werden kann. + +Pluggit wurde so verändert, dass es X11-Protokoll anstatt der WinAPI verwendet +wird, um den Inhalt eines Fensters oder des ganzen Framebuffers anzuzeigen. + +Dazu ist eine 'SourceX11' Klasse notwendig, die das in Pluggit enthaltene +Interface 'Source' implementiert. -=== Verbindungsaufbau +// TODO: Graph? + +==== Verbindungsaufbau Die DirectFB-Voodoo Platform nutzt als Standardmethode zum Verbindungsaufbau einen Broadcast Request, um verfügbare Anzeigegeräte zu finden. @@ -69,6 +90,7 @@ im folgenden beispielhaft dargestellt: [source,c] ---- #include <directfb.h> + int main(int argc, char *argv[]) { @@ -77,7 +99,7 @@ main(int argc, char *argv[]) } ---- -=== Verbindungsabbruch +==== Verbindungsabbruch Bricht die Verbindung ab -- z.B. durch Ausschalten des Fernsehers oder durch Auswählen einer anderen Quelle -- wird dies durch die DirectFB Bibliothek nicht an die Anwendung signalisiert. @@ -99,22 +121,73 @@ Pluggit-Prozesses und startet diesen neu. //== Webbrowser-Rendering +=== Framebuffer Größenlimit +Bei der Verwendung von 'Pluggit' unter Windows besteht das Problem, dass eine +Maxmimale Auflösung von +1280x720+ Pixeln genutzt werden kann. +Dieses Limit ist kein Fehler im Programm oder eine Einschränkung des +Betriebsssystems, sondern das API erlaubt keine größe Auflösung. +Bei Verwendung von z.b. einer +1920x1080+ Auflösung -- bei einem Fernseher, +der diese Auflösung per HDMI unterstützt -- signalisiert das API +einen Fehler, dass ein invalides Argument übergeben wurde. + + === Framebuffer Auslesen Das X11-Protokoll bietet die Möglichkeit den angezeigten Framebuffer über die Funtkion +X_GetImage+ auszulesen. -==== Mehrere Clients --> Fenster + + +=== Multi-Client + +Teil der Anforderung ist, mehrere Fernseher gleichzeitig mit unterschiedlichen +Bildern zu beliefern. + Um mehrere Fenster darzustellen, wird ein großer Anzeigebreich benötigt. Mit 'XRandR' wird dies durch folgenden Aufruf erreicht: [source,sh] ---- -xrandr --fb $((1280*3)x720 +xrandr --fb $((1280*3+10))x768 ---- .X11-Fenster Konfiguration image::framebuffer.svg[] +=== Browser + +Die Anzeige des Infoscreens erfolgt über eine HTML-Website, die auch +Multimediainhalte enthält. +Aus diesem Grund ist es nötig, dass das HTML von einem Web-Browser gerendert +wird. + +In Betracht kommt auf Grund der Bekanntheit und Stabilität der +Firefox-Browser. +Dieser kann nur im Vollbild-Modus so konfiguriert werden, dass nur der Inhalt +im X11-Fenster -- welches ausgelesen werden soll -- angezeigt wird, Menus und +Scrollbars sind im normalen Floating-Modus immer vorhanden. +Ein weiteres Problem stellt die eindeutige Addressierung der Window-ID, bei +Verwänderung mehrerer Firefox-Fenster. +Es gibt keine direkte Möglichkeit die Window-ID zu erhalten, nur über Matching +des Titels des Firefox-Fensters. +Die Verwendung für mehrere Infoscreens würde es nötig machen den Titel des +Angezeiten Inhalts zu wissen, und in der Programmlogik zu berücksichtigen. +Eine Veränderung des Inhalts würde damit auch eine Anpassung des Programms +erfordern. + +Deshalb wird ein Web-Browser benötigt, der es ermöglicht nur den Inhalt der +Website im X11-Fenster darzustellen. +Der Browser 'Surf' footnote:[http://surf.suckless.org] von 'suckless.org' ist +mit dem Prinzip erstellt worden, in andere Programme über das X11-XEmbed +Protokoll eingebettet zu werden, z.b. um mehrere Instanzen in einem +Tab-Manager zu embedden. + +Dies ermöglicht per Design zwei Punkte: + - Die Window-ID wird auf stdout ausgegeben (wird als Parameter an Pluggit + übergeben) + - Keine Bedienelemente vorhanden, denn der Browser wird über X11-Properties + gesteuert -- das macht ihn scriptable. + + == Test Getestet wurde jeweils mit der Infoscreen-Website @@ -122,8 +195,12 @@ footnote:[http://et.hs-wismar.de/~infosc/index.php?file=config16n] des Fachbereichs EuI: Da während der Entwicklung nicht dauerhaft Philips-Fernseher zur Verfügung -standen, wurde der durch das 'JointSpace'-Projekt als Virtuelle Maschine -bereitgestellte Simulator mit QEMU verwendet. +standen, wurde der durch das 'JointSpace'-Projekt als VMWare-Virtuelle +Maschine bereitgestellte Simulator mit QEMU verwendet. + + +Das Anzeigen des Browser-Inhaltes und die korrekte Wiedergabe des Videos +entscheiden über das Bestehen des Tests. == HowTo @@ -142,7 +219,8 @@ emerge -va wmctrl surf === DirectFB -Für diese Arbeit wurde die zum Zeitpunkt der Bearbeitung neuste verwendet: +Für diese Arbeit wurde die, zum Zeitpunkt der Bearbeitung, neuste Version von +'DirectFB' verwendet: DirectFB141_source_1.3.1beta5.7z footnote:[http://sourceforge.net/projects/jointspace/files/remote_applications_SDK/] @@ -151,11 +229,8 @@ footnote:[http://sourceforge.net/projects/jointspace/files/remote_applications_S 7z x DirectFB141_source_1.3.1beta5.7z ---- - -[source,sh] ----- -make ----- +Die Sourcen, inklusive benötigter Patches (mit GIT-History), sind auch im +beiliegenden Archiv enthalten. === Pluggit @@ -182,32 +257,6 @@ Quellverzeichnis des Projekts ausgeführt werden: make pluggit ------------ -=== Browser - -Die Anzeige des Infoscreens erfolgt über eine HTML-Website, die auch -Multimediainhalte enthält. -Aus diesem Grund ist es nötig, dass das HTML von einem Web-Browser gerendert -wird. - -In Betracht kommt auf Grund der Bekanntheit und Stabilität der -Firefox-Browser. -Dieser kann nur im Vollbild-Modus so konfiguriert werden, dass nur der Inhalt -im X11-Fenster -- welches ausgelesen werden soll -- angezeigt wird, Menus und -Scrollbars. - -Deshalb wird ein Web-Browser benötigt, der es ermöglicht nur den Inhalt der -Website im X11-Fenster darzustellen. -Der Browser 'Surf' footnote:[http://surf.suckless.org] von 'suckless.org' ist -mit dem Prinzip erstellt worden, in andere Programme über das X11-XEmbed -Protokoll eingebettet zu werden, z.b. um mehrere Instanzen in einem -Tab-Manager zu embedden. - -Dies ermöglicht per Design zwei Punkte: - - Die Window-ID wird auf stdout ausgegeben (wird als Parameter an Pluggit - übergeben) - - Keine Bedienelemente vorhanden, denn der Browser wird über X11-Properties - gesteuert -- das macht ihn scriptable. - == Bewertung & Ausblick Die Performanz ist durch das ständige Übertragen komplette Bilder durch die @@ -3,7 +3,7 @@ \RequirePackageWithOptions{docbook} \usepackage[doublespacing]{setspace} -\setlength{\textwidth}{17cm} +\setlength{\textwidth}{17.5cm} \usepackage{listings} \lstset{ |