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

  • Super mit dem grösseren Timeout klappt nun auch endlich das ZDF :)

    Juchuu :)

    Und nun zu einem weiteren kleinen Problem. Vorspulen in ZDF. Da wird der Fortschrittsbalken nicht aktualisiert.

    Das ist echt nur eine kleinigkeit aber für den WAF wichtig. Manchmal bleibt er beim vorspulen auch komplett hängen.

    Hmm. Wo ist der Balken beim ZDF geblieben? Ich könnte jetzt auch gar nicht mit Sicherheit sagen, daß ich den jemals gesehen habe. Ein wenig Forschung tut not :(

    Hast du für das Vorspulen irgendwelche Log-Einträge aus dem Transcoder/Browser? Technisch, wird der aktuelle FFmpeg gestoppt und direkt danach mit dem neuen Zeitstempel gestartet.

  • Hast du für das Vorspulen irgendwelche Log-Einträge aus dem Transcoder/Browser? Technisch, wird der aktuelle FFmpeg gestoppt und direkt danach mit dem neuen Zeitstempel gestartet.

    Aktuell habe ich dazu keine Logs und kann auch im Moment keine erzeugen. Ich hatte gestern abend aber versucht bei einen Video vorzuspulen und das ging dann ganz schnell in die Hose. Das OSD ist eingefroren und das Video lief munter weiter. Wenn die Frau verzweifelt auf der Fernbedienung auf die ok Taste drückt um vorzuspulen dann kommen ganz viele Tasten bei dir an und ich denke da ist dann dein Ansatz jedesmal den ffmpeg neu zu starten einfach zu langsam. Ich denke da muss ein Puffer rein der die gewünschten vorspultastendrücke (!) sammelt und nach einem Timeout (ca. 500ms) die Summe an den ffmpeg weitergibt. Womit der dann nur einmal neu gestartet wird und nicht 20mal oder so. Ich denke das kann man im web plugin sicher realisieren.


    Wie man den Balken im ZDF aktualisiert ist mir rätselhaft. Im ARD geht das aber super. Irgendwie muss das OSD ja mitbekommen an welcher Stelle im Video er gerade ist. Ich glaube der VDR ruft in seinem player dafür das GetSTC() auf. Das liefert ja den aktuellen PTS.

  • Ich denke da muss ein Puffer rein der die gewünschten vorspultastendrücke (!) sammelt und nach einem Timeout (ca. 500ms) die Summe an den ffmpeg weitergibt.

    Eieiei. Eine neue Anforderung :) Es gibt verschiedene Stellen, an denen man das implementieren könnte:

    - Im Plugin. Der Nachteil wäre, das die Seite/OSD davon völlig unbeeindruckt wäre und es keine visuelle Bestätigung für den Request gäbe.

    - Im Browser vor dem Senden der Kommandos an die Seite: Derselbe Nachteil wie im Plugin

    - Im Browser nach dem Senden der Kommandos, vor dem Request an den Transcoder: Schon besser, allerdings würde es den V8Handler (Javascript) komplizierter machen und da muss man etwas aufpassen, daß man die Javascript-Ausführung in der Seite nicht ganz blockiert (wie z.B. beim Start eines Videos und dafür suche ich noch eine Lösung)

    - Im Transcoder selbst: Ich denke, da wäre der Wunsch am Besten aufgehoben. Visuell käme eine Bestätigung, der Browser würde normal weiter arbeiten. Ich werde es da mal versuchen.


    Wie man den Balken im ZDF aktualisiert ist mir rätselhaft. Im ARD geht das aber super. Irgendwie muss das OSD ja mitbekommen an welcher Stelle im Video er gerade ist. Ich glaube der VDR ruft in seinem player dafür das GetSTC() auf. Das liefert ja den aktuellen PTS.

    Der Balken wie auch fast alles (abgesehen von der Lautstärke-Regelung) passiert im Browser selbst und wird durch die Applikationen gesteuert, die die Sender ausliefern. Ich sende nur die FB-Tasten an den Browser und der Rest wird von der Applikation übernommen. Ich habe mal geschaut und die Seite des ZDF wird von mir gar nicht manipuliert, aber etwas scheint zu fehlen und damit muss ich wieder einmal in das Javascript-Debugging einsteigen und versuchen herauszufinden, was es ist.


    Manchmal ist es aber auch so, daß es Javascript-Fehler gibt, die vom Sender gefixt werden müssten. Das ist mir bei RTL so ziemlich aufgefallen, daß da etwas unrund läuft und ich Workarounds finden muss.

  • Der Transcoder sammelt jetzt alle Sprung-Kommandos und führt das Letzte erst aus, nachdem eine bestimmte Wartezeit ohne weiteres Sprung-Kommando abgelaufen ist. Dazu gibt es den neuen Parameter --seekPause/-s <ms>, mit der die Wartezeit gesteuert werden kann.

    Der Default ist 500 (ms), welche ich aber persönlich etwas lang finde. Aber zum Glück kann man das den eigenen Vorlieben anpassen :)

  • Die Umsetzung ist gut aber noch nicht perfekt :)

    Wenn ich nun mehrmals auf der Fernbedienung auf weiter (ok) drücke dann klappt das auch meistens (nach dem timeout), aber wenn Frau die ok Taste festhält dann hängt es sich immer noch auf. Allerdings weiss man eh nicht wie weit man vorspult weil ja der Fortschrittsbalken (noch) nicht aktualisiert wird. Ich denke du solltest erstmal nach dem Fortschrittsbalken suchen. Der Fernbedienung die hohe Repeatrate abgewöhnen kann man evtl. auch mit Bordmitteln vom vdr.


    Aber schonmal Danke für deine arbeit mit dem Tastenpuffer.

  • aber wenn Frau die ok Taste festhält dann hängt es sich immer noch auf.

    ui ui ui. Zumindest auf dem Ersten sind die Sprünge nicht-linear und man ist sehr schnell am Ende des Videos angelangt.

    Allerdings weiss man eh nicht wie weit man vorspult weil ja der Fortschrittsbalken (noch) nicht aktualisiert wird. Ich denke du solltest erstmal nach dem Fortschrittsbalken suchen.

    Ich fürchte, ich kenne die Ursache auf dem ZDF mittlerweile. Daran habe ich mir schon einmal die Zähne ausgebissen. Vielleicht gelingt mir mit Abstand ein neuer Versuch und hoffentlich findet sich eine Lösung.

  • So wir kommen der Sache näher :)

    Nun klappt das mit dem Springen schon ganz gut, aber jetzt sehe ich auch warum nach einem Sprung das Video so schlecht bzw. gar nicht wieder anläuft.

    Das Ausgabeplugin bekommt von dem Sprung nichts mit und plötzlich stimmen die PTS Werte nicht mehr. Das führt dann zu massiven A/V sync Problemen. Deswegen wäre es besser wenn du bei einem Sprung (spulen) den Stream neu initialisieren würdest. Also ein Device->Clear oder so machen könntest. Das macht der VDR in seinem player auch so, da kommt ein Reset vor den neuen TS Daten.

  • Das Ausgabeplugin bekommt von dem Sprung nichts mit und plötzlich stimmen die PTS Werte nicht mehr. Das führt dann zu massiven A/V sync Problemen. Deswegen wäre es besser wenn du bei einem Sprung (spulen) den Stream neu initialisieren würdest. Also ein Device->Clear oder so machen könntest.

    Es gab ursprünglich das Problem, daß deviceClear zu oft aufgerufen wurde und nach einem Fix passiert das zu selten.

    Ein Update des Plugins und des Transcoders ist erforderlich. Der Transcoder ruft im VDR jetzt explizit deviceClear auf, wenn im Video gesprungen wird. Das sieht auch schon viel besser aus :)

  • Es gab ursprünglich das Problem, daß deviceClear zu oft aufgerufen wurde und nach einem Fix passiert das zu selten.

    Tja das muss fein abgestimmt sein :)

    Jetzt ist es wirklich perfekt und klappt wunderbar :saint:

    Nun gibt es nur noch zwei Kleinigkeiten. Zum einen müllt sich das Log zu. Da kannst du bestimmt diese Logs entfernen:

    Und dann gibt es noch den Kinderschutz beim ZDF. Da musst du wohl wieder das Javascript analysieren um da drumherum zu kommen. Zum testen versuch mal vom Montag um 22:15 den Hyänenmann abzuspielen.

  • Habe nun mal auf RTL getestet und bekomme einen Segfault:

    Thread 39 "vdr" received signal SIGSEGV, Segmentation fault.


  • Nun gibt es nur noch zwei Kleinigkeiten. Zum einen müllt sich das Log zu. Da kannst du bestimmt diese Logs entfernen:

    Ich wollte sowieso mal durch alle Komponenten und die Log-Einträge entschlacken. Es ist manchmal etwas zuviel.

    Und dann gibt es noch den Kinderschutz beim ZDF. Da musst du wohl wieder das Javascript analysieren um da drumherum zu kommen. Zum testen versuch mal vom Montag um 22:15 den Hyänenmann abzuspielen.

    Ich habe mir das angeschaut. ZDF liefert ohne Login keinen Videolink, sondern direkt die Kinderschutzseite. Das hatte ich befürchtet. Die Prüfung findet serverseitig statt und da kommt man nicht rein. Links unter 'Mein ZDF' oder so kann man sich anmelden. Das muss ich auch noch probieren, weil ich eine Staffel nicht weiterschauen kann - ohne Login :(


    Ein segfault bei WebOSDPage::scaleAndPaint. Oi. Da muss ich schauen.

    Code
    webosdpage.cpp:283

    Das ist die Zeile mit dem osd->Flush. Hmmm?? Kannst du das reproduzieren? Was genau hast du in RTL gemacht?

  • Kannst du das reproduzieren? Was genau hast du in RTL gemacht?

    Ich habe nur die Mediathek in RTL gestartet, bin zu Bauer sucht Frau gegangen (nach links) und habe dann (nachdem das erste Video angelaufen ist) das nächste (nach unten) ausgewählt. Das ist dann nicht mehr gestartet und dann habe ich mit Menü abgebrochen und dann kam der Segfault.

  • Das ist die Zeile mit dem osd->Flush.

    Kann es sein, dass hier noch ein ProcessOsdUpdate vom browser unterwegs ist bzw. hängt und dann aber durch das Löschen von WebOSDPage und osd ins Leere läuft?

  • Das müsste mit einem Cookie zu lösen sein. Soweit ich das weiss erzeugt der Login ein Cookie das (wenn mitgeschickt) die Kinderschutzseite umgeht.

    Das Cookie könnte man ja evtl. hard codieren :)

    Theoretisch möglich, aber ich habe da ein paar rechtliche Bedenken. Für das Login braucht mal wohl eine EMail-Adresse und für die Alterverifikation die (oder eine) Ausweisnummer.

    Beides ist keine große Hürde um an allgemeines (anonymes) Cookie zu kommen, aber so richtig wohl fühle ich mich dabei nicht.


    Ich habe gelesen, daß ARD und ZDF den Account sharen und man nur einen Login braucht.

  • Kann es sein, dass hier noch ein ProcessOsdUpdate vom browser unterwegs ist bzw. hängt und dann aber durch das Löschen von WebOSDPage und osd ins Leere läuft?

    Das muss aber schon heftig sein, weil der Aufruf so aussieht:

    if (osd) then osd->Flush();

    Also das OSD muss schon weg sein, aber die Variable noch nicht auf null gesetzt. Puhhh.


    Ich überlege nur, welche Änderungen seit dem letzten (erfolgreichem) Aufruf passiert sind. Das muss ich nachstellen.

  • So ich habe nun mal die Verbindung zum ZDF mitgeschnitten und der Link ist doch in der Antwort mit der Kindersicherung drin:

    Schau doch mal genauer hin :) Du musst die erste URL nehmen die hat die höchste Auflösung.

Jetzt mitmachen!

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