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

  • Also das testen ist sschwierig. Bisher habe ich noch keine Werbung sehen können. Allerdings ist mir der cefbrowser schon ein paarmal bei SAT1 abgeschmiert mit

    Irgendetwas ist null, obwohl das nicht sein darf. Die folgende Meldung 'MainFrame is null' habe ich nur eingebaut, um Fehler zu finden und nicht erwartet, das ich diese Meldung jemals zu sehen bekomme. Eigentlich darf diese gar nicht kommen, da das Plugin eine Seite anfordert und damit auf jeden Fall ein Frame existieren muss. Selbst wenn im Frame gar keine URL geladen werden kann und dieses leer ist. Ganz seltsam.


    Aber so unterschiedliche Fehlerbilder sind ätzend. Hast du pi-hole oder einen anderen Blocker aktiv?

  • So ich habe nun gesehen das das Video nicht zu langsam läuft sondern das ich keine Daten bekomme. Dann stockt das Video kurz und dann läuft es wieder weiter. Das ganze passiert so im Sekundentakt. Da ist wohl eine Wartezeit zugross :)

    Ganz merkwürdig. Das FFmpeg liefert die Daten in Realtime (Parameter -re) und stocken kann das Video eigentlich nur, wenn entweder der Server die Daten zu langsam liefert oder der Weg vom Transcoder zum VDR (obwohl eher unwahrscheinlich) zu langsam ist.

  • Hast du pi-hole oder einen anderen Blocker aktiv?

    Ja pi-hole ist aktiv für diesen Rechner. Das lustige ist das es eine Zeitlang ging und ich bei Sat1 und Pro7 testen konnte. Aber nach einiger Zeit ging es dann nichtmehr und ich habe immer diesen "MainFrame is null" bekommen. Evtl hat ja Pro7 meine IP gesperrt weil ich die Filme immer abgebrochen habe :)

    Das FFmpeg liefert die Daten in Realtime (Parameter -re) und stocken kann das Video eigentlich nur, wenn entweder der Server die Daten zu langsam liefert oder der Weg vom Transcoder zum VDR (obwohl eher unwahrscheinlich) zu langsam ist.

    Da muss ich noch weiter testen. Es könnte z.b. sein das du beim PlayTSPaket eine wiederholung machen musst, aber da zu lange wartest und dann mein Puffer leer läuft. Die Wartezeiten da sind ja bisher nur per "Daumen" eingetragen. Ausserdem ist mir da noch unklar ob Sat1 da evtl. in progressiv mit 25 Hz liefert. Zumindest mal progressiv scheint es zu sein. Das würde der softhdcuvid derzeit nicht richtig verarbeiten.

  • So heute geht auch Sat1 wieder. Und ich habe gerade gesehen das mein FFprobe kein https kann. Deswegen kam dann keine Werbung weil die mit https abgerufen wird :) Mühsam ernährt sich das Eichhörnchen.


    PS: Und pi-hole musste ich auch abschalten. Aber das ist ja auch mal eine gute Nachricht weil ich dann MIT pi-hole kein Werbung bekomme :)

  • Nächstes Problem gefunden. Bei SAT1 machst du zwischen der Werbung und dem "Hauptfilm" nur ein DeviceClear. Das reicht leider nicht. Ich bräuchte da ein Stop und Start. Das DeviceClear löscht zwar den VideoPuffer macht aber keinen reset auf den Stream. D.h. der FFMPEG Decoder wird nicht geschlossen. Wenn nun der Hauptfilm mit einer anderen Auflösung kommt merkt das keiner und es geht schief.


    PS: Stop und Start sind bei dir wohl close und open des VideoDevices.

    An dem Problem mit dem Videoruckeln arbeite ich noch. Ausserdem wundert es mich mit welch unterirdischer Auflösung da gearbeitet wird <X

  • jojo61 Das war wieder ein Schubs in die richtige Richtung.


    Ich habe den Video-Wechsel überarbeitet: Nach dem Super-UHD-Werbevideo startet das eigentlich gewünschte Video auf S1P7. Die Auflösungen in den Mediatheken der Privaten sind eher bescheiden und grenzwertig.


    Die Pause wurde auch überarbeitet. Der Transcoder hat schon beim Resume auf Seek auf die letzte Position gemacht, aber statt im Plugin zu versuchen, möglichst viel an Alt-Daten zu retten, wird ein DeviceClear gemacht und mit den frischen TS-Paketen gearbeitet.


    Das Verhalten der langen Pause eines Videos muss ich noch untersuchen bzw. erstmal nachstellen.


    Edit:

    Ich weiß gar nicht, ob du da was machen kannst, aber bei meinen Tests ist mit der VDR einmal abgeschmiert mit dem folgenden Backtrace

  • Ich weiß gar nicht, ob du da was machen kannst, aber bei meinen Tests ist mit der VDR einmal abgeschmiert mit dem folgenden Backtrace

    Das könnte daran liegen das ich den Wechsel der Auflösung nicht mitbekommen habe. Dann stimmen natürlich die Framebuffergrössen in der GPU nicht mehr und beim Rendern fällt er hin.


    Was mir sehr negativ bei S1P7 aufgefallen ist, ist das die in 25 fps und progressiv senden. Das kann der softhdcuvid überhaupt nicht und das habe ich auch nicht vor zu implementieren. Dann müsste ich jedes Frame doppelt an die Graka geben und den halben sync umbauen. Da wollte ich mal untersuchen ob der ffmepg nicht auch gleich die Framerate auf 50 fps anpassen kann. Das wäre dann viel einfacher.

  • Ich bekomme mal wieder einen double free bei RTL:

    RTL geht ansonsten aber recht gut.

    S1P7 ist immer noch eine grosse Baustelle. Allerdings funktioniert nun der Videowechsel. Dafür dauert es aber ca.5 sekunden bis ich einen Film mit Menü abbrechen kann.

    Die Pause scheint nun auch gut zu funktionieren. Es geht vorran :)

  • Die patches zum Fastscale funktionieren leider nicht. Das web Plugin lässt sich trotz VDR patch nicht mit dem ENABLE_FAST_SCALE=1 compilieren.

    Hast du ein Log, warums scheitert? Hier baut es...

  • Code
    g++ -g -O3 -Wall -Werror=overloaded-virtual -Wno-parentheses -fPIC -D_GNU_SOURCE -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE -D_LARGEFILE64_SOURCE -I/usr/src/vdr/include -I/usr/include/GraphicsMagick -c -DPLUGIN_NAME_I18N='"web"' -DENABLE_FAST_SCALE -I. -Ithirdparty/mINI-0.9.14/src/mini -o webosdpage.o webosdpage.cpp
    webosdpage.cpp: In member function ‘bool WebOSDPage::scaleAndPaint(uint8_t*, int, int, int, int, int, int)’:
    webosdpage.cpp:313:90: error: no matching function for call to ‘cImage::cImage(cSize, const tColor*, double&, double&)’
      313 |         const cImage recImage(cSize(width, height), (const tColor *)image, scalex, scaley);
          |                                                                                          ^
    In file included from /usr/src/vdr/include/vdr/dvbsubtitle.h:15,
                     from /usr/src/vdr/include/vdr/device.h:15,
                     from webosdpage.cpp:1:

    Das ist mit den patches aus dem GIT

  • Fehlt da evtl. der Patch fürs plugin selbst?

    VDRSternELEC/packages/vdr/_vdr-plugin-web/patches/0001-scale.patch at master · Zabrimus/VDRSternELEC
    Contribute to Zabrimus/VDRSternELEC development by creating an account on GitHub.
    github.com

  • Fehlt da evtl. der Patch fürs plugin selbst?

    Mist.


    rell ich habe deine Patches für die Output-Devices und den VDR mit in das Repository zu dem web-Plugin gepackt um das Ganze noch "offizieller" zu machen und nicht nur in VDR*ELEC zu verstecken.


    Allerdings habe ich vergessen, das Plugin selbst zu patchen.

    Da gibt es jetzt einen Mismatch. Das muss ich korrigieren.


    Edit: Dein Patch für das Plugin ist nun offiziel im Git eingecheckt. Jetzt passt alles wieder. Nur muss VDR*ELEC noch angepasst werden, bei einem Update.

  • Ich habe das nun mal mit dem softhdodroid ausprobiert und hatte noch ein paar segfaults. Deswegen habe ich den patch für das softhdodroid noch etwas überarbeitet und nun scheint es zu laufen. Wirklich flott nun. Allerdings gibt es noch andere Probleme:

    - wenn ich ein laufendes Video mit Menü abbreche dann dauert es sehr lange bis das Menü kommt und TV wieder erscheint. Ich vermute das das web plugin im PlayPacket hängt und versucht noch restliche Daten los zu werden (bis zum timeout).Hier müsste wohl noch ein Test rein ab Abgebrochen wurde. Du wartest da 500 Millisekunden mal 10, das ist eh nicht so perfekt. Besser wäre eher 50 mal 100 oder 5 mal 1000. Bei 500 ms läuft evtl. der Puffer im Ausgabeplugin schon leer bevor du es wieder versuchst. Das sind immerhin 25 Frames.

    Ausserdem meint das web plugin nachdem ich einen Film mit Menü abbreche das der Browser nicht mehr da ist.

    - dann hatte ich noch einige Segfaults aber habe keine Dumps. Das werde ich weiter beobachten und hoffentlich dumps bekommen.


    Die Änderungen wegen dem scaling habe ich als neuen Patch hier angehängt.


    PS: man sollte noch Erwähnen das man alle plugins mit OSD neu compilieren muss wenn man den VDR patched. (z.b. Teletext)

  • Ich habe das nun mal mit dem softhdodroid ausprobiert und hatte noch ein paar segfaults. Deswegen habe ich den patch für das softhdodroid noch etwas überarbeitet und nun scheint es zu laufen. Wirklich flott nun.

    Ich habe mal die Patches verglichen um herauszufinden, ob es evt. Auswirkungen für die anderen Ausgabe-Plugins gibt. Mal abgesehen davon, daß statt den Default-Parametern für die Skalierungsfaktoren nun explizite Werte gesetzt werden finde ich dieses interessant:

    Code
    +    if (x + width * scaleX > VideoWindowWidth) {
    +    printf("Scaling over the Width edge %f\n",x + width * scaleX);
    +         scaleX = 1.0;
    +    }
    +    if (y + height * scaleY > VideoWindowHeight) {
    +    printf("Scaling over the Height edge %f\n",x + height * scaleY);
    +         scaleY = 1.0;
    +    }

    Ist das tatsächlich passiert? Das durch die Skalierung eine zu hohe Breite/Höhe entstanden ist? Zumindest im web-Plugin wird der Skalierungsfaktor genau an den Videogrenzen ausgerichtet. Ich kann mir nur vorstellen, daß durch Rundungen ein zu hoher Wert entsteht. Aber wird dann nicht einfach ein Crop gemacht?

    Allerdings gibt es noch andere Probleme:

    - wenn ich ein laufendes Video mit Menü abbreche dann dauert es sehr lange bis das Menü kommt und TV wieder erscheint. Ich vermute das das web plugin im PlayPacket hängt und versucht noch restliche Daten los zu werden (bis zum timeout).

    Nicht ganz. Der Browser wartet so lange, weil ich erkennen muss ob in der Seite ein StopVideo/StartVideo unmittelbar (oder eben in einer bestimmten Zeit) hintereinander kommen. Dann darf ich beides nicht ausführen, sondern muss ein Reset machen. Ansonsten gibt es eine Race-Condition im Plugin mit Konstruktor/Destructor/Attach/Detach.


    Das ist auch noch auf meiner TODO-Liste, daß ich im Plugin erkennen muss, daß das Menu aufgerufen wird. Der Key selbst wird nicht an das Plugin durchgereicht, also muss ich etwas anderes finden.


    PS: man sollte noch Erwähnen das man alle plugins mit OSD neu compilieren muss wenn man den VDR patched. (z.b. Teletext)

    Ja stimmt. Ich bin da wohl mittlerweile von VDR*ELEC verwöhnt, weil der Build die Abhängigkeiten automatisch erkennt und dann auch alles passende dazu neu baut.


    Also:
    Nach Anwenden des VDR Patches müssen alle Plugins mit einem OSD neu gebaut werden.

  • Mal abgesehen davon, daß statt den Default-Parametern für die Skalierungsfaktoren nun explizite Werte gesetzt werden finde ich dieses interessant

    Ich hatte mehrmals einen "Bus error" und vermutete das es evtl. an Rundungsfehlern liegt. Deswegen habe ich es als Sicherheit eingebaut. Auch die default Werte sind so entstanden. Was genau den "Bus Error" ausgelöst hat kann ich nicht sagen aber so läuft es nun :)


    Nicht ganz. Der Browser wartet so lange, weil ich erkennen muss ob in der Seite ein StopVideo/StartVideo unmittelbar (oder eben in einer bestimmten Zeit) hintereinander kommen.

    Das dauert aber so ca. 5 sekunden bis nach dem drücken von Menü das Menü dann auch kommt. Aber das Video wird sofort gestoppt.

    Und danach hat das Plugin vergessen das der Browser da ist :)


    PS: hattest du bei dem Resume ein StopVideo/StartVideo (kein Reset) eingebaut ? Ich hatte gestern mal wieder nach einer längeren Pause den Effekt das es danach zwar anlief aber stotterte. Das ging erst weg als ich den Film komplett abgebrochen habe und dann neu gestartet habe.

  • Mittlerweile weiß ich, wo die Bremse liegt, wenn man das Menu aufruft: Im Transcoder.

    Noch habe ich keine Idee, woran das liegt und wie das umgegangen werden kann, aber der kill von ffmpeg dauert so lange bzw. funktioniert nicht.

    Und wieder ein Mysterium....


    Achja. Das der Browser nicht mehr erreichbar ist, habe ich auch. Ich hoffe dafür eine Lösung zu finden.

  • Faszinierend. Es gab einen Deadlock über alle 3 Komponenten, der nur durch einen Timeout aufgelöst wurde.

    Das Plugin und der Transcoder wurden aktualisiert und jetzt schwuppt das. Den fehlenden Browser habe ich seitdem nicht mehr produzieren können. Ich hoffe, das Problem wurde "nebenbei" gefixed.

  • Ich bin sehr unzufrieden :(


    Es gibt einen Unterschied im Verhalten der Menutaste zwischen der Entwicklungsmaschine und dem N2+ (VDR*ELEC). Die Plugins bekommen die Menutaste nicht, also kann es meines Erachtens nur an einem Patch liegen. Auf jeden Fall ist das unterschiedliche Verhalten alles andere als erwünscht und richtig ätzend.


    Enwicklungsmaschine:

    - Film in der Mediathek wird abgespielt

    - Menu-Taste und das web-Plugin wird beendet, das TV-Bild kommt


    N2+:

    - Film in der Mediathek wird abgespielt

    - Menu-Taste, aber das web-Plugin läuft weiter. Das Video (im Skindesigner) wird skaliert weiter abgespielt und ich habe dann den Menu-Eintrag "Aufzeichnung beeenden" oder ähnlich.

    - Das Problem zieht sich dann sogar durch. Z.B. Tagesschau auf ARD. Dann sind plötzlich beide OSD (web + VDR) flackernd sichtbar und es schwer, da wieder raus zu kommen.


    Auf der Entwicklungsmaschine kommt bei der Menu-Taste das:

    Code
    Dez 17 11:17:23 odroid1 vdr[4531]: [4531] [vdrweb] Destruct WebOSDPage, osdMode 1
    Dez 17 11:17:23 odroid1 vdr[4531]: [4531] [vdrweb] Delete Player...
    Dez 17 11:17:23 odroid1 vdr[4531]: [4531] [vdrweb] Activate video player: Nein
    Dez 17 11:17:23 odroid1 vdr[4531]: [4531] [vdrweb] Detaching HbbTV ait filter from device 2
    Dez 17 11:17:23 odroid1 vdr[4531]: [4531] [vdrweb] Attached HbbTV ait filter to device 2, vdrDev=1 actDev=2, Sid=0x283d

    Und damit wird das web-Plugin beendet und dem VDR wieder die Kontrolle übergeben. So wie es sein sollte. Auf dem N2+ kommt die Ausgabe nicht, so gar nicht, es gibt einfach nix. Das web-Plugin läuft weiter - in Konkurrenz zum VDR.


    Edit:

    Das Problem tritt auch ohne alle Patches auf. Die Plugins wurden auch auf ein Minimum reduziert, aber das brachte auch nichts.

    Was kann denn noch das unterschiedliche Verhalten provizieren?

  • Meine Güte. Ist das lang her. Jetzt weiß ich auch wieder, warum ich das DummyOSD im web-Plugin eingeführt hatte. Das weiß ich jetzt wieder, nach langem suchen und testen :(


    Wenn das web-Plugin mit dem Parameter

    -o oder --dummyosd

    gestartet wird, dann funktioniert alles so wie gewünscht.


    Also falls jemand das Problem hat...An den Parameter denken. Gibt es Situationen, in denen das DummyOSD nicht gebraucht wird? Ansonsten würde ich das per Default einschalten und den Parameter entfernen bzw. unbrauchbar machen.

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!