[Announce] HbbTV plugin / offscreen browser v0.0.9

  • Ja Wetter aus der Startleiste wars...

    Das sollte jetzt funktionieren, sowie andere Sender mit Fullscreen/Scaled-Videos. Es wurde das ganze Video-Handling im Browser geändert. Viele Sender wurden zwar getestet und alle aufgefallenen Probleme notiert. Ich bin mir aber nicht sicher, ob es etwas gibt, das vorher funktioniert hat und jetzt nimmer.


    Pro7/Sat1 haben z.T. massiv Probleme bei den Videos. Ich falle häufig in den Fehler

    Code
    1. DOMException: The play() request was interrupted

    Die Ursache scheint zu sein, daß Pause() vor dem wirklichen Videostart mittels Play() (asynchron) aufgerufen wird. Gerade bei kurzen Werbeeinblendungen vor dem Hauptfilm kann das schnell passieren. Meistens hilft es, es noch einmal zu versuchen. Aber schön ist anders.

    Es gibt von Google auch dazu einen Hinweis: Play Request... Wie ich das im Code unterbringe, weiß ich noch nicht.


    Ich will noch einige Darstellungsfehler fixen, bevor ich an ein neues Tag denken kann.


    Eine Frage habe ich noch alle:

    Im Plugin fange ich kBack ab, um das OSD zu schließen und das Video zu beenden. Jetzt will ich aber das kBack oder eine Alternative an den Browser senden (als VK_BACK), weil es verschiedene Seiten gut stehen würde: Die reagieren auf VK_BACK.

    Nur, mit welcher Taste kXXX soll dann die jetzige Funktionalität umgesetzt werden? So eine richtig gute finde ich in der "enum eKeys" nicht.

    Ich fürchte meine remote.conf und auch meine Fernbedienung ist nicht repräsentativ konfiguriert. Auf der FB liegt auf der Back-Taste was anderes und der WAF würde massiv leiden, wenn ich das ändere.


    Und was VK_PAGE_UP und VK_PAGE_DOWN im Browser machen, weiß ich gar nicht. Aber die Extension hat diese zumindest konfiguriert.

  • Ich hoffe, dann funktioniert die Navigation (up und down) im Browser noch?

    --
    vdr User #2022 - hdvdr2: Lenovo SFF M83, Intel(R) Core(TM) i5-4670S, 14 GB Ram, zram-swap/tmp, ubuntu-focal, softhddevice-vdpau
    ddbridge-6.x mit 2xDVB-S2 und (Flex) 2xDVB-C/T Tunern, nvidia-GF1050Ti SFF (nvidia-dkms-470), System SSD btrfs,

    snapper, 8TB HDD XFS/cow /srv/vdr, yavdr-ansible-2.5.6-seahawk, vdr-epg-daemon mit Frodo-plugins, Kernel 5.13.4-xfsscrub

    vdradmin-am, live+webstreaming, vdrmanager (Smartphones als FB), ffmpeg-4.3.1-libfdk_aac, vdr-plugin-hbbtv.

  • Ich hoffe, dann funktioniert die Navigation (up und down) im Browser noch?

    Klar. PageDown und PageUp sind ja andere Tasten. Die waren schon immer im Browser konfiguriert, wurden vom Plugin aber nie an den Browser übertragen. Zumal mir nicht klar, welche Seiten damit überhaupt umgehen können und was dann passieren soll.

  • zb. auf ARD rote taste --> tagesschau --> gelbe taste und dann in der Mediathek irgened einen Film auswählen.

    Sollte jetzt funktionieren (Browser update). Mich wundert aber irgendwie, warum es noch eine andere Mediathek gibt? Bisher habe ich noch keinen kürzeren Weg gefunden, genau dieses zu öffnen. Die Benutzerführung auf dem Ersten ist irgendwie verbesserungswürdig.

    Mehrere gelbe Buttons mit dem Label Mediathek, aber unterschiedliche Ziele.

  • A bit strange? When I started the plugin I thought that I had a browser and a working extension and that I just had to take care of the communication between the browser and the plugin. I was so naive and so phenomenally wrong. Every page and every button has some speciality that needs to be considered.

    But giving up is not an option. Embrace the challenge... 8)

  • Seufz...

    Das will ich RTL testen und bekomme SSL Handshake Fehler. Aber zum Glück warnen auch Chrome und Firefox vor der Verbindung. Das kann man dem Browser nicht anlasten. Nur falls ihr auch solche Fehler habt.

  • Hi,

    RTL did probably mess up there content hosting, the only way I see is to add an exeption for cdn.digitaltext.rtl.de.

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

  • Hallo Zabrimus,


    nach längerer Wiedergabe aus der ARD-Mediathek funktionieren die Wiedergabetasten nicht mehr (Pause, Stopp,, FF).


    Gruß

    Murry

  • Hallo!


    Hat jemand den hbbtv-browser mit dem nvidia 450 am laufen?


  • Ich habe jetzt festgestellt das hbbtv mit softhddevice-cuvid zum Teil funktioniert. Leider werden keine Videos aus der Mediathek abgespielt:



    Gruß

    Murry

  • Mal wieder ein Lebenszeichen zum Plugin und dem Browser.


    Aber vorab eine Warnung: Der unten erwähnte Branch ist noch nicht für den Produktivbetrieb geeignet. Es gibt da etwas, was mich massiv stört und für das ich noch keine Lösung habe. Aber dazu später mehr.


    Es gibt für das Plugin und den Browser jeweils den Branch "encoding", der ursprünglich dazu gedacht war, ein paar meiner Ideen zu verfolgen. Der Branch hat ein paar Besonderheiten gerade im Bezug auf den Browser.

    • Mitgeliefert wird eine customized CEF-Version, bei der FFmpeg nicht mehr statisch gelinkt ist (aus Lizenzgründen). Eine eigene Version von libffmpeg.so muss entweder selbst kompiliert werden (mit h264 und aac Decoder und evt. mehr) oder man verwendet ein Ubuntu-Package oder extrahiert aus dem Package die dynamische Library. Mehr dazu im Readme des Branches.
    • ffmpeg-dev (libav* Header und Libs) müssen zum kompilieren vorhanden sein.
    • Chromium/Chrome nutzen nur vaapi. Besitzer von NVidia-Karten sollten einen vaapi-vdpau Wrapper installieren. Die Links zu den Repositories, die ich gefunden habe, sind auch im Readme zu finden.
    • Die Videos und auch Dash werden jetzt direkt im Browser abgespielt. Für Dash nutze ich aktuell nur den shaka-player. Per default wird dashjs verwendet aber die Kommandozeile ist einfach "--dashplayer=shaka" oder "--dashplayer=dashjs". Den Shaka-Player nutze ich hauptsächlich, weil ich weiß, daß damit auch DRM Videos abgespielt werden können.
    • Nach einigen Debug-Sessions habe ich herausgefunden, wie der UserAgent am Besten zu setzen ist, damit ein paar DRM Prüfungen auf verschiedenen Seiten erfolgreich durchlaufen werden.
    • Aber: Für DRM kann ich keinen Support leisten, noch genau erzählen, wie ich es gemacht habe. Die Logausgaben beim Start des Browser können helfen und zusätzlich die Hinweise in cef_web_plugin.h am Ende der Datei oder im CEF Forum findet man auch Andeutungen.
    • Der Netzwerk-Code wurde komplett entfernt und die Kommunikation zwischen Browser und VDR findet nur noch über shared memory statt. Der Teil ist noch nicht sauber und es hakt noch ziemlich.


    Nun zu dem Problem, das einen Produktiveinsatz eigentlich verbietet.

    Aktuell sieht der Durchlauf der Videos so aus:

    1. Der Browser decodiert Video/Audio (und nutzt dabei die erwähnte libffmpeg.so)
    2. Die Video/Audio Daten werden als ARGB und PCM (FLTP) mitsamt PTS an meinen Teil übergeben
    3. Die Audio/Video Daten werden wieder nach H264/AAC encoded und über das Shared Memory als TS an den VDR übergeben, der das dann abspielt.

    Das Problem ist die unglaublich nervig hohe (im Sekundenbereich >> 2) Latenz, bis z.B. das OSD im Browser über das Encoding im VDR landet. Und ich habe die Ursache noch nicht gefunden und schon gar nicht abstellen können. Das In-Video-OSD ist so nicht wirklich nutzbar, weil der Cursor im Browser schon an der richtigen Position steht, aber man dies im VDR nicht sehen kann. So kann es pasieren, daß Aktionen ausgeführt werden, die man gar nicht machen wollte, aber die im VDR eben just zu dem Zeitpunkt zu sehen sind.

    Schaue ich mir das Video/OSD im Chrome Developer an oder lasse auch nur das Video im VDR OSD laufen (Bild für Bild), ist alles wunderbar schnell und es gibt keine wahrnehmbare Latenz. Beides ist nur gar keine Lösung.


    Ich würde gerne auf das Encoding komplett verzichten und dem VDR die decodierten Daten (ARGB, PCM mitsamt PTS) geben und eines der Ausgabedevices kann sich dann um die Ausgabe/Wiedergabe kümmern. Allerdings habe ich dazu keine Möglichkeit gefunden. VDR will TS oder PES Pakete und damit ist das Encoding wieder im Spiel.

    Selbst für die Ausgabe von Video/Audio sorgen und das auch noch synchron ist nicht so mein Ding und würde wahrscheinlich schief gehen. Das können andere besser als ich.


    Die alte Lösung dem ffmpeg die Video-URL zu übergeben und einfach nur transcoding zu machen hat ganz andere Probleme: DRM fällt aus und MPEG-Dash wird nicht sauber unterstützt und es gäbe schon wieder Netzwerkcode, den ich erfolgreich beseitigt habe.


    Hat irgendjemand ein Idee dazu oder weiß Abhilfe?


    Zabrimus

  • I thought about mpv plugin, but there exists several problems:

    I don't have a file or an URL. At hand i have only the raw video data (ARGB or YUV as desired) and audio data (currently PCM floating point planar) including the PTS. If i want to write the data to an file, the file will be really huge, nearly 100 MByte per second. Therefore i used shared memory and avoided as much copying as possible.


    The OSD will be rendered as fast as possible and this looks good and there exists no mention-able delay.

    But the idea of a service in the output plugins (softhd*) sounds good. I don't need a decoder or something like this, i need the possibility to "send" decoded audio and video data to the output device and the output device could play both as today (but without decoding something).

    Is this possible?


    I think, the delay happens in the softhd* plugin, because if i stop the browser and don't send data anymore, the video/audio still plays several time, before playing stops. I assume that there exists some buffering. And any interaction in the page will only be shown, if the current buffer is empty or filled with new data.


    A side note i discovered today: Youtube already has an application which is used for TV: https://www.youtube.de/tv

    After some changes in the browser regarding key events, the application works as a charme. Only one or two keys has still to be mapped to get better results.

  • Yes, I also use externalplayer plugin and chromium to play YouTube in kiosk mode.

    Dependence on the output plugin is not very good, the ability to use unadapted plugins is lost (xineliboutput).

    Maybe make a separate output to the screen, based on code of softhd* plugins?

  • A hard dependency is really not a good idea. I think of command line parameter of the plugin to switch to a fast mode (currently not existing, raw audio and video) if supported and the currently existing implementation to encode to TS and use the VDR functionality as is.

    I will take a look to the softhd* plugins if i'm able to find a solution. Because OSD is near the functionality i need.

  • Kannst du die RGB Daten nicht mit ffmeg einfach in ein RAW format wandeln lassen. Gibt es keinen "codec" der RAW daten durchreicht ? Dann würde das encodieren entfallen und dennoch der weg zum Outputplugin der alte bleiben. Beim Ton sollte das noch als PCM Stream auf jeden Fall gehen.