Ulrichs Werkbank

Der Raspberry Pi als Fotobetrachter

15. Januar 2014
von Ulrich Hilger
alle Rechte vorbehalten

 

 

raspiDie Digitalfotografie bewirkt, dass Bildmaterial heute zumeist "elektrisch" vorliegt. Im Speicher von Kamera, Telefon oder Tablet zunächst, dann in aller Regel irgendwo auf einer Festplatte. Dazu gibt es viele Dienste, die Fotos im Netz zugänglich machen: iCloud, flickr, Tumblr, Ipernity, Instagram, Picasa, Google+, Facebook um nur einige zu nennen. Eine Vielzahl von Geräten erlaubt die Betrachtung, schöne neue Bilderwelt überall verfügbar und einfach verwendbar.

Der heimische Fernseher hingegen ist bislang eher aussen vor. Verschiedene Anbieter haben Lösungen, das Angebot bleibt aber oft hinter den Erwartungen zurück. Kleinstrechner wie der Raspberry Pi sind eine gute Möglichkeit, sich von vielen herstellerabhängigen Sonderwegen zur Bildbetrachtung auf dem Fernseher zu lösen.

Dieser Beitrag knüpft an den Artikel Der Raspberry Pi als Media Player an und beschreibt, wie man mit der Hilfe eines Raspberry Pi den Fernseher zur Ansicht von Bildern verwenden kann.

Ausgangslage und Anforderungen

Fotografien sind über das Netz per HTTP zugänglich, z.B. bei einem der vielen Bilderdienste im Internet oder aber auch auf einer eigenen Maschine z.B. im Heimnetz. Ein URL wie z.B. http://example.com/pub/photo/id/12345.jpg macht eine Fotografie zugänglich.

Solche Bilder sollen unter Einsatz eines Raspberry Pi auf dem Fernseher zu betrachten sein. Die Anzeige soll sich von einer anderen Maschine aus per Webbrowser bzw. per HTTP steuern lassen. Dabei soll die Funktion auf der Seite des Raspberry Pi auf die Darstellung einer Fotografie beschränkt sein. Die Steuerung welche Fotografie wann dargestellt wird, soll "von außen" erfolgen. Auf diese Weise kann die Darstellung von Bildern mit Raspi und Fernseher an eine beliebige Anwendung angebunden werden.

Lösungsansatz

Zur Herstellung der Lösung wird auf einem Raspi mit Java und Tomcat aufgesetzt, wie es der zuvor erwähnte Artikel beschreibt. Damit ist bereits die Grundlage zur Steuerbarkeit mit dem Browser hergestellt. Die ebenfalls im Artikel vorgestellte Anwendung zur Fernbedienung des Pi wird um eine Funktion erweitert, die die Angabe eines Uniform Resource Locators (URL) erlaubt. Mit Angabe eines Bild-URL veranlasst die Anwendung zur Fernbedienung den Raspberry Pi das Bild aus dem Netz zu laden und auf dem Fernseher anzuzeigen.

Die Anzeige eines Bildes auf dem Fernseher erfolgt mit Nutzung des sogenannten Framebuffers, einer Einrichtung, die die Darstellung von Bildern erlaubt ohne, dass eine grafische Bedienoberfläche auf dem Raspberry Pi gestartet sein muss. In der Anwendung zur Fernbedienung des Pi wird dazu die Klasse JavaFrameBuffer von Thomas Welsch integriert. So kann aus dem im sogeannten "Headless Mode" arbeitenden Java-Prozess von Tomcat, in dem auch die Anwendung zur Fernbedieung des Pi läuft, ein Bild aus dem Netz geladen und der Framebuffer direkt angesteuert werden.

Mit diesem Lösungsansatz entsteht eine schlanke Logik, die eingebettet in Tomcat von anderen Maschinen aus per HTTP angesprochen werden kann. Per Webbrowser kann man manuell einzelne Bilder zur Anzeige bringen oder die Funktion in einer beliebigen anderen Anwendung nutzen, um Bildfolgen anzeigen zu lassen.

Herstellung

Die Anwendung zur Fernbedienung des Raspberry Pi (Pi Remote Control, pirc) wird um ein zusätzliches Servlet Bildbetrachter.java erweitert. Das Servlet stellt die Methoden zeigen zum Anzeigen eines Bildes und loeschen zum Löschen der Anzeige bereit. Die Methode zeigen nimmt als Paramter neben dem URL zum Foto die X- und Y-Koordinaten zur Anzeige sowie die gewünschte Breite und Höhe entgegen, in der das Bild dargestellt werden soll.

