Das Smart TV Alliance SDK – clever ist anders

Webtechnologien auf Smart TVs – eine Totgeburt?
Kommentare

Web-Apps üben auf Smart-TV-Hersteller eine geradezu faszinierende Anziehungskraft aus. Es ist dem Autor dieser Zeilen auch nach über zehn Jahren an Branchenerfahrung nicht klar, warum alle Hersteller von smarten „Fernsehern“ auf Webtechnologien setzen.

Rein theoretisch dürfte dies für Entwickler eine Erleichterung sein: HTML5 ist und bleibt ja nun einmal HTML5 – leider war dies in der Praxis bisher nicht der Fall. Jeder Hersteller suchte auf die eine oder andere Art, seinen proprietären Standard zu halten.
Die Smart TV Alliance ist ein loser Zusammenschluss von Panasonic, Toshiba, TP Vision aka Philips und LG – welche Rolle die auf webOS setzenden Südkoreaner in Zukunft in der Allianz spielen werden, ist allerdings noch nicht bekannt. Klar ist, dass schon jetzt eine Vielzahl kompatibler Produkte in den Markt geschoben wurde: Je nach Region sind bis zu zwischen zwanzig und vierzig verschiedene intelligente Fernseher der Smart TV Alliance erhältlich.

Let’s go

Phillips war in der Vergangenheit dafür bekannt, dass deren Entwicklerservice den Gutteil der Zeit offline ist. Die Smart TV Alliance lässt sich davon inspirieren: Der Entwicklerdienst war während unserer Rezension immer wieder mal unerreichbar.

Das dort angebotene Software Developement Kit steht für Windows, Mac OS und Ubuntu zur Verfügung. Die folgenden Schritte beschreiben die Installation unter Ubuntu 14.4, als Workstation kam eine Achtkernmaschine aus dem Hause AMD zum Einsatz.

Nach dem Download der rund einen GB großen Datei müssen Sie prüfen, ob eine kompatible Version des Emulators VirtualBox auf Ihrer Maschine installiert ist. Wenn das der Fall ist, können Sie im nächsten Schritt die eigentliche Installation durch folgendes Konsolenkommando beginnen:

$ sudo dpkg -i Smart_TV_Alliance_SDK_Ubuntu_4.0.0.deb

Der eigentliche Installationsprozess nimmt einige Minuten in Anspruch. Nach getaner Arbeit ist Ihr System um einige Pfade reicher – von Haus aus quartiert sich das Smart-TV-Alliance-SDK in die folgenden Verzeichnisse ein:

  • /usr/bin/run-sta-sdk
  • /usr/share/doc/sta-sdk/
  • /usr/share/sta-sdk/
  • /usr/share/icons
  • /usr/share/applications

Wichtig ist, dass die Installation aufgrund von Inkompatibilitäten nicht mit dem Ubuntu Software Center erfolgen darf. Die Entfernung des SDKs erfolgt durch Eingabe des Kommandos sudo dpkg -r sta-sdk.

Das Smart-TV-SDK lässt sich aus dem Unity Launcher heraus anwerfen, wenn Sie als Suchstring „Smart TV“ eingeben. Im Rahmen des Starts der Eclipse-Helios-IDE bootet zudem eine virtuelle Maschine, die ein mehr oder weniger vollwertiges Emulatorimage bereitstellt.

Eine Frage der Auslieferung

Zur Erstellung eines neuen Projekts müssen Sie den unter File | New | Project … bereitstehenden Generatorassistenten öffnen. Die beiden für Smart TVs geeigneten Projektskelette liegen in der Rubrik Web: Dynamic und Static Web Project unterscheiden sich insofern, als die Auslieferung des Codes auf verschiedene Arten erfolgt.

Projekte der Bauart Dynamic Web Project werden per Tomcat ausgeliefert, während ihre statischen Vertreter direkt in den Emulator wandern. In den folgenden Schritten arbeiten wir aus Gründen der Bequemlichkeit mit einem statischen Projekt; als Name wird „SUSExample1“ vergeben. Die restlichen Einstellungen bleiben unverändert.

