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

  • Das ZDF machte mehr Schwierigkeiten, als angenehm war. Aus irgendwelchen Gründen holt der Browser die Daten des Requests nicht ab und der Request bleibt im Status "pending" hängen. Und dann geht nichts mehr. Ich hatte auch mit einer cURL basierten Lib probiert, ob es evt. am Netzwerk-Transfer liegt, aber selbst da passiert das. Eine Ursache und die passende Lösung habe ich nicht gefunden. Entweder mache ich etwas falsch, daß nur beim ZDF zum tragen kommt oder es gibt eine andere Ursache. Mysteriös....

    Ich hoffe, einen Workaround gefunden zu haben, der aus 2 Teilen besteht:
    1. Ich setze die Javascript Variable window.GLOBALS.noapicall = true; Damit verhindere ich den ZDF tokenTest, der sowieso aufgrund von CORS fehlschlägt, aber gerne mal in "pending" hängen bleibt.
    2. Hier setze ich eine Eigenschaft des Browsers ein, die ich zufällig entdeckt habe. Bei einem Wechsel der Domain wird unter der Haube der Mainframe ausgetauscht (der alte gelöscht inkl. pending und ein neuer erstellt). Diesen Wechsel kann ich nicht explizit triggern, sondern nur über einen Umweg. Dazu lade ich eine Seite von localhost, fange den Request aber ab, bevor er tatsächlich erzeugt wird und gebe HTTP 404 zurück. Das reicht schon, um den Mainframe auszutauschen.

    Bisherige Tests sind vielversprechend, es kann aber sein, daß evt. noch Stellen existieren, bei denen ich noch einmal zu Trick 2 greifen muss. Aber ich hoffe, das nicht nicht notwendig ist.

  • Nach Update und kurzem Test läuft das aktuell bei mir sehr schön rund und zügig - ist fest integriert im Wohnzimmer!

    Danke an dieser Stelle Zabrimus für Deine unermüdliche Arbeit :thumbup:

    Hard- / Software
    • SatIP-Server / Octopus NET - MINI ITX / Chieftec IX-01B Case / DD-Max8 / Unicable LNB - DUR-LINE UK 124 / 8 Tuner DVB-S2
    • Server / Ubuntu 24.04 / seahawk1986 - yaVDR-ansible - 2.7.5 / 6x vtuner / ProLiant ML10 v2 / VmWare-ESXI 7.0.3 / 32 GB RAM / 2x 4TB Raid1
    • Client / Ubuntu 24.04 / seahawk1986 - yaVDR-ansible - 2.7.5 / 2x vtuner / Intel NUC8i3BEH / 16 GB RAM / 512GB m.2 SSD / 85" Samsung TV / Denon X3300W AVR
  • Ich schliesse mich Taipan an und auch hier läuft es nun schön rund. Auch der crash beim beenden ist nun weg.

    Jetzt kann ich das produktiv System endlich updaten :) Super Zabrimus :thumbup:


    Edit:

    zu früh gefreut. Nach dem Update des produktiv Systems crasht es dort immer noch beim runterfahren.

    Program terminated with signal SIGSEGV, Segmentation fault.
    #0 0xef9ff1dc in BrowserClient::connect() () from /usr/local/lib/vdr/libvdr-web.so.6
    [Current thread is 1 (Thread 0xedeff400 (LWP 4562))]
    (gdb) bt
    #0 0xef9ff1dc in BrowserClient::connect() () from /usr/local/lib/vdr/libvdr-web.so.6
    #1 0xef9ff22c in BrowserClient::ping() () from /usr/local/lib/vdr/libvdr-web.so.6
    #2 0xef9ff854 in BrowserClient::InsertHbbtv(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&) ()
    from /usr/local/lib/vdr/libvdr-web.so.6
    #3 0xef9b13f4 in cAIT::cAIT(unsigned char const*, unsigned short) () from /usr/local/lib/vdr/libvdr-web.so.6
    #4 0xef9b1b50 in cAitFilter::Process(unsigned short, unsigned char, unsigned char const*, int) () from /usr/local/lib/vdr/libvdr-web.so.6
    #5 0x0011619c in cSectionHandler::Action() ()
    #6 0x00140238 in cThread::StartThread(cThread*) ()
    #7 0xf544c714 in ?? () from /usr/lib/libc.so.6
    Backtrace stopped: previous frame identical to this frame (corrupt stack?)

    Edited 2 times, last by jojo61 (April 9, 2025 at 10:28 AM).

  • Ich habe ein Problem mit dem Build des aktuellen cefbrowser. Dieser versucht (anders als die Version vor einigen Wochen), eine sqlite Lib direkt nach /usr/lib/libsqlite3.a zu kopieren. Das scheitert natürlich, da ich ja nicht als root kompiliere. Das gleiche Problem tritt auch bei libthrift auf.

    Seit meinem letzten Build hat sich die Version des sqlite Subprojektes geändert.

    Kannst Du mir einen Tipp geben wie sich das beheben bzw. wieder zum alten Verhalten ändern lässt? Ich kenne mich mit dem meson Build überhaupt nicht aus.

    Kompilieren und in Pakete verpacken tue ich das ganze per Yocto.

    Der vollständige error Log sieht so aus:

    MLD 6.5 mit vdr 2.7 - lirc yaUSBir - 4 x DD-Sat - SCR - Intel N100M - 4GB RAM - WD Green 12TB HDD - 22TB HDD - SanDisk 64GB SSD - Lian Li PC-C37B - Samsung LE40A559
    MLD 6.5 mit vdr 2.7 - Raspberry Pi 3 - rpihddevice
    MLD 5.5 mit Squeeze Play - Raspberry Pi 2 - 32GB SD - 7" Touch TFT

    Edited 2 times, last by clausmuus (April 16, 2025 at 3:33 PM).

  • Ich habe ein Problem mit dem Build des aktuellen cefbrowser. Dieser versucht (anders als die Version vor einigen Wochen), eine sqlite Lib direkt nach /usr/lib/libsqlite3.a zu kopieren. Das scheitert natürlich, da ich ja nicht als root kompiliere. Das gleiche Problem tritt auch bei libthrift auf.

    Beide Libs sollten eigentlich gar nicht kopiert werden, da sie statisch gelinkt werden und sie nach dem Build nicht mehr gebraucht werden. Ich muss schauen, wie ich die Installation in den subprojects verhindere.

    Ich kompiliere auch nicht als root und die Libs werden nach /usr/local/lib installiert. Aber da will ich die eigentlich auch nicht haben.

    Der letzte Commit sollte die Installation verhindern. Du solltest vorher das Verzeichnis subprojects/sqlite-amalgamation-3490100 löschen, damit auch das neue meson.build verwendet wird. thrift wird mit cmake gebaut und die Änderung sollte sofort greifen.

  • Super, dass ging ja schnell. Jetzt lässt sich der cefbrowser wieder bauen :)

    Kannst due den thrift Fix auch noch im remotetranscode einbauen?

    MLD 6.5 mit vdr 2.7 - lirc yaUSBir - 4 x DD-Sat - SCR - Intel N100M - 4GB RAM - WD Green 12TB HDD - 22TB HDD - SanDisk 64GB SSD - Lian Li PC-C37B - Samsung LE40A559
    MLD 6.5 mit vdr 2.7 - Raspberry Pi 3 - rpihddevice
    MLD 5.5 mit Squeeze Play - Raspberry Pi 2 - 32GB SD - 7" Touch TFT

  • Ich hab hier noch einen Patch für den cefbrowser. Der alleine reicht aber nicht damit sich der Database Path per Option setzen lässt. Die Variable browserDbPath wird bisher gar nicht verwendet.

    MLD 6.5 mit vdr 2.7 - lirc yaUSBir - 4 x DD-Sat - SCR - Intel N100M - 4GB RAM - WD Green 12TB HDD - 22TB HDD - SanDisk 64GB SSD - Lian Li PC-C37B - Samsung LE40A559
    MLD 6.5 mit vdr 2.7 - Raspberry Pi 3 - rpihddevice
    MLD 5.5 mit Squeeze Play - Raspberry Pi 2 - 32GB SD - 7" Touch TFT

  • Die Variable browserDbPath wird bisher gar nicht verwendet.

    Danke. Die Änderungen dazu müssen in irgendeinem Branch versickert sein :( Ich check das...

    Edit:
    Jetzt weiß ich es wieder. Die Datenbank wird initialisiert, bevor die Commandline überhaupt gelesen wird. Dazu hatte ich damals die ENV Variable BROWSER_DB_PATH eingeführt, um das Problem zu lösen.
    Ich habe den Parameter -d/--browserdb <path> jetzt vollständig implementiert. Die Auswertung von ENV bleibt erhalten um Bestandsinstallationen nicht zu stören, sobald aber -d verwendet wird, hat dieser Wert Vorrang.

    Edited once, last by Zabrimus (April 18, 2025 at 11:25 AM).

  • Hi,

    und noch eines. Gestern war auch der Parameter -u wirkungslos. Das habe ich aber noch nicht genauer analysiert.

    Das war voreilig. Es gibt nur eine Info, dass initial die default Werte genommen werden ;)

    MLD 6.5 mit vdr 2.7 - lirc yaUSBir - 4 x DD-Sat - SCR - Intel N100M - 4GB RAM - WD Green 12TB HDD - 22TB HDD - SanDisk 64GB SSD - Lian Li PC-C37B - Samsung LE40A559
    MLD 6.5 mit vdr 2.7 - Raspberry Pi 3 - rpihddevice
    MLD 5.5 mit Squeeze Play - Raspberry Pi 2 - 32GB SD - 7" Touch TFT

    Edited 2 times, last by clausmuus (April 18, 2025 at 11:53 AM).

  • Ne, der Parameter macht schon Sinn. Denn da drüber lege ich fest, wo die user_agent.ini zu finden ist. Bei mir unter /etc da es sich ja um eine Konfigurationsdatei handelt, die der User ändern kann.

    MLD 6.5 mit vdr 2.7 - lirc yaUSBir - 4 x DD-Sat - SCR - Intel N100M - 4GB RAM - WD Green 12TB HDD - 22TB HDD - SanDisk 64GB SSD - Lian Li PC-C37B - Samsung LE40A559
    MLD 6.5 mit vdr 2.7 - Raspberry Pi 3 - rpihddevice
    MLD 5.5 mit Squeeze Play - Raspberry Pi 2 - 32GB SD - 7" Touch TFT

  • Das mit den Optionen funktioniert so wie's ausschaut schon mal.

    Jetzt habe ich aber das Problem, dass ich beim Start diese Meldung bekomme, und danach stürzt der cefbrowser ab:

    [0418/121226.630101:ERROR:icu_util.cc(223)] Invalid file descriptor to ICU data received.

    Ich werde erst heute Abend dazu kommen mir das genauer anzuschauen. Aber vielleicht hat ja schon einer von Euch eine Idee dazu...

    MLD 6.5 mit vdr 2.7 - lirc yaUSBir - 4 x DD-Sat - SCR - Intel N100M - 4GB RAM - WD Green 12TB HDD - 22TB HDD - SanDisk 64GB SSD - Lian Li PC-C37B - Samsung LE40A559
    MLD 6.5 mit vdr 2.7 - Raspberry Pi 3 - rpihddevice
    MLD 5.5 mit Squeeze Play - Raspberry Pi 2 - 32GB SD - 7" Touch TFT

  • [0418/121226.630101:ERROR:icu_util.cc(223)] Invalid file descriptor to ICU data received.

    Das working-directory für den Start des Browsers muss das Installationsverzeichnis sein. Die ganzen libraries und sonstigen Dateien werden relativ dazu gesucht. Im Installationverzeichnis sollte auch die icudtl.dat vorhanden sein.

  • Danke für den Tipp. Mein Fehler war, dass ich die Lib Dateien in einen getrennten Ordner verschoben hatte, und dabei nicht beachtet hatte, dass auch diverse andere Dateien im Libs Ordner gesucht werden, und nicht im statics Ordner. Jetzt startet der cefbrowser wieder.

    Mir ist aber noch ein kleiner Fehler aufgefallen. In der main.cpp in Zeil 343 wird geprüft, ob die Option --config gesetzt ist. Zum einen wird dort die alternative Option -c ignoriert, zum anderen wird bereits in Zeile 205 geprüft, ob die config Datei erfolgreich geladen wurde. Die Prüfung in Zeile 343 ist daher vermutlich nicht notwendig.

    MLD 6.5 mit vdr 2.7 - lirc yaUSBir - 4 x DD-Sat - SCR - Intel N100M - 4GB RAM - WD Green 12TB HDD - 22TB HDD - SanDisk 64GB SSD - Lian Li PC-C37B - Samsung LE40A559
    MLD 6.5 mit vdr 2.7 - Raspberry Pi 3 - rpihddevice
    MLD 5.5 mit Squeeze Play - Raspberry Pi 2 - 32GB SD - 7" Touch TFT

  • Auch von mir ein großes Dankeschön an die Weiterentwicklung, das läuft ja genauso gut, wenn nicht sogar besser, als auf mein etwas betagterer Fernseher :)

    Wenn ich 2 VDR an mein Remotetranscode auf meinem server (mittels proxmox virtualisiert) anbinden möchte, starte ich das einfach 2x mit unterschiedliche sockets.ini? Der port auf dem remotetrans served ist der der in der sockets.ini definiert wird? Alternativ zieh ich sonst ein weiterer lxc hoch mit andere IP adresse..

    Macht es sinn / ist es möglich / ist es sinnvoll das transcoding auf die gpu auszulagern, z.b. auf intel systeme?

    Vielen Dank nochmal für die tolle arbeit, sowohl für hbbtv als auch VDR*Elec!!

    VDR1+2: OctopusNet - Minisatip - X96 max plus 2

  • Wenn ich 2 VDR an mein Remotetranscode auf meinem server (mittels proxmox virtualisiert) anbinden möchte, starte ich das einfach 2x mit unterschiedliche sockets.ini?

    Den remotranscode hatte ich eigentlich mandantenfähig geplant (also beliebig viele VDR mit einem Transcoder). Allerdings habe ich das nie wirklich getestet und weiß deshalb gar nicht, ob das wirklich funktioniert. Und hier habe ich mittlerweile auch pro Client einen eigenen remotetranscoder.

    Macht es sinn / ist es möglich / ist es sinnvoll das transcoding auf die gpu auszulagern, z.b. auf intel systeme?

    Der Transcoder liest auch eine codecs.ini ein, mit der die Parameter für ffmpeg etwas angepasst werden können. Z.B.

    Code
    [video]
    codec_copy = h264,h265,hevc,mpeg2video
    transcode = libx264 -preset ultrafast -crf 22
    
    [audio]
    codec_copy = ac3,aac,mp2
    transcode = aac

    codec_copy ist das schnellste Verfahren, weil kein wirkliches trancoding stattfindet, sondern nur das Containerformat (mp4 oder was immer da auftaucht) nach TS gewandelt wird, sofern der codec passt.

Participate now!

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