Seite 1 von 1

PhantomJS.TMS - Browser Demo

Verfasst: Sa 15. Jul 2017, 18:03
von jkIT
Ich möchte euch mein aktuelles Experiment vorstellen. Und zwar ist es mir gelungen, PhantomJS v2.1.1 auf den Topf zu portieren. Raus gekommen ist tatsächlich ein kleines Monster (50MB nur das Binary) :wink: .

PhantomJS basiert auf QT 5.5 (qtbase und qtwebkit) und ist im Prinzip ein WebKit/Safari Browser ohne grafische Abhängigkeiten (GUI), der mit JavaScript gesteuert werden kann. Diese JS Kontrollschicht und ein TAP können z.B. via WebSockets miteinander kommunizieren. Das ermöglicht es uns, Anwendungen mit HTML/CSS/JavaScript Funktionalität zu bauen.

PhantomJS erzeugt Screenshots normalerweise nur im PNG oder JPG Format, deshalb habe ich es um die Möglichkeit erweitert, einen Render-Puffer mit einem TAP zu teilen, um Grafik am OSD anzuzeigen.

Es wären aber auch grafiklose Anwendungen denkbar, da man über JavaScript Vollzugriff auf das DOM einer geladenen Webseite hat. Stichwort: Auslesen von Informationen aus einer Website.

Zur Demonstration habe ich ein Browser Demo TAP erstellt.

Es startet eine PhantomJS Instanz, was ein paar Sekunden dauert, und lädt dann eine lokale Webseite mit ein paar Links zum Testen.
Auf den Webseiten wird eine rudimentäre TV-Navigation eingebunden, die mit den Tasten recht, links, auf, ab von Link zu Link springt, bzw. auf,ab scrollt. Die Taste ok löst auf dem fokussierten Element einen Klick aus. Mit |< und >| kann man im Browser-Verlauf vor und zurück gehen.
EXIT beendet das TAP.


Der Screenshot könnte einigen bekannt vorkommen :D :

Natürlich ist unser Topf mit seinen zwei 400MHz Kernen kein Geschwindigkeitswunder, aber ich bin immer wieder erstaunt, zu was er alles fähig ist. Ein Nachteil ist die doofe 4:3 OSD Auflösung, die am TV auf 16:9 gestreckt wird. Der WebKit kann zwar verzerrt rendern, aber es entsteht durch das ganze hin- und hergezerre eine gewisse Unschärfe.

Download inkl. Sourcecode

Installation: Archiv entpacken und Inhalt des ProgramFiles Ordners entsprechend auf den Topf kopieren.

Wer Lust hat, kann auf der Telnet Konsole noch ein paar PhantomJS Beispiele ausprobieren (siehe auch http://phantomjs.org/examples/ )

Code: Alles auswählen

First cd to the qt5 directory:
# cd /mnt/hd/ProgramFiles/bin/qt5/

Display version string:
# phantomjs.tms -v

Canvas test, rendering a color wheel to a png image
# phantomjs.tms examples/colorwheel.js

Rendering the complete Topfield-Europe forum start page to png:
# phantomjs.tms examples/rasterize.js http://www.topfield-europe.com/forum/index.php topfield.png

SVG test, rendering a svg image to png:
# phantomjs.tms examples/rasterize.js http://ariya.github.io/svg/tiger.svg tiger.png
Viel Spass beim testen :)

AW: PhantomJS.TMS - Browser Demo

Verfasst: Sa 15. Jul 2017, 18:07
von Twilight
ich glaub ich bin im falschen film...april ist noch s weit :shock:

twilight

AW: PhantomJS.TMS - Browser Demo

Verfasst: Sa 15. Jul 2017, 18:25
von TV-Junkie
irrre :D

AW: PhantomJS.TMS - Browser Demo

Verfasst: Sa 15. Jul 2017, 18:26
von Acade
Tolle Arbeit, jkIT, :up:

Qt wäre schon toll auf der Kiste, allein ich mag mich auf 'nem HD-PVR nicht mit 720x576 zufrieden geben.
Kann man denn den Nexus gar nicht zu 1920x1080 oder wenigstens HD-Ready überreden?

Ciao,
Acade

AW: PhantomJS.TMS - Browser Demo

Verfasst: Sa 15. Jul 2017, 20:19
von FireBird
Genial! :D

AW: PhantomJS.TMS - Browser Demo

Verfasst: Sa 15. Jul 2017, 21:41
von Alter Sack
Unglaublich, was es mittlerweile alles auf den Topf geschafft hat, wer hätte da 2009 schon dran gedacht :hello:

Die Sache mit dem Anmelden hat zwar noch nicht geklappt :D , aber sonst ... :shock:


AW: PhantomJS.TMS - Browser Demo