Eclipse erstellt ein leeres Projektskelett, das von Hand um Beispielcode erweitert werden muss. Klicken Sie das Projekt im Project Explorer rechts an und wählen Sie im daraufhin erscheinenden Kontextmenü die Option Import aus. Die Rubrik General | File System erlaubt das Importieren des Beispielcodes. Unter Windows liegt er unter /usr/share/sta-sdk/WebSamples/, während wir ihn auf unserer Workstation unter /usr/share/sta-sdk/WebSamples/ finden. Kopieren Sie die im Unterordner Video Sample befindlichen Dateien in das WebContent-Verzeichnis.

Die Auslieferung des Codes erfolgt durch das Kontextmenü des Project Explorers: Wählen Sie die Option Deploy to SDK, um den Code in die per VirtualBox bereitgestellte virtuelle Maschine zu jagen. Das Videocodebeispiel startet automatisch – neben dem Anklicken von Steuerelementen gibt es auch eine virtuelle Fernbedienung (Abb. 1).

Abb. 1: Die virtuellen Steuerelemente auf der Unterseite simulieren die Fernbedienung

Abb. 1: Die virtuellen Steuerelemente auf der Unterseite simulieren die Fernbedienung

Was ist wo?

In der Welt des Smart-TV-App-Alliance-SDKs gibt es keine Konfigurationsdateien; Applikationen sind Webseiten, die aus dem Programmstarter heraus angeworfen werden und die mit einer fixen Bildschirmbreite von 1 280 x 720 Pixel auskommen.

Nach einer Analyse des Video Samples bleibt die folgende Seitenstruktur zurück, die als Basis für neue Applikationen dienen kann. Der dazu notwendige Code sieht aus wie in Listing 1.

<!DOCTYPE html>
<html>
  <head>
    <title>Video Example</title>
    <meta charset="utf-8">
    <script src="js/smarttv_getplatform.js"></script>
    <script src="js/lg_keyconstants.js"></script>
  </head>
  <body onload="init(false);" style="width:1280px;height:720px;overflow:hidden;margin:0px;">

  </body>
</html>

Die beiden im Verzeichnis /js/ liegenden Dateien enthalten Logik, welche die Arbeitsumgebung des Browsers um einige plattformspezifische Deklarationen erweitert. Sie sind notwendig, da die Smart TV Alliance kein gemeinsames Betriebssystem verwendet.

Jeder Hersteller kann in einem weiten Rahmen sein eigenes Süppchen brauen. Die Alliance bietet in einem als „Application Development Diversity Handling Guidelines“ bezeichneten Dokument Informationen über die verschiedenen Systeme an – für uns genügt es, die angebotenen Daten auszuwerten.

Stellen Sie Ihre Fragen zu diesen oder anderen Themen unseren entwickler.de-Lesern oder beantworten Sie Fragen der anderen Leser.

Dazu wird der Body um vier Input-Elemente erweitert, welche die auszugebenden Informationen enthalten. In praktischem Code wäre es sinnvoller, an dieser Stelle auf ein User-Interface-Framework zurückzugreifen. Falls jQuery UI und Co. nicht in Frage kommen, bieten einfache Templates wie Bootstrap Styles, welche die „matt aussehenden“ Steuerelemente optisch aufpeppen (Listing 2).

</script>
  </head>
  <body onload="init();" style="width:1280px;height:720px;overflow:hidden;margin:0px;">
    User Agent: <input type="text" id="lua"><br>
    Hersteller: <input type="text" id="lm"><br>
    Typ: <input type="text" id="lt"><br>
    Version: <input type="text" id="lv"><br>
  </body>
</html>

Die beim Laden des Body-Tags aufgerufene Funktion init füllt die am Bildschirm befindlichen Felder auf (Listing 3).

