[vdr-plugin-webbridge] Bridge WebSocket <-> SVDRP

  • Ursprünglich hatte ich geplant eine Verbindung Browser <-> VDR zu implementieren um mittels Firefox Addon und iptv-Plugin Video-URL an das iptv-Plugin zu übermitteln um das Video abzuspielen. Das funktioniert auch so leidlich (das Addon ist mehr Baustelle) und hat den Charme von Live-TV. Ich bin mir nicht sicher, ob mir das wirklich gefällt.

    Als Nebenprodukt ist eben das webbridge Plugin entstanden, daß einen WebSocket Server im VDR bereitstellt, mit dem über WebSockets (z.B. aus dem Browser) direkt SVDRP Kommandos ausgeführt werden können.


    Sehr simple Demonstrationen können im test-Verzeichnis gefunden werden. Dort befinden sich ein C++ Client und auch eine standalone HTML Seite.


    Repository: https://github.com/Zabrimus/vdr-plugin-webbridge


    Vielleicht kann jemand etwas damit anfangen. Das ist kein(!) Endkunden-Plugin, sondern gilt eher als Basis für andere Entwicklungen. Vielleicht komme ich noch dazu meine eigene Erweiterung da noch sauber zu integrieren (OSD, LiveTV).

  • Ich wollte das gerade mal paketieren und bin über mehrere Sachen gestolpert:


    yaVDR-Dokumentation (Ceterum censeo enchiridia esse lectitanda.)

  • Die .dependencies ist eigentlich in .gitignore vorhanden, da ging wohl etwas mit der Reihenfolge der commits durcheinander.

    Den grep im Makefile habe ich echt übersehen.

    Bei mir gab es mit der "lib.exe" immer nur eine Warnung, die ich geflissentlich ignoriert habe, aber abbrechen sollte der Build natürlich nicht.


    Ich habe alles übernommen und das git aktualisiert. Danke!

  • Meine Versuche mit Live-TV und OSD im Browser habe ich im Branch tv untergebracht. Das ist bei weitem noch nicht produktionsreif und es klemmt häufiger, als mir lieb ist.

    Was nicht geht: iptv, Aufnahmen und wahrscheinlich vieles mehr. In der remote.conf sollten neue Einträge gemacht werden. Minimal sinnvoll sind z.B.

    Im Browser dann einfach nur <vdr ip>:<konfigurierter port von webbridge> aufrufen und die Show geniessen. Der automatische Start von Videos sollte für die <vdr ip> eingeschaltet werden. Im Firefox hatte ich dazu in der Adressleiste einen kleinen Button neben der URL.


    Alles eine Baustelle und nicht ärgern, wenn ein VDR Neustart erforderlich ist, weil der Wechsel des Primärdevices (Browsertab schliessen, webbridge -> softhddevice) mal wieder nicht funktioniert. Meistens geht es, aber eben nicht immer.


  • Mal eine Frage dazu, muß im Firefox dazu ein Plugin laufen?


    denn ich bekomme immer nur folgendes angezeigt.


    Gruß,

    Roland

    https://www.minidvblinux.de/

    1x OctopusNet mit 8x DVB-C
    1x Raspberry 4 MLD 6.0 SATIP (softhddevice-drm )

    1x RockPi 4 MLD 6.0 SATIP (softhddevice-drm )

    1x Raspberry 3 mit SATIP MLD 5.4

    1x Raspberry 2 mit STAIPMLD 6.0

    1x Raspberry 1 (staubt gerade so vor sich hin) ;)
    1x ODROID N2+ mit SATIP MLD6

    1x ODROID N2 L mit SATIP MLD6

    1x Zotac CI327 MLD 6.0 SATIP (softhddevice)

    Edited 2 times, last by rfehr ().

  • Mal eine Frage dazu, muß im Firefox dazu ein Plugin laufen?

    Nein, es muss dazu kein Plugin installiert sein. Die Verbindung scheint zu klappen, zumindest wird die index.html geladen. Funktioniert nur das Video oder auch das OSD nicht?

    Kannst du im VDR-Log irgendeinen Fehler finden? Oh. Ich sehe gerade, daß da noch ein paar printf drin sind. Also auch die Konsole im Auge halten.

    Befinden sich im Verzeichnis /tmp/vdr-live-tv-stream die m3u und die ts-Dateien? Wobei ich mich gerade frage, ob ich das Verzeichnis manuell angelegt habe oder ob ffmpeg das anlegt?


    Mist.... Gerade getestet. Das Verzeichnis /tmp/vdr-live-tv-stream wird nicht automatisch angelegt :( Das ist ganz schlecht und ein Bug. Kannst du es mal manuell anlegen und dem VDR Schreibzugriff geben.

  • Geht beides nicht keine Video und OSD.


    im /tmp/vdr-live-tv-stream liegen auch keine Dateien.


    Gruß,

    Roland

    https://www.minidvblinux.de/

    1x OctopusNet mit 8x DVB-C
    1x Raspberry 4 MLD 6.0 SATIP (softhddevice-drm )

    1x RockPi 4 MLD 6.0 SATIP (softhddevice-drm )

    1x Raspberry 3 mit SATIP MLD 5.4

    1x Raspberry 2 mit STAIPMLD 6.0

    1x Raspberry 1 (staubt gerade so vor sich hin) ;)
    1x ODROID N2+ mit SATIP MLD6

    1x ODROID N2 L mit SATIP MLD6

    1x Zotac CI327 MLD 6.0 SATIP (softhddevice)

  • Geht beides nicht keine Video und OSD.

    Läuft der VDR lokal? Ich fürchte nicht, oder?

    Ich muss der index.html noch beibringen, den Host/Port dynamisch zu setzen.

    Kannst du mal in der index.html den Eintrag auf den VDR Host setzen:

    Code
    let osdSocket = new WebSocket("ws://localhost:3000/tv");
  • Top das war es, jetzt habe ich ein Live Bild.

    https://www.minidvblinux.de/

    1x OctopusNet mit 8x DVB-C
    1x Raspberry 4 MLD 6.0 SATIP (softhddevice-drm )

    1x RockPi 4 MLD 6.0 SATIP (softhddevice-drm )

    1x Raspberry 3 mit SATIP MLD 5.4

    1x Raspberry 2 mit STAIPMLD 6.0

    1x Raspberry 1 (staubt gerade so vor sich hin) ;)
    1x ODROID N2+ mit SATIP MLD6

    1x ODROID N2 L mit SATIP MLD6

    1x Zotac CI327 MLD 6.0 SATIP (softhddevice)

  • Ich habe folgende Änderungen committed (aufgrund der aktuellen Probleme etwas vorgezogen):


    - Das Plugin kennt jetzt den Parameter -h/--host, der neben -p/--port benutzt wird, um den VDR Host/Port in das index.html zu injizieren, damit die websocket Verbindung funktioniert.


    - Das Zusammenschrauben der ffmpeg Commandline ist ausgelagert. Es werden jetzt erst die Scripte

    Code
    plugins/webbridge/stream_live.sh
    plugins/webbridge/stream_recording.sh

    aufgerufen (Achtung: stream_recording.sh funktioniert noch nicht), die keine andere Aufgabe haben, als die ffmpeg Commandline auf der Console auszugeben, die das Plugin dann liest und damit den eigentlichen Aufruf macht.

    Damit ist es möglich einfach und schnell den Aufruf zu ändern oder Spezialitäten einzubauen oder irgendetwas anderes.

    Das stream_live.sh bekommt als Parameter genau den Eintrag aus der channels.conf für das Live-TV und nutzt aktuell die vpid um zwischen Radio und Video transcode zu unterscheiden.


    Firefox scheint etwas eingeschränkt zu sein, was den Audio Codec angeht. Bei ac3 z.B höre ich nix, deshalb wird im Script noch ein transcode nach aac gemacht.

  • Top,


    wir (MLD) testen gerne weiter :)


    Gruß,

    Roland

    https://www.minidvblinux.de/

    1x OctopusNet mit 8x DVB-C
    1x Raspberry 4 MLD 6.0 SATIP (softhddevice-drm )

    1x RockPi 4 MLD 6.0 SATIP (softhddevice-drm )

    1x Raspberry 3 mit SATIP MLD 5.4

    1x Raspberry 2 mit STAIPMLD 6.0

    1x Raspberry 1 (staubt gerade so vor sich hin) ;)
    1x ODROID N2+ mit SATIP MLD6

    1x ODROID N2 L mit SATIP MLD6

    1x Zotac CI327 MLD 6.0 SATIP (softhddevice)

  • Im tv-Branch habe ich einige Änderungen vorgenommen:

    - tiny-process wurde ersetzt durch pstreams

    - Aufnahmen werden abgespielt. Allerdings machen Sprünge in den Aufnahmen noch Probleme. Ich weiß noch nicht, wie ich FFmpeg und videojs davon überzeuge, daß alles so seine Richtigkeit hat.


    Bei den Scripten, die aufgerufen werden um den eigentlichen FFmpeg Aufruf zurückzugeben, hatte ich Bedenken. Falls jemand die Script ändern kann, kann alles im System aufgerufen werden. Aber falls jemand tatsächlich die Schreibrechte auf die Scripte hat, muss er die Scripte dazu nicht ändern, sondern kann direkt alles machen, was dem User gestattet wurde.

    Liege ich da falsch oder sieht jemand Bedenken, an die ich nicht gedacht habe? Zur Sicherheit würde ich sowieso empfehlen, die Schreibrechte einzuschränken. 777 war noch nie eine gute Idee.


    Ich denke darüber nach, dasselbe auch in iptv zu machen. Mit pstreams habe wesentlich mehr Kontrolle über den Prozess und FFmpeg/vlc Aufrufe konfigurierbar zu machen ist auch keine schlechte Idee.

  • Den tv Branch habe ich in den master Branch gemerged. Hinzugekommen sind 2 neue Plugin Parameter, mit den Funktionalität abgeschaltet werden kann, falls dies gewünscht ist:

    Code
    -s/--disable-svdrp   Schaltet die SVDRP Bridge ab
    -o/--disable-osd     Schaltet die OSD/TV Funktionalität ab

    Man kann auch beide Parameter gleichzeitig nutzen, nur wäre es dann eigentlich sinnvoller, das Plugin überhaupt gar nicht erst zu laden.

Participate now!

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