web (HbbTV, VDR*ELEC), Milestone 1 erreicht

  • Hallo,


    endlich habe ich den ersten Milestone erreicht. Wie ich in dem Thread bereits angedeutet habe, bastle ich an einem Web/HbbTV Plugin.

    Aktuell schaue ich mir auf einen VDR*ELEC (CE19, odroid n2+) ein Video aus der ARD Mediathek an :)

    Die Seiten von ARD/ZDF sind am Besten getestet. Alle anderen Sender haben noch Fehler, funktionieren gar nicht oder nicht wie gewünscht.

    Alle URLs und Kanalinformationen werden vom VDR an den Browser gesendet und der Browser nutzt eine sqllite Datenbank um alles zu speichern. Bis die Datenbank genug gefüllt ist, können ein paar Minuten vergehen.

    Für Vodafone-West Nutzer habe ich schon eine Datenbank erstellt:

    cefbrowser/static-content/database/Vodafone_West_hbbtv_urls.db

    Die Datenbank einfach nach hbbtv_urls.db umbenennen und damit verkürzt man die Wartezeit ein wenig.


    Ein anderes Thema sind eigene HbbTV Applikationen. Wählt man das web-Plugin im Menu und drückt dann die Info-Taste, wird eine andere (extrem simple) lokale Applikation (cefbrowser/static-content/application/main) gestartet. Falls alles zufriedenstellend läuft, muss ich mir mal Gedanken machen, ob es eigene sinnvolle Applikationen gibt, die man bauen kann. Aber das ist noch sehr weite Zukunftsmusik. BBC hat ein (leider deprecated) Framework, das recht vielversprechend aussieht: TV Application Layer.


    Probleme:

    - Der Browser muss mit CE19 auf jeden Fall in einem Docker Container auf der Zielmaschine laufen. Die notwendigen Libs habe ich nicht nativ kompilieren können. Ich denke CE20-ng und CE21-ng werden auch nicht ohne Docker funktionieren. Bei CE20-ne, CE21-ne und LibreELEC gibt es Hoffnung, daß man die Libs alle zusammen bekommt (für CE19 ist das bei libgbm gescheitert, in der libmali sind notwendige Funktionen nicht vorhanden).

    Mir fehlen allerdings die Testsysteme, um das zu probieren.


    - Den Transcoder habe ich auf einem anderen Rechner installiert, der schneller ist. Der Transcoder selbst kann aktuell nur den Video-/Audiostream kopieren. Ein echtes Transcoding für den Fall, daß die Eingangs-Codecs nicht passen (h264, h265, aac, ac3,..) muss noch implementiert werden. Auch die Auswahl des besten Streams im Falle von mpeg-dash ist etwas, was noch fehlt.

    Ich muss noch testen, ob das Video-/Audio-Stream-Copy auf dem odroid schnell genug funktioniert, allerdings bin ich mir nicht sicher, ob das sinnvoll ist. Gerade, wenn eine SD-Karte im Einsatz ist könnte das etwas lebensverkürzend sein.


    - Der Seitenaufbau fühlt sich nicht so geschmeidig an, wie auf dem Entwicklungsrechner. Aber das dürfte zu verschmerzen sein. Vielleicht kann ich irgendwo noch etwas Speed rausholen.


    - Der Browser muss leider noch manuell auf der Konsole gestartet werden. Ein automatischer Start zusammen mit dem Plugin muss noch implementiert werden. Mir ging es erst einmal nur darum, zu prüfen, ob alles auf dem odroid läuft.


    Installation:

    - Das VDR-Plugin ist problemlos.

    - Der Remotetranscoder hat auch keine großen Haken. ffmpeg und ffprobe müssen auf der Maschine installiert sein, auf dem der Transcoder läuft.

    - Die Installation des Browsers inkl. Docker habe ich für CE19 auf Github beschrieben.

    - Binaries (amd64, armhf, arm64) für die Docker-Images und den Browser lasse ich per Github Workflow erzeugen und damit kommt man schnell zu einem Ergebnis.


    Benutzer mit einem amd64 und X11 oder einem aktuellen mesa dürften die geringsten Probleme haben, alles zum laufen zu bekommen.


    Als nächstes muss ich das Plugin erweitern, damit der Browser automatisch startet. Die aktuelle Situation (Start auf einer anderen Shell) ist absolut nicht zufriedenstellend. Und danach muss ich entscheiden, ob Seiten anderer Sender oder der Transcoder die freien Timeslots bekommen oder ob das bedarfsorientiert erledigt wird.


    Falls es jemand mit CE/LE probieren will und evt. Lösungen für auftretende Probleme hat, würde ich mich über eine Rückmeldung freuen :)

    Auch falls doch mal irgendwas crasht oder nicht funktioniert wäre eine Rückmeldung schön. Aber wie gesagt: Die freien Timeslots sind das Problem.

    Auch gut gefüllte Datenbanken (hbbtv_urls.db) werden gerne genommen. Damit könnte man dann Seiten aufrufen für Sender, die man eben nicht empfängt.


    Links:

    https://github.com/Zabrimus/vdr-plugin-web

    https://github.com/Zabrimus/remotetranscode

    https://github.com/Zabrimus/cefbrowser


    https://github.com/Zabrimus/docker-images

    https://github.com/Zabrimus?tab=packages

    https://github.com/Zabrimus/cefbrowser/releases

  • Wow, gefällt mir. Wenn ich Zeit habe werde ich das in jedem Fall mit LE/Rockchip ausprobieren.

  • Hallo Zabrimus,


    habe cefbrowser erfolgreich in der Libreelec Umgebung bauen können. Mit den install_dirs habe ich noch Probleme.

    Wo sollen denn die Dateien am Ende liegen?

    cefbrowser und vdrclient unter /usr/local/bin?

    Und /Release wo?

  • Bzw. anders gefragt: Was wird am Ende wo benötigt ;) ?

  • Ok, damit baut es bei mir in VDR*ELEC für LibreELEC/arm. Die Dateien landen in /storage/browser.

    Einfach zur Info für dich, weiter habe ich noch nicht getestet.


    Gruß

    Andreas

  • Oh cool. Auch noch direkt in LE als package untergebracht?

    Die interessante Frage ist, ob der Browser auch überhaupt startet. Unter CE ging es leider ohne Docker nicht.


    Hast du schon die aktuellste Version des Browsers? Gestern ist es mir endlich gelungen auch Arte.tv zum rennen zu bringen und damit funktionieren die Sender von ARD/ZDF/Arte ziemlich zufriedenstellend. Die Privaten nerven manchmal etwas mit der Werbung und echt schlimm fand ich das Tracking (mindenstens jede Sekunde wird ein Micro-Gif angefordert). Das geht gar nicht.

    Aber die Privaten und Nischensender (sofern HbbTV vorhanden) muss ich mir jetzt noch genauer vornehmen.


    Auf Github habe ich eine neue Doku (für CE-19) untergebracht, wie ich alles zum laufen gebracht habe. Mittlerweile ist der Browser und das Plugin auch auf meinem Produktivsystem.

  • Die interessante Frage ist, ob der Browser auch überhaupt startet. Unter CE ging es leider ohne Docker nicht.

    Soweit bin ich noch nicht ;) Ich habe bisher nur gebaut. Auf dem Client ist noch gar nichts ;)

  • Startet nicht :) Da sind noch einige Abhängigkeiten zu erfüllen... Mal schauen.

  • So, es versucht schonmal zu starten:


    cefbrowser:

    Code
    root@rockchip1:~/cefbrowser$ LD_LIBRARY_PATH="/storage/cefbrowser;/storage/libs" ./cefbrowser -c sockets.ini
    [0706/162443.665388:ERROR:ozone_platform_x11.cc(239)] Missing X server or $DISPLAY
    [0706/162443.665656:ERROR:env.cc(255)] The platform failed to initialize.  Exiting.
    Segmentation fault

    remotetranscode:

    Code
    andreas@server02:~/git/remotetranscode/build$ ./remotrans -c /home/andreas/git/remotetranscode/config/sockets.ini
    [2023-07-06 16:23:24.074] [transcoder] [error] [main.cpp:22] http mount point ./movie does not exists. Application will not work as desired.
  • wenn ich das Verzeichnis movie erzeuge, scheint remotetranscode zu laufen. Liegt dann offen in der Konsole.

  • Soweit kann ichs bringen.

  • http mount point ./movie does not exists. Application will not work as desired.

    Das movie Verzeichnis sollte eigentlich beim Build mit angelegt werden bzw. der Inhalt von static-content/movie dahin kopiert. Hast du meson compile; meson install ausgeführt?


    Zum Start des Browsers kann man noch die Varianten versuchen:

    --enable-features=UseOzonePlatform --ozone-platform=headless

    --off-screen-rendering-enabled

    Oder eine Kombination daraus. Der Parameter "--headless" wird nur von Chrome/Chromium verwendet. Das Framework benötigt "--off-screen-rendering-enabled".

  • Das movie Verzeichnis sollte eigentlich beim Build mit angelegt werden bzw. der Inhalt von static-content/movie dahin kopiert. Hast du meson compile; meson install ausgeführt?

    Naja, ich habe das über VE laufen lassen, evtl. ist mir das was entwischt. Sorry Schmarrn. Ich habe meson install vergessen.


    Zum Start des Browsers kann man noch die Varianten versuchen:

    --enable-features=UseOzonePlatform --ozone-platform=headless

    --off-screen-rendering-enabled

    Oder eine Kombination daraus. Der Parameter "--headless" wird nur von Chrome/Chromium verwendet. Das Framework benötigt "--off-screen-rendering-enabled".

    Funktioniert nicht. Ich muss da wahrscheinlich einfach etwas mehr probieren.

    Edited once, last by rell ().

  • Hm vielleicht laüft er ja und ich kann die ERROR Meldungen ignorieren?


  • Stimmt. Gerade mal geschaut. Auf meinem odroid habe ich die ganzen egl und x-Display Fehler und es läuft.

    Vielleicht mal den VDR starten und einfach das Plugin aufrufen. Den remotetranscoder braucht du frühestens, wenn du ein Video sehen willst.

  • Ich baue mir jetzt mal ein aktuelles Image mit _vdr-plugin-web und _cefbrowser und evtl. kann ich es später testen. Bin gespannt.

    Ich hab nochmal einen commit ins git nachgeschoben mit der Version, die grad gelaufen ist.


    Bisher habe ich die notwendigen libs per Hand nach /storage/libs kopiert, daher der LD_LIBRARY_PATH. Habe jetzt mal versucht, die in PKG_DEPENDS_CONFIG reinzupacken, mal sehen, ob alle dabei sind.

    Außerdem muss ich da auch /storage/cefbrowser angeben, sonst findet er die libcef.so nicht.

    Damit startet er dann erstmal:

    Code
    LD_LIBRARY_PATH="/storage/cefbrowser;/storage/libs" ./cefbrowser --config sockets.ini --ozone-platform=headless

    Fürs bauen des VDR*ELEC Images muss ich SSL_CERT_DIR="/etc/ssl/certs" voranstellen, sonst holt er mir die subprojects nicht ab. Die ssl Unterstützung wurde da wohl aus den python url Methoden entfernt, wenn ich das richtig verstanden habe. Ist erstmal ein workaround.


    .. für den Fall, dass du das selbst probieren willst. Ist allerdings auf LibreELEC Basis.

  • Außerdem muss ich da auch /storage/cefbrowser angeben, sonst findet er die libcef.so nicht.

    Das ist seltsam. Weil der Browser selbst sucht sich alle notwendigen Dateien und Libs im aktuellen Verzeichnis. Das ist auch der Grund, warum der Browser genau in dem Verzeichnis gestartet werden muss.


    Fürs bauen des VDR*ELEC Images muss ich SSL_CERT_DIR="/etc/ssl/certs" voranstellen

    Hmm. Okay? Ich musste bisher meson downgraden (auf 0.63), weil neue Versionen auch einen seltsamen Fehler geworfen haben. Und ich keine wirkliche Lust habe Regression-Fehler zu suchen.


    Ist allerdings auf LibreELEC Basis.

    Ja. Wenn der AMLGX durchläuft, will ich es mal wieder probieren ;)

  • So, alles mal drauf und lässt sich starten. Fast:


    Code
    Jul 07 13:09:12 rockchip1 vdr[6589]: [6589] loading plugin: /usr/local/lib/vdr/libvdr-web.so.2.6.3
    Jul 07 13:09:12 rockchip1 vdr[6589]: [6589] [vdrweb] http ip (transcoder) not found

    Gruß

    Andreas


    Die sockets.ini ist eigentlich auf allen Rechnern gleich. Muss ich da noch irgendwelche Port-Freigaben setzen?

  • Mit nmap kann ich sehen, dass auf dem transcoder rechner der Port 50002/tcp offen ist, auf dem browser 50001/tcp.

Participate now!

Don’t have an account yet? Register yourself now and be a part of our community!