function init()
{
  var x = document.getElementById("lua");
  x.value=myplatform["ua"];

  x = document.getElementById("lm");
  x.value=myplatform["manufacturer"];

  x = document.getElementById("lt");
  x.value=myplatform["type"];

  var x = document.getElementById("lv");
  x.value=myplatform["version"];
}

Interessierte Entwickler können den vollständigen Code der Erkennungsroutine ansehen, indem sie die Datei smarttv_getplatform ansehen. Die ersten Zeilen der gleichnamigen Funktion zeigen, welche Informationen bereitgestellt werden:

function smarttv_getPlatform ()
{
  var userAgent = new String(navigator.userAgent);
  var smarttv_platform = new Array();
  smarttv_platform["ua"] = userAgent;
  smarttv_platform["manufacturer"] = "unknown";
  smarttv_platform["type"] = "unknown";
  smarttv_platform["version"] = "unknown";
  . . .

Witzigerweise muss die Methode nicht von Hand aufgerufen werden. Die in den meisten Fällen mit eingebundene Datei lg_keyconstants.js enthält folgende Passage, die eine Variable namens myplatform deklariert:

// using smarttv_getplatform.js
var myplatform = smarttv_getPlatform();

if (myplatform["manufacturer"] == "LG")
{
  var VK_ENTER    =  13; 
  var VK_PAUSE    =  19; 
  . . .

Fehler jagen

Da der im Emulator verwendete Browser auf WebKit basiert, wird er mit einem kleinen Debugger ausgeliefert. Klicken Sie den Hintergrund einer gerade laufenden Applikation rechts an, um ein Kontextmenü zu öffnen. Die Option Inspect Element startet den aus Chrome und Co. bekannten Debugger. Ob der freien Skalierbarkeit des Emulatorfensters lässt er sich auf Full-HD-Monitoren durchaus komfortabel verwenden – die Unschärfe der Darstellung und das Handling ist nicht jedermanns Sache.

Als Alternative dazu bietet es sich an, die IDE direkt mit dem Emulator zu verbinden. Eclipse arbeitet mit Debuggerkonfigurationen: Es handelt sich dabei um spezielle Profile, welche die zu testende Applikation samt den notwendigen Umgebungseinstellungen kapseln.

Klicken Sie im ersten Schritt auf Run | Debug Configurations …, um den Verwaltungsdialog zu öffnen. Nach einem Rechtsklick auf die Rubrik WebKit Protocol folgt das Aktivieren der New-Option – als Lohn der Mühen erscheint eine neue Konfiguration. Der voreingestellte Wert für Host stimmt, das SDK kommuniziert statt auf Port 9222 via 9223. Als Wip Backend dient „Protocol 1.0“.

Wechseln Sie im nächsten Schritt in die Rubrik Source und klicken Sie dort auf den Add-Button. Im daraufhin aufscheinenden Dialog wählen Sie Workspace aus, um die Konfiguration zur Nutzung aller im Projekt befindlichen Inhalte zu ermächtigen.

Der eigentliche Start der IDE erfolgt durch Anklicken von Run | Debug Configuration. Wählen Sie danach die neu erstellte Konfiguration aus, und klicken Sie auf den Debug-Button. Ab diesem Zeitpunkt lassen sich Tests über die Debug-Perspektive erledigen.

Bei der Nutzung von Breakpoints müssen Sie eine kleine Besonderheit berücksichtigen: Das Festlegen von für WebKit gültigen Unterbrechungspunkten muss über die Unteroption des Run-Menüs erfolgen. Leider funktioniert das in der Praxis oft eher schlecht als recht; auf der Workstation des Autors kam es immer wieder zu unerklärbaren Abstürzen.

Für einfachere Aufgaben kann es ausreichen, Informationen durch das vom Webbrowser aus Aufrufen von console.log erstellte Logfile entgegenzunehmen. Dazu klicken Sie auf Window | Show View | Other und geben im daraufhin erscheinenden Dialog den Suchstring „Console“ ein. Der daraufhin erscheinende Konsolendialog sollte von der Java-Entwicklung bekannt sein: Eclipse bietet nur dann eine „Remote Browser Console“ an, wenn der Browser bereits Meldungen abgesetzt hat.

Spiele das Smart Home

Der Trend zur Konvergenz hört im Smart-TV-Bereich nicht auf – die meist im Zentrum des Wohnzimmers stehenden Fernsehgeräte könnten zur Steuerung diverser Hardware eingesetzt werden. In der vierten Version des SDKs bietet der Emulator eine Möglichkeit zur Interaktion mit Hardware an, die den in der Smart Home Specification definierten Standards entspricht.

Geräte kommunizieren in einem vergleichsweise seltsamen Verfahren. Der physikalische Datenaustausch erfolgt durch eine Verbindung auf WebSocket-Basis. Als Datenaustauschformat dienen JSON-Strings, die nach den in der Spezifikation angegebenen Regeln aufgebaut sein müssen. Um Benutzern das Eingeben der IP-Adressen zu ersparen, sind zudem einige Erkennungsverfahren spezifiziert. Leider ist deren technische Implementierung alles andere als einfach.

Zwecks Unterteilung der zum Ansprechen notwendigen Logik unterteilt die Smart Home Alliance die Zielgeräte in sieben Untergruppen, die als Kontrakte bezeichnet werden:

  • AirConditioner (Klimaanlage)
  • Dryer (Wäschetrockner)
  • Light (Lampe)
  • Refrigerator (Kühlschrank)
  • Washer (Waschmaschine)
  • WasherDryer

Da passende Geräte im Moment sehr selten sind, bieten laufende Emulatorinstanzen einen über http://localhost:7880/ ansprechbaren Konfigurationsbildschirm an. Von Haus aus wird eine Klimaanlage simuliert, die in Abbildung 2 gezeigt ist.

Abb. 2: Der Emulator simuliert eine Klimaanlage

Abb. 2: Der Emulator simuliert eine Klimaanlage

Um Entwicklern das Hantieren mit der Spezifikation zu ersparen, bietet die Smart TV Alliance hier ein separat herunterzuladendes Unterstützungspaket namens „Smart TV Alliance SDK Smart Home Code Samples 1.0.0“ an. Es enthält eine stash.js genannte Zugriffsbibliothek, die von einem kleinen Testbeispiel flankiert wird. In STASHTest.html ist der Discovery-Prozess in einer fertigen Methode implementiert – kopieren Sie sie bei Bedarf in ein Programm Ihrer Wahl.

Für weitere Gehversuche ist es nach Meinung des Autors noch zu früh; man sollte warten, bis die Smart TV Alliance die Dokumentation für ihren Kommunikationsstandard finalisiert und eine brauchbare Zugriffsbibliothek anbietet.

Zweiklassengesellschaft

Die Smart TV Alliance unterteilt ihre Entwicklerschaft in zwei Gruppen: Basic-Developer haben ein kostenloses Konto, während Premiumentwickler 300 US-Dollar pro Jahr bezahlen müssen.

Aus Entwicklersicht gibt es zwei gravierende Unterschiede. Basic-Entwickler sind nicht zum Senden von Supportfragen berechtigt. Wer direkten Kontakt per E-Mail oder Skype möchte, muss aufzahlen. Die zweite Differenz betrifft die Anzahl der zum Vertrieb freigegebenen Apps – ein Basic-Entwickler darf nur sieben Apps vertreiben. Besonders ärgerlich ist, dass sie pro Applikation nur sieben QA-Durchläufe vornehmen dürfen.

Das eigentliche Hochladen erfolgt danach über die im Backend angebotenen Formulare. Füllen Sie die diversen Felder aus und senden Sie den Code an die Smart TV Alliance. Nach dem Durchlaufen der diversen QA-Teams folgt die Auslieferung in die diversen Stores.

In beiden Fällen ist die Aktivierung der Publisher-Rechte notwendig. Im bereitgestellten Formular müssen Sie einen zweiten Vertrag abnicken, in dem Sie bestätigen, dass Sie der alleinige Rechteinhaber an den hochzuladenden Inhalten sind.

Smart und Smart?

Smart TVs werden gern in einem Atemzug mit Smartphones genannt. Das liegt daran, dass die Geräte – am Ende – sehr ähnlich sind. Halten Sie Ihr Telefon probeweise vor ein Fernsehgerät, während sie eine Sendung ansehen: Die wahrgenommene Größe der beiden Bildschirme ähnelt einander. Daraus folgt, dass das Vollstopfen der mit einer Auflösung von 4K durchaus „aufnahmefähigen“ Fernsehgeräte alles andere als sinnvoll ist. Nutzer sitzen einige Meter vor der Kiste und können kleine Elemente nicht wahrnehmen.

Ein weiterer Pain Point betrifft die Eingabe von Informationen. Die auf Smartphones verfügbaren virtuellen Tastaturen sind im Vergleich zur durchschnittlichen Fernbedienung geradezu luxuriös; die auf dem T9-Prinzip basierenden Zahleneingabefelder lassen das Eingeben eines URLs als nervtötende Arbeit erscheinen.

Zu guter Letzt sollten Sie beachten, dass Fernsehgeräte für die Verarbeitung von „geheimen“ Informationen ungeeignet sind. Wer sein Aktienportfolio mit einem Smart TV ansieht, teilt sie mitunter mit seinen Nachbarn. Da Fernsehgeräte gerne „im Team“ genutzt werden, sind sie für soziale Aktivitäten prädestiniert. Zu mehrt spielbare Games, Scores oder Twitter-Highscores sind perfekte Applikationen für smarte TVs.

Mehr erfahren

Angemeldete Entwickler finden hier Daten über die Bedienung der im SDK enthaltenen Werkzeuge. Es handelt sich hierbei primär um Manuals – Code findet sich nur an wenigen Stellen.

Die bereitstehenden Spezifikationsdokumente sind in vielerlei Hinsicht lehrreicher. In den Smart-TV-Alliance-Specification-Dateien finden Sie Informationen über alle zu unterstützenden Funktionen: Wenn sich Ihr Programm auf die dort enthaltenen Features beschränkt, so sollte es auf allen der Spezifikation entsprechenden Geräten ohne Probleme funktionieren.

Fazit

Handcomputerentwickler sind an Smart TVs nicht zuletzt deshalb so wenig interessiert, weil die Arbeit mit Webtechnologien ungewohnt ist. Mit dem Web aufgewachsene Informatiker haben hier einen nicht unerheblichen Startvorteil. Wenn Ihr Programm – im Grunde genommen – in der Welt der Smart TVs lebensfähig ist, spricht nichts dagegen, den Angeboten der Smart TV Alliance eine Chance zu geben.

Das hier vorgestellte SDK bietet gegenüber klassischer Webentwicklung den Vorteil, dass der zum Rendering eingesetzte Browser im Großen und Ganzen dem eines TV-Geräts entspricht – Smartphone- und PC-Browser weisen kleine Unterschiede auf, die sich am Ende aber massiv auswirken können.

Wesentlich schlechter sieht es für die Smart Home Specification aus. Die von IBM bereitgestellte STASH-Bibliothek ist im besten Fall dürftig; das komplette Fehlen jeglicher Dokumentation und der immens komplexe Aufbau des API lässt reichlich Platz für einen Angriff von anderer Seite.

Entwickler Magazin

Entwickler Magazin abonnierenDieser Artikel ist im Entwickler Magazin erschienen.

Natürlich können Sie das Entwickler Magazin über den entwickler.kiosk auch digital im Browser oder auf Ihren Android- und iOS-Devices lesen. In unserem Shop ist das Entwickler Magazin ferner im Abonnement oder als Einzelheft erhältlich.

Aufmacherbild: Vintage television concept von Shutterstock / Urheberrecht: Maxx-Studio

Unsere Redaktion empfiehlt:

Relevante Beiträge

Meinungen zu diesem Beitrag

X
- Gib Deinen Standort ein -
- or -