Im Deployment Descriptor von pirc, der Datei web.xml, wird das Servlet Bildbetrachter per Eintrag der Elemente <servlet> und <servlet-mapping> registriert und mit dem URL /bibe/* verbunden. Die Nutzung des Servlets erfolgt über die im nächsten Abschnitt angegebenen Adress.

App.java, Bildebtrachter.java und die Klasse JavaFrameBuffer.java werden kompiliert und in die Webanwendung pirc gepackt wie bereits beschrieben. Zur Klasse JavaFrameBuffer gehört die in C geschriebene native Programmbiliothek libJavaFramebuffer.so. Sie stellt den Zugang zum Framebuffer des Raspberry Pi her und wird über das Java Native Interface (JNI) eingebunden. Damit das funktioniert wird die Datei libJavaFramebuffer.so von Hand auf den Raspi kopiert und an einem Ort abgelegt, wo Tomcat lesenden Zugriff hat. Tomcat wird fortan mit dem Parameter -Djava.library.path=/pfad/zur/bibliothek gestartet.

Die entsprechend erweiterte und installationsbereite Webanwendung PiRC kann auf der Produktseite bezogen werden.

Nutzung

Die neue Funktion zum Darstellen von Bildern erfolgt via Browser, indem die im vorigen Artikel näher beschriebene Webanwendung pirc (Pi Remote Control) aufgerufen wird:

http://raspberrypi:8080/pirc

Dort kann über die Verknüpfung "Bilder" eine Seite geöffnet werden, die die Eingabe eines Uniform Resource Locators zu einem Bild erlaubt. Ein solcher URL kann auch direkt aufgerufen werden:

http://raspberrypi:8080/pirc/bibe/zeigen?u=http://example.com/link/zum/bild.jpg&x=80&y=0&w=990&h=660

Beide Formen des Aufrufs führen dazu, dass der Raspberry Pi das bezeichnete Bild aus dem Netz lädt und auf dem Fernseher anzeigt. Die Parameter für X- und Y-Koordinaten sowie Breite und Höhe können so gewählt werden, wie es die Darstellung des verwendeten Fernsehgerätes erfordert.

Soll ein anderes Programm zur Steuerung einer Bildfolge diese Funktion verwenden, muss im Steuerungsprogramm lediglich für jedes Bild ein URL erzeugt werden, der auf das jeweils anzuzeigende Bild verweist (im Beispiel oben fett kursiv enthalten). Bild-URLs eingebettet in die obige Form werden nacheinander in der gewünschten Reihenfolge aufgerufen woraufhin der Raspberry Pi die so entstehende Bildfolge auf dem Fernseher ausgibt.

Einschränkung

Wie die vorangegangenen Ausführungen zeigen ist die Anwendung pirc zur Bereitstellung und Ausführung der Steuerungsfunktionen gedacht. Die Anwendug erlaubt es, einzelne Funktionen via Browser bzw. generell via HTTP auszulösen und ist damit für die enthaltenen Grundfunktionen wie z.B. Start/Stopp des Abspielens eines Films, eines Musikstücks oder Anzeige einer Fotografie eine vollwertige, browserbasierte Bedienoberfläche.

pirc bildet keine Bedienoberfläche "in voller Schönheit" mit anspruchvoller Gestaltung oder komplexerer Funktionalität. Die Webanwendung liefert die hersteller- und technologieunabhängige, generische Grundlage für individuelle, komplexe Bedienoberflächen und mithin für eine beliebige Integration in andere Anwendungen aller Art.

Fazit

Mit einem Raspberry Pi können Fotografien auf dem Fernseher angezeigt werden ohne, dass eine grafische Bedienoberfläche wie z.B. das X Windowing System, XBMC oder OpenELEC auf dem Pi laufen muss. Tomcat und Java im 'headless mode' gemeinsam mit der Webanwendung pirc erlauben eine vielseitige Nutzung, Steuerung und Integration und fügen obendrein die Steuerbarkeit aus der Ferne via HTTP hinzu. Der Raspberry Pi wird mit PiRC zum Bindeglied zwischen Fernsehgerät und Bildern im Netz ohne, dass das Fernsehgerät besondere Eigenschaften besitzen muss.