Verfasst: Sa 15. Jul 2017, 23:50
von Twilight
Alter Sack hat geschrieben:Unglaublich, was es mittlerweile alles auf den Topf geschafft hat, wer hätte da 2009 schon dran gedacht :hello:

wo du recht hast, hast du recht :up:

twilight

AW: PhantomJS.TMS - Browser Demo

Verfasst: So 16. Jul 2017, 09:29
von Alter Sack
Ich habe mir die Startseite mal ein bischen angepasst, ist zwar jetzt sehr Topfield lastig, aber
man muss nicht soviel drücken :D



Ich finde die Darstellung am TV eigentlich völlig OK, die Korea Seite wird zwar durchsichtig
dargestellt, aber da gibts ja nichts spannendes mehr zu sehen :u:

Selbst als Demo ist das echt :volldolllol:

AW: PhantomJS.TMS - Browser Demo

Verfasst: So 16. Jul 2017, 09:50
von jkIT
Acade hat geschrieben:Kann man denn den Nexus gar nicht zu 1920x1080 oder wenigstens HD-Ready überreden?

Ich meine, theoretisch wäre mehr drin als die 720x576. Es gibt/gab eine Traumbox mit dem selben SoC wie in unseren Töpfen und die hatte angeblich ein HD OSD. Das wäre also ein Fall für die Spezialisten im Firmware zerlegen :u:

Alter Sack hat geschrieben:Die Sache mit dem Anmelden hat zwar noch nicht geklappt :D , aber sonst ... :shock:

Vielleicht hat jemand Lust eine Tastatur ins TAP einzubauen, dann würde es auch Sinn machen, außer den Links auch die Eingabefelder mit dem Focus anzuspringen.

Alter Sack hat geschrieben:Ich habe mir die Startseite mal ein bisschen angepasst,

:up: weiter so

AW: PhantomJS.TMS - Browser Demo

Verfasst: So 16. Jul 2017, 10:15
von HD_Topfgucker
jkIT hat geschrieben:Ich möchte euch mein aktuelles Experiment vorstellen. Und zwar ist es mir gelungen, PhantomJS v2.1.1 auf den Topf zu portieren. Raus gekommen ist tatsächlich ein kleines Monster (50MB nur das Binary) :wink: .

PhantomJS basiert auf QT 5.5 (qtbase und qtwebkit) und ist im Prinzip ein WebKit/Safari Browser ohne grafische Abhängigkeiten (GUI), der mit JavaScript gesteuert werden kann. Diese JS Kontrollschicht und ein TAP können z.B. via WebSockets miteinander kommunizieren.
[/CODE]Viel Spass beim testen :)


Hallo in die Runde,

Klingt echt spannend.
Ist es damit jetzt möglich dies mit dem HbbTV Tap zu verbinden und kann man auf den zwischengeschalteten
PC dann verzichten ?

Gruß HD_TOPFGUCKER

AW: PhantomJS.TMS - Browser Demo

Verfasst: So 16. Jul 2017, 10:22
von jkIT
Noch ein wenig Hintergrundinformation zur Browser Demo:

Die PhantomJS seitigen Dateien liegen in /ProgramFiles/bin/qt5/ . Das TAP startet PhantomJS über phstart.sh.
PhantomJS wird mit dem Kontroll-Skript browser-demo.js gestartet. Dieses baut eine WebSocket Verbindung zum TAP auf, über die das TAP die Kommandos sendet und die Daten empfängt.

Als Startseite wird per default die Datei index.html geladen, das kann in der ini des TAPs eingestellt werden.
Sobald eine Seite geladen ist, injiziert das Kontroll-Skript die Datei tv-nav.js mit den Navigationsfunktionen. Diese ist sehr einfach gehalten, sie sucht alle Links und ordnet sie in Zeilen, damit man den Focus in die gewünschte Richtung bewegen kann.
Das ist eigentlich zu statisch und kann sicher intelligenter gelöst werden. Mozilla hat hier einen interessanten Artikel dazu veröffentlicht.

Todo:
browser-demo.js rendert eine Seite momentan nur einmal direkt nach dem Laden, bzw. beim scrollen. Eigentlich müsste aber immer, wenn der WebKit eine Veränderung (dirty rect) meldet, nachgerendert werden. Ebenso wird im Moment immer der ganze Screen gerendert, auch wenn sich evtl. nur ein Teil verändert hat.

Übrigens, das TAP gibt seine Log-Ausgaben wie üblich im entsprechenden Settings Verzeichnis aus, browser-demo.js logt ins qt5 Verzeichnis.

AW: PhantomJS.TMS - Browser Demo

Verfasst: So 16. Jul 2017, 10:44
von jkIT
HD_Topfgucker hat geschrieben:Hallo in die Runde,

Klingt echt spannend.
Ist es damit jetzt möglich dies mit dem HbbTV Tap zu verbinden und kann man auf den zwischengeschalteten
PC dann verzichten ?

