[Announce] HbbTV plugin / offscreen browser v0.0.9

  • Hallo,


    das HbbTV Plugin und der Browser haben einen Status erreicht, von dem ich denke, das er schon brauchbar ist. Es funktionieren noch nicht alle Sender und Seiten. Ich habe auch den Eindruck, daß mein Kabelprovider nicht alle HbbTV Seiten bzw. URLs im Strom liefert. Über Hinweise zu weitere Seiten, die noch nicht vorhanden sind, würde ich mich freuen. Mehr dazu weiter unten.

    Die Abhängigkeiten des Browsers und des Plugin habe ich versucht soweit wie möglich zu reduzieren bzw. Teile mitzuliefern. Beides wird immer zusammen gebraucht.

    Videos können abgespielt werden (inkl. des OSD des Senders). Dazu wird ffmpeg benötigt, das evt. das Video transkodiert oder im Optimalfall nur nach TS kopiert.

    Github: vdr-plugin-hbbtv

    Voraussetzungen:

    libswscale aus dem FFmpeg Paket


    Build:

    Wie jedes andere Plugin auch:

    make

    make install

    Github: vdr-osr-browser

    Voraussetzungen:

    ffmpeg, ffprobe, libcurl


    Auf Github habe ich auch eine kompilierte Version bereitgestellt, mit der ein schneller Test des Plugins/Browser möglich sein sollte.


    Build:

    Da gibt es mehrere Möglichkeiten, die auf der Github-Seite angesprochen werden. Meine Empfehlung ist die Installation des CEF (Chrome Embedded Framework) in das Verzeichnis thirdparty. Damit werden keine Dateien irgendwo ins System kopiert oder installiert und der entstehende Release-Ordner enthält alles, was zum Start und zur Laufzeit des Browsers notwendig ist. Wohin der Release-Ordner kopiert wird, bleibt dem Anwender überlassen. Das prepare_release lädt ein vorkompiliertes Binary von CEF des automatischen Build von Spotify in den thirdparty-Ordner und kompiliert die notwendige Library. prepare_release ist nur einmal notwendig.

    make prepare_release

    make release


    Der Browser kann intern durch das Plugin gestartet werden, oder extern durch einen anderen Mechanismus. Ich empfehle die interne Konfiguration, da damit auch ein Restart des Browsers im Fehlerfall erfolgt. Per SVDRP kann der Browser dann auch gestoppt/gestartet werden.


    Konfiguration des Plugins für eine interne Verwendung des Browsers:

    Code
    1. [hbbtv]
    2. -s
    3. -p <pfad zum browser>/vdrosrbrowser
    4. #-c "--debug"
    5. -l <pfad zum logfile>/browser.log

    Der Parameter -c ist optional und kann entfallen.



    Konfigurationsdateien:

    Das Plugin enthält nicht viele Dateien. Es sind z.B. hbbtv_urls.list, menu_10_Mediathek und menu_20_EPG.

    Die hbbtv_urls.list enthällt alle URLs, die ich aus den Sendern, die empfange, extrahieren konnte. Damit sollten die Seiten im HbbTV-Menu schneller verfügbar sein. Z.B. habe ich bei ARD festgestellt, daß es z.T. etwas länger dauern kann, bis die URLs verfügbar sind. Das Problem ist damit gelöst.

    Die beiden Dateien menu_10_Mediathek und menu_20_EPG sind nur Beispiele für Bookmarks von mir. Dazu wurde die komplette URL-Liste durchsucht und Einträge rauskopiert. Sie können auch gelöscht, bearbeitet werden. Oder es können neue Dateien mit eigenen Wünschen angelegt werden. Screenshots siehe weiter unten.


    In der hbbtv_urls.list werden alle URLs gespeichert, so beim Kanalwechsel so aufgefunden werden. Diese Datei wird auch regelmäßig gespeichert. Und genau über Einträge, die ich nicht habe, würde ich mich freuen.


    Der Browser kann ebenfalls in Grenzen konfiguriert werden.

    vdr-osr-ffmpeg.config:

    Hier sollte der Pfad zu ffmpeg/ffprobe auf jeden Fall stimmen und müsste ggfs. angepasst werden. Die Konfigurationen zum Transcoding können ebenfalls angepasst werden, falls gewünscht.


    vdr-osr-browser.config:

    Diese Konfiguration sollte passen, falls CEF wie oben beschrieben in das thirdparty-Verzeichnis installiert wurde. Eine Änderung hier ist nur sinnvoll, falls man CEF irgendwo anders installiert hat.


    Red Button:

    Der Eintrag schaltet den Browser in den HbbTV Mode und präsentiert die Anzeige des Red-Buttons.




    Der Eintrag Mediathek entspricht der Liste aus der bereits erwähnten Datei menu_10_Mediathek.




    Ein Beispiel für den Red-Button:



    Nach drücken des Roten Knopfes der Fernbedienung sieht es dann so aus:


    Die Mediathek funktioniert auch:


    Oder auch das Abspielen von Videos:



    Wie üblich ist das Plugin/der Browser nie richtig fertig und kann weiter verbessert werden. Über Kommentare/Fehler/Wünsche würde ich mich freuen.

    Verschiedene Sender funktionieren nicht (z.B. DMAX), die aber auch in der Chrome HbbTV Extension schon nicht funktionieren. Mir ist es nicht gelungen, herauszufinden, woran die Darstellung scheitert, bzw. welche Objekte oder sonstiges im Javascript-Teil noch fehlen oder nicht implementiert sind. Es ist etwas mühselig Javascript-Fremdcode zu debuggen, zumal ich mit Javascript nicht unbedingt befreundet bin ;)


    Noch warte ich auf Kommentare meiner schärfsten Kritikerin (dem Hausvorstand *g*).


    Zabrimus

  • Browser:


    Code
    1. In file included from main.cpp:23:
    2. main.h:4:10: fatal error: include/cef_app.h: No such file or directory
    3. 4 | #include "include/cef_app.h"
    4. | ^~~~~~~~~~~~~~~~~~~
    5. compilation terminated.

    Edit:

    nach


    make prepare_release

    kommt bei

    make release

    Code
    1. g++: error: thirdparty/spdlog/buildbin/lib/libspdlog.a: No such file or director

    Edit2:


    Der Pfad heisst bei mir:

    thirdparty/spdlog/buildbin/lib64/libspdlog.a


    Edit3:

    mit einem link lib -> lib64 compiliert es.


    vdr-User-# 755 to_h264 chk_r vdr-transcoding

    The post was edited 3 times, last by jsffm ().

  • Mist. Ich habe doch extra mit einem System getestet, daß völlig unbefleckt war.

    Hast Du irgendwann mal die alten Pakete aus dem Ubuntu ppa installiert?

    Ruft du make im Verzeichnis auf, oder per -f Makefile aus einem anderen Verzeichnis?


    Geht das prepare_release schief oder erst das release Target?


    Warum der Logger allerdings nicht kompiliert wurde.... Funktioniert denn ein "make buildspdlog"?


    Ich bräuchte mal die build logs. Im Moment kann ich nicht nachvollziehen, was wo schief geht

  • Ich nutze kein Debian-System, sondern gentoo, Alles ok bis jetzt.


    vdr-User-# 755 to_h264 chk_r vdr-transcoding


  • Sieht schon mal ganz gut aus


    Edit:


    Video abspielen geht auch :)


    vdr-User-# 755 to_h264 chk_r vdr-transcoding

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

  • Sieht prima aus.


    Allerdings habe ich beim abspielen von Filmen aus der Mediathek immer wieder Fehler in den TS Blöcken. Dann skipt der VDR den stream bis zum nächsten Startcode. Und mein plugin beschwert sich das die Frames zu langsam kommen uns dupped einzelne Frames. Am Internetzugang kann es bei 100MBit nicht liegen :-)


    PS: den Fehler mit dem Pfad zu libsdplog.a hatte ich auch.


    Tolle arbeit das gibt dem VDR echten Mehrwert.


    jojo61


    Und noch ein Nachtrag:

    es werden extrem viel Logs beim schauen eines Videos geschrieben (siehe unten). Und wenn ich das Video abbreche bleibt das Logschreiben nicht stehen bis ich noch einmal das hbbtv plugin im Menü aufrufe, Sieht so aus als ob er das abbrechen des Videos nicht mitbekommt.


  • Bei DVB-T gibt es Sender, die per HbbTV zugeführt werden, bei uns z.B. WDR, da kommt dann dieses:



    vdr-User-# 755 to_h264 chk_r vdr-transcoding

  • mit einem link lib -> lib64 compiliert es.

    Der Link sollte jetzt automatisch eingefügt werden.


    es werden extrem viel Logs beim schauen eines Videos geschrieben (siehe unten).


    Da habe ich vergessen, das Debug-Flag für die HbbTV-Javascript auszuschalten. Jetzt muss ich mir nur noch einen Weg überlegen, diese wieder einzuschalten. Jedesmal neu bauen gefällt mir nicht richtig.


    Allerdings habe ich beim abspielen von Filmen aus der Mediathek immer wieder Fehler in den TS Blöcken

    In einer alten Version habe ich ffmpeg (bzw. die Libs) als Library eingebunden und alles selbst transkodiert und dann kamen Beschwerden über bestimmte Videos, die nicht liefen. Das lag aber daran, daß in den Sourcen dts/pts z.T. sehr seltsam waren und Sprünge nach vorne und hinten aufwiesen. Der Versuch, das zu fixen ging gewaltig schief und dann bin ich auf den reinen Aufruf von ffmpeg umgestiegen, der diese Sprünge viel besser beseitigen kann.


    Der Flow eines Videos sieht so aus:

    - ffmpeg liest den HTTP-Stream (meist mp4 mit h.264/aac) und entweder wird der Stream 1:1 kopiert und nach TS gewandelt oder eben nach h.264/aac transkodiert. Die Geschwindigkeit des echten Transkodieren hängt dann stark vom Rechner ab und deshalb gibt es die Möglichkeit das in der Config zu beinflussen.

    - der TS-Stream von ffmpeg wird eingelesen und per nng an VDR gesendet

    - VDR liest den Stream und spielt ihn ab


    Jetzt wird es allerdings schwierig zu untersuchen, wo genau in der Kette, evt. die Performance in die Knie geht oder ob es am Video selbst liegt. Die maximale Nachrichtengröße zwischen Browser und VDR liegt zwar gerade mal bei 32 Kbyte, aber eigentlich lief es bisher zufriedenstellend.


    Bei DVB-T gibt es Sender, die per HbbTV zugeführt werden, bei uns z.B. WDR, da kommt dann dieses:


    Genau das hatte ich bisher noch nicht gesehen. Kannst Du die URL in den Logs irgendwo finden? In der Datei hbbtv_urls.list befinden sich die URLs, die ich bei mir extrahiert hatte. Der VDR sendet den aktuellen Kanal an den Browser und nutzt evt. meine URL.

    Ich kann nur raten: Vielleicht passt die URL nicht zu der Channel-information.


    Vielleicht könntest Du die Datei hbbtv_urls.list löschen/verschieben und es dann nochmal versuchen um ganz sicher zu gehen. Im HbbTV-Menu gibt es auch den Eintrag "Channel URL List", der genau die URLs enthält, die vom Sender geliefert wurden bzw. die aus der hbbtv_urls.list stammen.


    Vielleicht ist auch die Default NID 1 (nicht die ONID aus der channels.conf) nicht passend zur URL. Ich habe nur noch nicht herausgefunden, wie ich an die NID komme.


  • Das bekomme ich beim Abspielen auf Arte+7


    vdr-User-# 755 to_h264 chk_r vdr-transcoding

  • In vdr-osr-ffmpeg verwende ich die Parameter


    Quote

    encode_video = -c:v copy

    encode_audio = -c:a copy

    funktioniert bislang recht gut.


    vdr-User-# 755 to_h264 chk_r vdr-transcoding

  • Das bekomme ich beim Abspielen auf Arte+7

    Ich musste erstmal schauen was Arte+7 überhaupt ist. Ich bräuchte bei solchen Fehlern die URL, damit ich erstmal schauen kann, ob in der Chrome Extension die Seite dargestellt werden kann.

    In vdr-osr-ffmpeg verwende ich die Parameter

    Das sind die Standardwerte, die auch nicht geändert werden können, wenn der Eingangsstream schon h.264/aac codiert ist. Die Konfiguration wird nur dann verwendet, wenn eines der Codecs nicht h.264 oder aac ist.


    Wenn der Film läuft bekomme ich kein Player OSD mehr angezeigt.

    Drück mal die Pfeil-Hoch Taste. Dann müsste das OSD wiederkommen. Das OSD wird während des Abspielens natürlich irgendwann ausgeblendet. Darauf habe ich auch keinen Einfluss.


    Ich muss mal schauen, warum der Stop-Event vom VDR nicht zum Browser gelangt.

  • Ich bräuchte bei solchen Fehlern die URL

    Wo finde ich die?


    vdr-User-# 755 to_h264 chk_r vdr-transcoding

  • Hilft das weiter?


    arte HD (T)~~~11~~~2~~~5~~~arte +7~~~http://www.arte.tv/~~~static/hbbtvv3/current/index.xhtml?pf=prod&page=HOME&lang=de_DE~~~


    vdr-User-# 755 to_h264 chk_r vdr-transcoding

  • Drück mal die Pfeil-Hoch Taste. Dann müsste das OSD wiederkommen. Das OSD wird während des Abspielens natürlich irgendwann ausgeblendet. Darauf habe ich auch keinen Einfluss.


    Ich muss mal schauen, warum der Stop-Event vom VDR nicht zum Browser gelangt.

  • Build:

    Da gibt es mehrere Möglichkeiten, die auf der Github-Seite angesprochen werden. Meine Empfehlung ist die Installation des CEF (Chrome Embedded Framework) in das Verzeichnis thirdparty.


    Hallo Zabrimus,

    würde gerne auch testen, leider läuft's noch nicht. "Browser is not running"

    Wo genau soll denn das CEF installiert werden?


    Code
    1. Jun 8 10:18:05 vdr-wz vdr: [16435] [hbbtv] Attached HbbTV ait filter to device 2, vdrDev=3 actDev=2, Sid=0xef11
    2. Jun 8 10:18:07 vdr-wz vdr: [16435] [hbbtv] browser is not running, command 'CHANNEL {"channelType":25,"ccid":"ccid://1.0","nid":1,"dsd":"","onid":1,"tsid":1057,"sid":61201,"name":"VOX HD","longName":"VOX 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}' will be ignored
    3. Jun 8 10:18:07 vdr-wz vdr: [16435] ERROR: Browser is not running!

    Gruß

    machtnix


    Testsystem: ansible focal

  • Ist das -p <pfad zum browser>/vdrosrbrowser korrekt konfiguriert?


    vdr-User-# 755 to_h264 chk_r vdr-transcoding

  • Bei mir heisst das vdrosrbrowser, nicht vdrbrowser


    vdr-User-# 755 to_h264 chk_r vdr-transcoding