Tuner oder Channel temporär anhalten ohne VDR zu stoppen?

  • Hallo, ich beschäftige mich grade intensiver mit VDR und habe das Programm für so einige Dinge schätzen gelernt. Grade auch Erweiterungen der Funktionalität sind durch das Plugin-System und die strikt Objekt-orientiere Programmierung sehr einfach möglich.


    Jetzt hab ich aber auch mal eine Frage: Ich hätte ab und zu mal den Wunsch, dass der VDR weiter läuft (und z.B. ein Plugin von mir ausführt), aber halt mal für eine bestimmte Zeit (also bis ich es ihm wieder erlaube) einfach mal KEINEN Sender empfängt. Also quasi ein disablen oder suspendieren des ganzen Tuners oder zumindest des momentan empfangenen Kanals.


    Ich kenne das Plugin suspendoutput, aber das macht NICHT das, was ich will. Denn suspendoutput zeigt zwar nichts mehr an, empfängt aber den Kanal immer noch, z.B. trudeln bei einem IPTV-Kanal weiter munter Daten ein, werden aber nicht dargestellt. Ich will aber (in dem Fall), dass auch der IPTV-Datenstrom beeendet wird. Dies zum Verständnis des Hintergrundes.


    Hab ich nur was übersehen oder gibt es dafür wirklich keinen Ansatz? Die passende API zu kennen würde mir reichen, wenn es sie gibt, ein Plugin kann ich mir dann selber schreiben.

  • Hi,

    Das geht in Richtung dynamite-Plugin. Ggf. kannst du damit weiter kommen.

    MfG Stefan

    Test-VDR1: HP rp5700 Fertigsystem, Core2Duo E6400, 2GB RAM, FF-SD C-2300, nvidia Slim-GT218 x1 | easyVDR 2.0 64Bit
    VDR3: in Rente

    VDR4: MSI G31M2 v2, Digitainer2-Geh., t6963c 6" gLCD, E5200, 2GB, 3TB WD Red, GT730, 2x TT S2-3200; easyVDR 3.5 64bit
    VDR5: Gigabyte
    GA-G31M-S2L, Intel E2140, Zotac GT730 passiv, Digitainer2-Geh., t6963c 6 " gLCD, 2 TB WD Red, 2x TT S2-3200 (an 1 Kabel) easyVDR 3.5 64bit
    VDR6:
    Intel E5200, GT630 passiv, F1 750 GB, t6963c gLCD, 2x TT S2-3200 | easyVDR 3.5 64bit
    VDR-User #1068
    www.easy-vdr.de

  • Danke! Das ist zwar nicht GANZ das, was ich suche, denn da geht es - wenn ich das README richtig verstehe - anscheinend mehr darum, den Zugriff von VDR auf USB-Tuner zu regeln (weil die ja "hotpluggable" sind), aber ich werde mir mal die Source angucken, wie dieses Plugin die Devices attacht und deattacht. Vielleicht finde ich dann einen Ansatz, um das auch auf beliebige Devices anwenden.

  • Eine Möglichkeit wäre das Primary Device zu wechseln - dbus2vdr hat z.B. ein nulldevice-Frontend, das nichts empfängt, wodurch der Tuner frei bleibt: https://github.com/flensrocker…dr/blob/master/README#L80


    Man kann den VDR ab Version 2.3.9 das Primary Device über einen SVDRP-Befehl wechseln lassen: http://git.tvdr.de/?p=vdr.git;…d5e2c83b620;hb=HEAD#l9199


    Das einzige worauf man achten muss, ist dass das nicht mit allen Skins klappt, weil die Crashen, wenn das erstellen von Pixmaps zur Anzeige des OSD nicht klappt.

    yaVDR-Dokumentation (Ceterum censeo enchiridia esse lectitanda.)

  • Tja, wie von mir schon befürchtet, scheint das nur mit einem Patch für VDR zu gehen, den das dynamite-Plugin selbst mitbringt und noch dazu einem recht umfangreichen, weil man anscheinend an mehreren Stellen eingreifen muss. Dann wird es wohl keine "wenig invasive" Lösung geben,schade!

  • anscheinend mehr darum, den Zugriff von VDR auf USB-Tuner zu regeln (weil die ja "hotpluggable" sind)

    Nein, mit dem dynamite-Plugin kann man während des laufenden VDR auch "normale" PCI(e)-Tuner ein- und aushängen.

    Einfach mal testen, ob es für Deine Zwecke funktioniert. ;)


    Ich mache das hier mit einfachen Scripts zum ein- und aushängen:

    Hier z.B. das AUS-hängen der Tuner 1..3:

    Code
    vdr-dbus-send /Plugins/dynamite plugin.SVDRPCommand string:'DETD' string:'/dev/dvb/adapter0/frontend0'
    vdr-dbus-send /Plugins/dynamite plugin.SVDRPCommand string:'DETD' string:'/dev/dvb/adapter1/frontend0'
    vdr-dbus-send /Plugins/dynamite plugin.SVDRPCommand string:'DETD' string:'/dev/dvb/adapter2/frontend0'


    Und genauso geht dann auch das EIN-hängen der Tuner, die dann wieder voll funktionsfähig sind:

    Code
    vdr-dbus-send /Plugins/dynamite plugin.SVDRPCommand string:'ATTD' string:'/dev/dvb/adapter0/frontend0'
    vdr-dbus-send /Plugins/dynamite plugin.SVDRPCommand string:'ATTD' string:'/dev/dvb/adapter1/frontend0'
    vdr-dbus-send /Plugins/dynamite plugin.SVDRPCommand string:'ATTD' string:'/dev/dvb/adapter2/frontend0'
  • Hi,

    Viele haben das auch genutzt um VDR tunerfrei zu starten und diese wenn deren lahmer Treiber geladen ist, einzuhängen.

    Pluginladereihenfolge beachten! Insbesondere bei bei Verwendung hier nicht zu besprechender Plugins kann es aber Probleme geben.


    Btw: der EPG-Scanner lässt sich auch abstellen.

    MfG Stefan

    Test-VDR1: HP rp5700 Fertigsystem, Core2Duo E6400, 2GB RAM, FF-SD C-2300, nvidia Slim-GT218 x1 | easyVDR 2.0 64Bit
    VDR3: in Rente

    VDR4: MSI G31M2 v2, Digitainer2-Geh., t6963c 6" gLCD, E5200, 2GB, 3TB WD Red, GT730, 2x TT S2-3200; easyVDR 3.5 64bit
    VDR5: Gigabyte
    GA-G31M-S2L, Intel E2140, Zotac GT730 passiv, Digitainer2-Geh., t6963c 6 " gLCD, 2 TB WD Red, 2x TT S2-3200 (an 1 Kabel) easyVDR 3.5 64bit
    VDR6:
    Intel E5200, GT630 passiv, F1 750 GB, t6963c gLCD, 2x TT S2-3200 | easyVDR 3.5 64bit
    VDR-User #1068
    www.easy-vdr.de

  • Noch eine Möglichkeit, einen cDeviceHook per Plugin anlegen, welcher keinen Kanal mehr empfängt (DeviceProvidesTransponder) und dann von allen devices die cReceiver detachen.

  • Eine Möglichkeit wäre das Primary Device zu wechseln - dbus2vdr hat z.B. ein nulldevice-Frontend, das nichts empfängt, wodurch der Tuner frei bleibt: https://github.com/flensrocker…dr/blob/master/README#L80


    Man kann den VDR ab Version 2.3.9 das Primary Device über einen SVDRP-Befehl wechseln lassen: http://git.tvdr.de/?p=vdr.git;…d5e2c83b620;hb=HEAD#l9199


    Das einzige worauf man achten muss, ist dass das nicht mit allen Skins klappt, weil die Crashen, wenn das erstellen von Pixmaps zur Anzeige des OSD nicht klappt.

    Danke, das ist der beste Ansatz, auf den bin ich nicht gekommen.


    Ich hatte zwischenzeitlich noch mit dem PluginManager experimentiert, das würde zumindest mal in Verbindung mit iptv funktionieren, weil das ein Plugin ist, aber nur wenn man sehr genau weiß, was das Plugin in welcher Function macht. Ist somit letztendlich ziemlich krude.


    Das mit dem Primary-Device ist sehr straight forward und dürfte unter dem Strich meine Erwartungen erfüllen, danke!

  • Hm, funktioniert beim genaueren Hinsehen doch nicht so gut mit dem Primary Device. Das ist dann so ähnlich wie mit dem suspendoutput, es wird halt nichts angezeigt, aber der Stream wird weiter empfangen und um den abzuschalten geht es mir eigentlich...

  • Hmm, es gibt ein cDevice::DetachAllReceivers(), und das würde möglicherweise sogar das tun, was ich will... aber ich möchte ja auch aus dem Zustand wieder raus kommen, es gibt aber kein cDevice::AttachAllReceivers()...


    Es gibt auch ein cReceiver::Activate(bool On), was sogar noch mehr so aussieht, als könnte es das tun, was ich will, aber auf den ersten Blick sehe ich keine Möglichkeit, alle Receiver zu enumerieren...

  • VDR sucht dann selbst bei Bedarf das device mit dem geringsten 'Impact' auf den laufenden Betrieb und hängt dort neue Receiver an.


    Du machst gar nichts mit Receivern anderer, die gehören jemand anderem.

    Es sei denn, du selbst brauchst Daten von einem Device. Dann hängst du deinen eigenen an ein device.

  • So, ich hab jetzt mein Problem ganz ohne Programmieren gelöst, mit einer ganz pragmatischen Idee: Ich habe einen Dummy-IPTV-Kanal eingerichtet, auf localhost, auf einem Port, wo sofort "port unreachable" kommt, weil da niemand lauscht. Wenn ich auf diesen Kanal "zappe", ist zwar das Zappen erfolgreich, aber da keine Daten kommen, werden auch keine dargestellt. Will ich, dass VDR wieder empfängt, schalte ich wieder auf einen echten Kanal. Mein Ziel ist erreicht.


    Trotzdem danke für die vielen Ideen, da hab ich noch einiges gelernt und werde da vielleicht noch die eine oder andere Sache ausprobieren.

  • Der Dummy-Eintrag in der channels.conf sieht bei mir wie folgt aus:


    Code
    Dummy;IPTV:999:S=0|P=1|F=HTTP|U=127.0.0.1:I:0:1=2:2=@4:3:0:4:5:6:0

    Bei mir lauscht aber nix auf dem HTTP-Port von localhost.


    Entscheidend ist, dass die Einträge für SID/TSID/ONID und die verschiedenen PIDs nicht 0 sein dürfen, dann funktioniert es nämlich nicht.

Jetzt mitmachen!

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