Gruß HD_TOPFGUCKER

Das ist mein Ziel :)

Im Prinzip sollte es jetzt schon möglich sein, wenn man PhantomJS.TMS, wie bei HbbTF beschrieben, von Hand startet.

Es wäre aber ziemlich ineffizient, denn bei HbbTV.js wird der Screen zunächst als PNG und Base64 codiert gerendert. Dann wird in JavaScript das Base64 dekodiert und das PNG per HTTP-GET ans TAP gesendet, wo das PNG dekodiert wird. Vor der Ausgabe am OSD müssen dann noch die Farbkomponenten vertauscht werden :puh: :X

Mit PhantomJS.TMS ist es nun möglich, direkt in einen Speicherbereich zu rendern, der mit dem TAP geteilt wird, und der vom TAP 1:1 ins OSD kopiert werden kann. Das dürfte um einige Größenordnungen schneller sein.

Dazu muss ich aber erst die Erkenntnisse aus der Browser Demo ins HbbTF.tap einbauen. Vorher möchte allerdings noch ein paar Dinge ausprobieren.

AW: PhantomJS.TMS - Browser Demo

Verfasst: So 16. Jul 2017, 11:56
von macfan
Cool! :respekt:

Gruß, Horst

AW: PhantomJS.TMS - Browser Demo

Verfasst: So 16. Jul 2017, 11:58
von omue
Das wäre voll Geil !

AW: PhantomJS.TMS - Browser Demo

Verfasst: So 16. Jul 2017, 13:33
von omue
jkIT

Das ist das genialste was ich aif dem Topf erlebt habe !

:D :D :D :D :D
<li><a href="http://hbbtv.zdf.de/zdfstart/index.php">HbbTV ZDF Startpage (geht nicht)</a></li>
:D :D :D :D :D

die Unterseite Wetter geht, nur die Steuerung geht natürlich nicht ;)
http://hbbtv.zdf.de/zdfnews/index.php?weather=1

AW: PhantomJS.TMS - Browser Demo

Verfasst: So 16. Jul 2017, 14:05
von jkIT
Das Problem ist, dass HbbTV normalerweise mit dem ContentType "application/vnd.hbbtv.xhtml+xml" ausgeliefert wird, welchen ein normaler Browser nicht rendert. Die HbbTV Apps erwarten auch zwei Plugins, die im HbbTF Projekt per JavaScript so gut es geht emuliert werden. Um den ContentType zu umgehen wird dort die Seite nicht direkt, sondern über einen XMLHttpRequest abgerufen. Letzteres hoffe ich in PhantomJS.TMS noch lösen zu können.
ZDF-Wetter hat evtl. einen "PC-Browser Fallback" eingebaut.

AW: PhantomJS.TMS - Browser Demo

Verfasst: So 16. Jul 2017, 14:30
von Homer
jkIT hat geschrieben:ZDF-Wetter hat evtl. einen "PC-Browser Fallback" eingebaut.
Vermutlich ja, denn auf dem PC zeigt mein Browser http://hbbtv.zdf.de/zdfnews/index.php?weather=1 an. http://hbbtv.zdf.de/zdfnews/index.php funktioniert auf dem PC nicht, http://hbbtv.zdf.de/zdfnews/index.php?id= funktioniert.

Viele Grüße
Homer

AW: PhantomJS.TMS - Browser Demo

Verfasst: Di 18. Jul 2017, 08:50
von buko
... Super, weiter so ... :up:

AW: PhantomJS.TMS - Browser Demo

Verfasst: Fr 28. Jul 2017, 14:38
von jkIT
Kleines Update:

* die Demo kann jetzt fortlaufend rendern, dabei wird nur der Bereich erneuert, den der WebKit als "dirty" meldet. Zur Demonstration habe ich auf der Startseite eine Uhr eingebaut.

Dabei tauchte ein neues Problem auf: der Linux Prozess phantomjs.tms kennt die aktuelle Uhrzeit nicht, da die System Uhr bei jedem Receiver Start am 1.1.2000 starten. Leider ist es nicht ratsam die Systemuhr auf die aktuelle Zeit zu setzen :evil:
Daher:

* das TAP sendet nun die aktuelle Zeit ans Steuerscript, welches dann das JavaScript Date Objekt der geladenen Website entsprechend manipuliert.

* der "Content-Type" für HbbTV wird nun von PhantomJS als HTML gerendert.

AW: PhantomJS.TMS - Browser Demo

Verfasst: Fr 28. Jul 2017, 14:54
von omue
jkIT hat geschrieben:Kleines Update:
* der "Content-Type" für HbbTV wird nun von PhantomJS als HTML gerendert.


gerade mal ein paar HBBTV ZDF Seiten aufgerufen > klappt !

Super, es geht voran :D