summaryrefslogtreecommitdiff
path: root/projekt_doku.asciidoc
diff options
context:
space:
mode:
Diffstat (limited to 'projekt_doku.asciidoc')
-rw-r--r--projekt_doku.asciidoc127
1 files changed, 88 insertions, 39 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