[Announce] HbbTV plugin / offscreen browser v0.0.9

  • jojo

    1. An einem Return im Browser habe ich mich schon versucht und bin gescheitert. Die normale Browserfunktionalität wie z.B. Back funktioniert nicht, da die URL nicht geändert wird, sondern die Seite per Javascript umgeschrieben wird. Vielleicht müsste man die HTML-Sourcen zwischenspeichern und neu "laden". Da werde ich nochmal rangehen.

    Aus dem HbbTV-Modus gehe ich immer mit der Menu-Taste (bei Videos ist da noch ein Fehler) und mit der Exit-Taste meiner Fernbedienung. Ich meine ich hätte KEY_ESC darauf gelegt.


    2. Den Eintrag Tagesschau kann ich immer noch auswählen und das Streamingbild scheint durch den letzen Fix (nächster Post) kein "Plugin not found" mehr zu liefern, allerdings auch nicht das aktuelle Fernsehbild. Das größte Problem ist, überhaupt herauszufinden, daß das TV skaliert irgendwo dargestellt werden soll und dann auch noch mit welchen Koordinaten/der Größe. Das erfordert weitere Forschungen....


    3. Okay. Dann kein Channel-Switch. Ich habe keinen "echten" HbbTV-Fernseher. Mir fehlt also der Vergleich und so muss ich raten ;)


    4. Das mischen von HbbTV und VDR Channel-Anzeige muss ich später angehen, falls es überhaupt eine sinnvolle Möglichkeit gibt.

  • Das bekomme ich beim Abspielen auf Arte+7

    Arte scheint irgendwie anders zu sein, als die normalen ÖR Seiten. Aber ich denke, ich habe eine Lösung gefunden. Dazu müsste sowohl der Browser, als auch das Plugin aktualisiert werden.

    Die Plugin-Meldungen waren immer vorhanden, aber immer hinter der eigentlichen Seite oder dem Video, also nicht sichtbar. Die Änderung der Bitrate auf Arte sollte auch funktionieren - hoffe ich.


    Dann vielleicht svdrpsend plug hbbtv status ?



    Das lässt sich machen, denke ich.

  • 2. Den Eintrag Tagesschau kann ich immer noch auswählen und das Streamingbild scheint durch den letzen Fix (nächster Post) kein "Plugin not found" mehr zu liefern, allerdings auch nicht das aktuelle Fernsehbild. Das größte Problem ist, überhaupt herauszufinden, daß das TV skaliert irgendwo dargestellt werden soll und dann auch noch mit welchen Koordinaten/der Größe. Das erfordert weitere Forschungen....

    Es braucht nur die Koordinaten wo es dargestellt werden soll. Skalieren macht dann das plugin. Das video läuft derzeit im Hintergrund. Wenn ich die Back Taste drücke dann sieht man das tagesschau video, aber dann im Vollbild. Dann ist aber die Steuerung des hbbtv weg :-)

  • Ich hatte gestern alles nochmal kompiliert, upgedatet und installiert.

    Wenn yavdr gestartet ist muss ich einen „restart Browser“ in hbbtv machen! Erst danach ist der VDR bedienbar.
    Das ich hbbtv bei normaler Nutzung zum tv schauen beenden muss war mir klar aber es dauert der Systemstart sehr lange bis zum Tv-Bild und es ist von vornherein gar kein umschalten möglich. Anscheinend blockt das Plugin hier irgendetwas... (vielleicht sollte ich den Start des Browsers verzögern) weiter bin ich noch nicht gekommen

  • Arte sieht jetzt besser aus, danke.


    vdr-User-# 755 to_h264 chk_r vdr-transcode github

  • Ich bekomme beim Abspielen von Videos aus einer Mediathek immer wieder

    ERROR: skipped xxx bytes to sync on start of TS packet (von device.c)

    weil bei HbbtvVideoPlayer::readTsFrame() nicht immer ein Vielfaches von 188 Bytes ankommt.

    Das führt zu Störungen im Bild.

    vdr-2.6.1

    softhddevice,, dbus2vdr, dvd, epgsearch, femon, graphtftng, hbbtv, menuorg,
    osdteletext, radio, recsearch, satip, tvguide, vnsiserver

    ubuntu focal, yavdr-ansible, linux-5.10 ,AsRock J4105, CIne CT-V7 DVB-C

  • Ich bekomme beim Abspielen von Videos aus einer Mediathek immer wieder

    ERROR: skipped xxx bytes to sync on start of TS packet (von device.c)

    weil bei HbbtvVideoPlayer::readTsFrame() nicht immer ein Vielfaches von 188 Bytes ankommt.

    Das führt zu Störungen im Bild.

    Ja da muss im BrowserCommunication::Action noch etwas gemacht werden damit beim Typ 3 immer ein vielfaches von 188 im Buffer ist.

    Im Prinzip muss man den Rest noch nachladen mit nn_recv bevor man dann readTSFrame aufruft.

  • Aktuelle Commits:

    Es wird endlich ein fortlaufendes Logfile geschrieben und nicht bei jedem Neustart überschrieben. Dazu hat der Browser den neuen Parameter --logfile=<logfile> bekommen. Falls der Browser aus dem Plugin gestartet wird, dann muss nichts geändert werden.

    Plugin und Browser müssen dazu beide aktualisiert werden.


    Es gibt das neue SVDRP Kommando STATUS, das einfach nur ausgibt, ob entweder das OSD oder der Videoplayer offen sind.


    Es werden Warnung in das Browserlog geschrieben, wenn der Browser Videodaten schreibt, deren Länge kein Vielfaches von 188 ist. Das Plugin macht dasselbe, wenn die Länge der empfangenen Daten auch kein Vielfaches von 188 ist.

    aber es dauert der Systemstart sehr lange bis zum Tv-Bild und es ist von vornherein gar kein umschalten möglich

    Hmm. Das Plugin selbst macht beim Start nicht viel. Aber vielleicht dauert die Instanzierung einer anderen Klasse etwas länger. Bisher ist mir aber kein Geschwindigkeitsproblem aufgefallen. Ohne das Plugin startet VDR viel schneller


    weil bei HbbtvVideoPlayer::readTsFrame() nicht immer ein Vielfaches von 188 Bytes ankommt.

    Siehe oben. Aber ich bin mir fast sicher, das nur Vielfaches von 188 gesendet/empfangen werden. Vielleicht gibt es noch ein anderes Problem. Hmm... Prüft doch einfach mal bei Gelegenheit in beiden Logs (syslog für VDR und das Browser Log, ob es irgendwelche Meldungen dazu gibt. Ein Grep nach 188 sollte reichen).


    Wenn yavdr gestartet ist muss ich einen „restart Browser“ in hbbtv machen! Erst danach ist der VDR bedienbar.

    yavdr? Das Plugin/den Browser selbst compiliert oder Pakete verwendet?

  • Ich habe selbst kompiliert...

  • Es braucht nur die Koordinaten wo es dargestellt werden soll. Skalieren macht dann das plugin.


    Nach ein paar Tests habe ich herausgefunden, wie ich an die Koordinaten des Videos komme. Ich erhalte z.B. solche Werte

    Die HTML Seite hat immer eine fixe Größe von 1280 x 720. Ich habe mit einem Screenshot die Werte überprüft und die passen.

    Die linke obere Ecke des Videos ist 702/199. Die Breite 520 und Höhe 291.


    Skaliert man die Seite mit dem Faktor 1.5, dann erhält man die Full-HD Auflösung 1920x1080. Und damit wäre das Video bei 1053/298.5 mit einer Breite von 780 und einer Höhe von 436.5.


    Nur. Was mache ich jetzt damit?

  • Hi,

    there are channels which let the live picture run in scaled box, i believe it's ntv. (the browser did also crash on this channel)

    CU

    9000h

    Es ist eagl in wlehcer Reiehnfogle die Bchustebaen in Woeretrn vokrmomen. Huapstache der estre und leztte Bchustbae sitmmen.

  • Browserlog:

    [2020-06-19 22:33:23.048] [browser] [error] Send Video data, but size is not a multiple of 188: 31640

    [2020-06-19 22:33:23.049] [browser] [error] Send Video data, but size is not a multiple of 188: 2388

    syslog (vdr):

    Jun 19 22:33:23 vdr[27085]: [27149] Got Video data, but size is not a multiple of 188: 31640

    Jun 19 22:33:23 vdr[27085]: [27149] ERROR: skipped 132 bytes to sync on start of TS packet at device.c/PlayTs(1583)

    Jun 19 22:33:23 vdr[27085]: [27149] ERROR: skipped 132 bytes to sync on start of TS packet at device.c/PlayTs(1583)

    Jun 19 22:33:23 vdr[27085]: [27149] ERROR: skipped 132 bytes to sync on start of TS packet at device.c/PlayTs(1583)

    Jun 19 22:33:23 vdr[27085]: [27149] ERROR: skipped 132 bytes to sync on start of TS packet at device.c/PlayTs(1583)

    Jun 19 22:33:23 vdr[27085]: [27149] Got Video data, but size is not a multiple of 188: 2388

    vdr-2.6.1

    softhddevice,, dbus2vdr, dvd, epgsearch, femon, graphtftng, hbbtv, menuorg,
    osdteletext, radio, recsearch, satip, tvguide, vnsiserver

    ubuntu focal, yavdr-ansible, linux-5.10 ,AsRock J4105, CIne CT-V7 DVB-C

  • there are channels which let the live picture run in scaled box, i believe it's ntv. (the browser did also crash on this channel)

    Yes. ntv is really a problem but i don't know why. And this channel seems to trigger multiple problems - including lost sockets. I'm currently thinking of changing the transport protocol from unix domain sockets to tcp sockets. I will give it a try - if i find free ports.

    But ntv also shows a strange difference between my patched hbbtv code and the chrome extension, which uses nearly the same code. The patched sources insert a <video> element, but with an empty src. And the extension does not add a <video> element at all.


    Do you know another channel, which shows live TV in a scaled box? I remember seeing this on some channels, but i'm not able to find these channels anymore. I need to investigate, what exactly happens in the page.

    [2020-06-19 22:33:23.048] [browser] [error] Send Video data, but size is not a multiple of 188: 31640

    Das ist seltsam. Äußerst seltsam. Ich hatte erwartet, die Meldung nicht zu sehen, bzw. in meinen Tests gelang mir das nicht.

    Passiert das nur bei Videos auf einem bestimmten Kanal oder ist das ein generelles Problem? Bisher ging ich davon aus (und habe es nicht anders beobachtet), daß FFmpeg nur Vielfaches von 188 liefert, wenn ich TS als Ausgabe angebe.

    So oder so. Ich muss mir dazu eine Lösung überlegen.



  • Die error Messages mit Bildfehler hatte ich auf ARD (Babylon Berlin 1. Folge) und auch auf ZDF.

    Code
    1. Jun 20 09:55:35 vdr vdr[1153]: [1223] ERROR: skipped 132 bytes to sync on start of TS packet at device.c/PlayTs(1590)
    2. Jun 20 09:55:39 vdr vdr[1153]: [1223] ERROR: skipped 132 bytes to sync on start of TS packet at device.c/PlayTs(1590)
    3. Jun 20 09:55:39 vdr vdr[1153]: [1223] ERROR: skipped 132 bytes to sync on start of TS packet at device.c/PlayTs(1590)

    Und mit der neuen Version:


    Code
    1. Jun 20 15:44:35 vdr vdr[2568]: [2601] Got Video data, but size is not a multiple of 188: 32016
    2. Jun 20 15:44:35 vdr vdr[2568]: [2601] ERROR: skipped 132 bytes to sync on start of TS packet at device.c/PlayTs(1590)
    3. Jun 20 15:44:35 vdr vdr[2568]: [2601] Got Video data, but size is not a multiple of 188: 5208
    4. Jun 20 15:44:38 vdr vdr[2568]: [2601] Got Video data, but size is not a multiple of 188: 30512
    5. Jun 20 15:44:38 vdr vdr[2568]: [2601] ERROR: skipped 132 bytes to sync on start of TS packet at device.c/PlayTs(1590)
    6. Jun 20 15:44:38 vdr vdr[2568]: [2601] Got Video data, but size is not a multiple of 188: 24948
    7. Jun 20 15:44:39 vdr vdr[2568]: [2601] Got Video data, but size is not a multiple of 188: 30324
    8. Jun 20 15:44:39 vdr vdr[2568]: [2601] ERROR: skipped 132 bytes to sync on start of TS packet at device.c/PlayTs(1590)
    9. Jun 20 15:44:39 vdr vdr[2568]: [2601] Got Video data, but size is not a multiple of 188: 28332

    The post was edited 1 time, last by Murry ().

  • Hier ein Kochrezept:

    Mit diesen Daten rufst du cDevice::PrimaryDevice()->ScaleVideo(cRect); auf. cRect kennst du ja schon. Dann wird das Video genau dahin scaliert. Allerdings musst du die Paramter wie du schon geschrieben hast dem realen OSD Size anpassen. Bei Full HD also mal 1,5. bei UHD entsprechend mal 3. Genau genommen kannst du den x und y Faktor aus der OSD Size ableiten.

    Wenn du das Video beendest dann musst du es wieder Zurück setzen. Da kannst du dann einfach cRect = {0,0,0,0} schicken.


    Du musst natürlich das OSD an der Stelle noch transparent machen. Derzeit ist es wohl default schwarz.


    Hier ein Beispiel wie ich es getestet habe:

  • jojo61

    Perfekt. Dann muss ich die Daten mal in echt liefern und ein wenig rumrechnen bis es passt. Auf jeden Fall klingt das machbar.

    Danke!

    Aber zuerst muss ich einen anderen Major-Bug beseitigen. Ich bin endlich dahinter gekommen, warum die Sockets teilweise Fehler liefern. Die Ursache kenne ich nicht, aber ausgerechnet im Heatbeat gibt es manchmal ein false-negative: Der Browser wird nicht gefunden, obwohl er noch läuft. Dann folgt der Restart und das Drama beginnt. Die errno von nng ist m.E. nonsens. Aber dazu muss ich eine Lösung finden.

    Der Umstieg auf tcp-Sockets lief geräuschlos und ich denke, ich werde dabei bleiben, alleine um die Probleme mit den Permissions der Socket Files zu umgehen.


    Die error Messages mit Bildfehler hatte ich auf ARD (Babylon Berlin 1. Folge) und auch auf ZDF.

    Das ist dann auch ein weiterer Punkt, der untersucht werden muss.

  • Bugfixes:

    Der Heartbeat wurde gefixed (hoffentlich) und es gab auch noch ein double-free bei der Cookie-Liste. Ich weiß nicht, warum das erst jetzt auftaucht und nicht vorher bemerkt wurde.


    Neu:

    Videos werden jetzt skaliert (z.B. Tageschau).

    Aber man sieht trotzdem nichts von dem Video :( Das OSD bzw. der OSD Hintergrund überlagert das Video.

    Den schwarzen Hintergrund (für das Video-Element) habe ich gefunden und konnte den auschalten, aber dann wurde nur die allgemeine Hintergrundfarbe sichtbar.

    Ich muss jetzt forschen, wie ich Bereiche der Seite tatsächlich transparent bekomme trotz Background-Color... Eine Lösung sehe ich darin, die OSD-Bilddaten, die an den VDR übertragen werden zu manipulieren.

    Ich weiß nicht ob es CSS-Magie gibt, mit dem man einen bestimmten Bereich der Seite transparent machen kann - ungeachtet der bestehenden Hintergrundfarbe.


    Das 188er-Video Problem ist mir jetzt auch untergekommen.


  • vdr-User-# 755 to_h264 chk_r vdr-transcode github

  • Code
    1. root@vdr-wz:/# svdrpsend plug hbbtv geturl
    2. 220 VDR-WZ SVDRP VideoDiskRecorder 2.4.1; Mon Jun 22 13:44:38 2020; UTF-8
    3. 900-C: {"channelType":25,"ccid":"ccid://1.0","nid":1,"dsd":"","onid":1,"tsid":1011,"sid":11110,"name":"ZDF HD","longName":"ZDF HD","description":"OIPF (SD&amp;S) - TCServiceData doesn't support yet!","authorised":true,"genre":null,"hidden":false,"idType":15,"channelMaxBitRate":0,"manualBlock":false,"majorChannel":1,"ipBroadcastID":"rtp://1.2.3.4/","locked":false}
    4. 900 U:
    5. 221 VDR-WZ closing connection

    Auch den vdrosrbrowser neu übersetzt/installiert ?