[Announce] HbbTV plugin / offscreen browser v0.0.3

  • Die stream.mpd ist eine xml


    vdr-User-# 755 to_h264 chk_r vdr-transcoding

  • Ohne es probiert zu haben: Mit neuem ffmpeg , wo libxml2 enabled sein muss, könnte ffmpeg -i xxx.mpd -codec copy output.ts gehen.

    vdr-2.4.2
    softhddevice,, dbus2vdr, dvd, epgsearch, femon, filebrowser, graphlcd, graphtftng,
    hbbtv, menuorg, osdteletext, radio, recsearch, streamdev-server, tvguide, vnsiserver

    ubuntu bionic, linux-4.15.0 M3N78-VM (Nvidia 8200) CIne CT-V7 DVB-C
    yavdr-ansible als Basis mit vielen Änderungen

  • 500 Command unrecognized: "GETURL"

    Das Kommando sollte wieder funktionieren. Dazu müssen aber sowohl der Browser, als auch das Plugin aktualisiert werden.


    Die stream.mpd ist eine xml

    Das habe ich gesehen. Aber so richtig schlau bin ich aus den Werten nicht geworden. Aber irgendwie scheint VLC daraus etwas machen zu können, obwohl unklar ist, wie. Vielleicht finde ich dazu irgendwo mal eine Spezifikation.


    Ohne es probiert zu haben: Mit neuem ffmpeg , wo libxml2 enabled sein muss, könnte ffmpeg -i xxx.mpd -codec copy output.ts gehen.

    Genau das hatte ich probiert und dann kam die oben erwähnte Fehlermeldung. FFmpeg 4.1.4 funktioniert nicht. Eine noch aktuellere Version muss ich mir erst compilieren und dann testen.


  • Das funktioniert:



    vdr-User-# 755 to_h264 chk_r vdr-transcoding

  • Das funktioniert:

    Ich habe mir eine aktuellere Version von ffmpeg compiliert. Das muss irgendeine 4.2er git version sein, die noch auf der Platte lag.

    Ja und damit funktioniert es. Also scheint ffmpeg 4.2.x das Minimum zu sein, mit dem es klappt. :]


    Juchuuu.


    Edit: Aber da ist noch Arbeit im Browser notwendig. Die Video-URL ist erst ein mpd-File und dann wird auf blob:xxxx gewechselt. Ich denke, daß muss ich irgendwie unterbinden.

  • Ich habe gerade die Version 0.0.2 getagged - sowohl Browser, als auch Plugin. Das ppa baut auch gerade, wobei ich wahrscheinlich keinen Fehler bei den Versionsnummern ausgelassen habe. Die nächsten Versionen muss ich vorsichtiger angehen.


    Browser:

    Leider scheint es so zu sein, daß manche Seiten mal text/html und mal einen hbbtv Content-Type im HTTP-Header liefern. Das war z.T. die Ursache, das nicht alle Seiten sofort geladen worden sind. Im Browser wird sich nun gemerkt, hinter welcher URL mal ein hbbtv Content-Type stand und dann dieser verwendet. Es ist ein wenig besser geworden.



    Plugin:

    Im Plugin dürfte der neue Menupunkt "Reopen OSD" interessant sein. Damit soll - so die Theorie - die letzte Version des Browser-OSD neu geöffnet werden. Falls das OSD also mal absichtlich oder versehentlich geschlossen wurde, kann man mit dem Menupunkt das OSD wieder öffnen.



    Ich weiß nicht, wie lange es dauert, die Probleme mit tagesschau, n-tv und neuerdings ORF und SRF1 zu lösen - und wahrscheinlich auch anderen Sendern.

    Das sieht auf jeden Fall etwas anstrengender aus.


  • Ich weiß nicht, wie lange es dauert, die Probleme mit tagesschau, n-tv und neuerdings ORF und SRF1 zu lösen - und wahrscheinlich auch anderen Sendern.

    Das sieht auf jeden Fall etwas anstrengender aus.

    Jetzt geht bei mir die tagesschau gar nicht mehr :-( Bei auswählen über den Red Button kommt es nach wie vor gar nicht und beim anwählen über die URL Liste kommen nur wilde Zeichen in der oberen Zeile in Bild.


    Im Log steht:

    Code
    1. [2020-06-26 07:41:19.945] [browser] [error] JS ERROR: Source http://www.tagesschau.de/hbbtv/:1, Message: Uncaught TypeError: Cannot read property 'appendChild' of null
    2. [2020-06-26 07:41:19.945] [browser] [error] JS ERROR: Source http://www.tagesschau.de/hbbtv/:1, Message: Uncaught TypeError: Cannot read property 'insertBefore' of null
    3. [2020-06-26 07:41:19.945] [browser] [error] JS ERROR: Source http://www.tagesschau.de/hbbtv/:1, Message: Uncaught TypeError: Cannot read property 'style' of null
  • Bei auswählen über den Red Button kommt es nach wie vor gar nicht

    Das würde ich mir gerne mal näher ansehen. Allerdings müsstest du dafür das browser.log löschen und den Browser neu mit dem loglevel "--trace" (statt --debug oder --info oder was auch immer) neu starten. Es wird allerdings extrem viel geloggt und mir würde es reichen bis zum Klick auf Tagesschau in der Red-Button Liste.

  • Ich habe von beiden GITs die aktuellen Versionen. Das Log habe ich angehängt.


    Da habe ich den Red Button aufgerufen dann nach rechts gewandert bis auf tagesschau und ok gedrückt. Dann kam nix mehr.


    mfg

    jojo61

  • Hmm. Ich gehe grade die gestrigen Commits durch. Und es gab im Browser nur 2 Änderungen + die zurückgenommene Änderung für text/html.

    1. Jede neue URL wird geladen ohne zu vergleichen, ob der Browser diese URL aktuell geladen hat

    2. Der Content-Type für hbbtv-Seiten wird gespeichert und verwendet, aber auch nur, wenn wirklich hbbtv geliefert wurde


    Die Tageschau liefert unter der URL eine sehr simple Seite, die nur ein ein Element im Header hat:

    Und wenn genau für diese Seite der Content-Type im HTTP-Header nicht "text/html" ist (oder falls mein fehlerhafter Commit noch vorhanden ist), dann tritt dein Fehler auf.


    Bei mir sieht das im Trace-Log so aus:

    Die letzte Zeile ist die Entscheidende.


    Aber ich kann mir nicht erklären, warum die gestrigen Änderungen den Fehler erzeugen sollen.


    edit: Lesbarer trace-log

  • Okay. Bei dir läuft irgendwas falsch.


    1. Problem

    Der Content-Type für die Seite ist eben nicht "application/vnd.hbbtv.xhtml+xml".


    2. Problem

    Und hier liegt der umgekehrte Fall vor. "text/html" sollte es nicht sein, weil dies eben eine HbbTV-Seite ist.



    So sieht das bei mir aus:


    Der falsche Content-Type in 1. verhindert durch das Caching auch, daß du die Seite wohl nie aufrufen kannst. Ich werde gleich eine Änderung für den Browser committen, der den Cache ausschaltet. Das sollte zumindest Problem 1 lösen.

    Entweder werden falsche Header-Daten geliefert oder der Autodetect in Chromium/CEF geht schief. Vielleicht kann ich da eingreifen, aber das muss ich mir anschauen.



    Info: Die Änderung habe ich gerade committed.

  • Der falsche Content-Type in 1. verhindert durch das Caching auch, daß du die Seite wohl nie aufrufen kannst. Ich werde gleich eine Änderung für den Browser committen, der den Cache ausschaltet. Das sollte zumindest Problem 1 lösen.

    Entweder werden falsche Header-Daten geliefert oder der Autodetect in Chromium/CEF geht schief. Vielleicht kann ich da eingreifen, aber das muss ich mir anschauen.



    Info: Die Änderung habe ich gerade committed.

    So das aufrufen über die URL geht nun wieder. Aber über den Red Button geht es immer noch nicht. Das ist wohl der 2. Fall oder ?


    PS:

    Nur noch zur Info. Ich gebe --commandline=--password-store=basic als parameter für dem browser mit. Sonst fragt er mich nach dem Keystore passwort beim ersten starten. Das könntest du evtl. noch als default einbauen.

  • So das aufrufen über die URL geht nun wieder. Aber über den Red Button geht es immer noch nicht. Das ist wohl der 2. Fall oder ?


    PS:


    Nur noch zur Info. Ich gebe --commandline=--password-store=basic als parameter für dem browser mit. Sonst fragt er mich nach dem Keystore passwort beim ersten starten. Das könntest du evtl. noch als default einbauen.

    Ja. Das ist der zweite Fall. Ich lese gerade den Code und versuche eine Lösung zu finden, wie ich den Content-Type korrigieren kann.


    password-store? basic? Was? Ich habe das mal probiert und es scheint nicht schädlich zu sein. Aber wie bist du denn auf den Parameter gekommen?

    Der Browser kann vom Plugin gestartet werden oder unabhängig vom Plugin. Ich habe in den CefSettings oder ähnlichem, keinen Hinweis gefunden, wie ich das im Browser direkt einstellen kann. Ich weiß auch gar nicht, welche der Prozesse die Verantwortung für den Password-Store übernimmt (Render, Network, JS, ...).
    Ich kann es im Plugin einbauen... Aber zuvor würde ich gerne wissen, ob es auch noch bei anderen funktioniert, die den Parameter aktuell nicht gesetzt haben.


    Umfrage:

    Braucht jemand den Parameter "--pasword-store=basic"? Und falls nicht: Bemerkt ihr Probleme oder anderes unerwünschtes Verhalten mit dem Parameter?

  • Ich bin beim Neubauen in vdr 2.4.3 wieder drüber gestolpert, dass make -j4 plugins bei hbbtv Fehler wirft. Beim Erzeugen der libvdr-hbbtv.so ist der cmake von nng noch nicht durch und es fehlt die nng/build/libnng.a.

    Ich denke es reicht in in der Makefile folgende Änderung

    Code
    1. -$(SOFILE): $(OBJS)
    2. +$(SOFILE): buildnng $(OBJS)

    Damit wird zuerst mit -j4 nng gebaut und dann mit -j4 der Rest

    vdr-2.4.2
    softhddevice,, dbus2vdr, dvd, epgsearch, femon, filebrowser, graphlcd, graphtftng,
    hbbtv, menuorg, osdteletext, radio, recsearch, streamdev-server, tvguide, vnsiserver

    ubuntu bionic, linux-4.15.0 M3N78-VM (Nvidia 8200) CIne CT-V7 DVB-C
    yavdr-ansible als Basis mit vielen Änderungen

  • Ich denke es reicht in in der Makefile folgende Änderung

    Ich habe das mal committed.



    Das Problem mit der Navigation in der Tagesschau widersetzt sich all meinen Bestrebungen. Das Javascript scheint die Pfeil-Tasten nicht abzufangen und zu verarbeiten (im Gegensatz zu z.B. VK_0, .. ,VK_3 und andere). Also müsste die Navigation eigentlich aus dem Browser selber heraus gemacht werden. Aber ich komme nicht dahinter, was schief geht.


    Mein Versuch Videos in Sat1/Pro7 abzuspielen scheitert auch. Vom Server bekomme ich nur ein HTTP 403 (forbidden). In der FFmpeg Commandline hänge ich schon die Cookies und den User-Agent an, aber das scheint nicht zu reichen.


    Verschiedene Trackingsites gingen mir auf die Nerven, also gibt es jetzt die neue Config block_url.config, in der man Substring-Pattern eintragen kann, um den Request (falls der Substring in der URL zu finden ist), direkt zu canceln.


    Allerdings läuft es auch bei RTL (und zugehörigen Sendern) nicht gut. In der Chrome-Extension und im Javascript Teil habe ich die Abfrage nach FireHbbtv gefunden. Hmm... Vielleicht komme ich noch dahinter.


    Insgesamt gesehen ist es schon seltsam, wieviele Probleme es bei HTML-Seiten und Javascript in einem Browser geben kann. Mit all den Schwierigkeiten hatte ich überhaupt nicht gerechnet.

  • Update:

    Videos von Sat1/Pro7 aus der Mediathek werden jetzt abgespielt. Die Ursache lag in der URL, die ein "&" beinhaltet. Dieses führte dann nicht zu dem gewünschten Verhalten, sowohl mit system, execv und Konsorten.


    Allerdings bleibt irgendwie das OSD offen und überdeckt das ganze Video. Wenn man das OSD schliesst, kann man das Video sehen. Über das Menu kommt man wieder dran, aber in der Seite wird anscheinend das Schließen des OSD nicht getriggert.

    Javascript-Debugging wird wohl nie mein Steckenpferd :rolleyes:


    Edit: Habe ich schon erwähnt, daß die Werbeeinblendungen in den Videos von Sat1/Pro7 extrem störend sind?:|

  • Mal eine Anmerkung zu dem Problem.


    Die Parameter sollten niemals als zusammenhängender String übergeben werden! Die Idee ist es, "argv" direkt als Array zu übergeben. Wenn du das machst kommt keine Shell zum Einsatz und die Parameter gehen direkt an das Zielprogramm. Genau genommen kannst du so das "argv" das im Zielprogramm ankommt direkt beeinflussen ohne das eine Shell dazwischen einen zusammenhängenden String teilen muss. Dann macht auch kein "&" mehr Probleme.


    Immer wenn man eine Befehlszeile selber als zusammenhängenden String baut und das an eine Shell übergibt resultiert das in einer Sicherheitslücke. Es ist zumindest sehr schwer alle denkbaren Fälle zu behandeln die eine Shell zur Ausführung von Programmcode bewegen könnte. Auch wenn die Lücke hier wohl kaum jemand ausnutzen würde.


    Hier ist eine Beispiel wie man Parameter richtig übergibt:

    http://openbook.rheinwerk-verl…xKap07009040002001F028177