DDCI: gelegentlich CA-Probleme beim Start

  • Hallo,


    ich schlage mich schon seit einiger Zeit mit Problemen bei der Initialisierung meines CAM's während der Boot-Phase herum. Dies führt dazu, dass Aufnahmen fehlschlagen - weshalb das Ganze irgendwie schon behindert. Geholfen habe ich mir bisher damit, in solchen Situationen den vdr-Prozess neu zu starten - danach lief es dann i.d.R. ohne Probleme.


    Umgebung:

    yavdr-ansible undter 18.04 Ubuntu mit HWE-Kernel 5.3.0, vdr 2.4.1, ddci-Plugin, eine DD-DVB/C Karte mit angeschlossenem Doppeltuner- und CA-Modul


    Beim Boot werden die Karten sauber gefunden und eingebunden:

    Beim vdr-Start sieht auch noch alles gut aus:


    Aber dann kommt dann das:

    Code
    Jan 25 08:56:28 yavdr vdr[1951]: [2090] DDCI-Err: can't write to CI adapter (/dev/dvb/adapter2/ca0): Eingabe-/Ausgabefehler
    ...
    Jan 25 08:56:56 yavdr vdr[1951]: [1951] CAM 1: not ready, master (empty)
    Jan 25 08:56:56 yavdr vdr[1951]: [1951] not all CAM slots ready after 30 seconds


    Ab dann ist dann nichts weiter zu sehen - vdr schaltet auf einen Sender, wo er das CAM nicht benötigt und alle verschlüsselten Senden sind ab dann "nicht verfügbar".


    Lösung in dieser Situation: vdr-Prozess neu starten - danach klappt alles wie gewünscht.


    Witzigerweise funktioniert es in gefühlt 50% der Fälle auch ohne Probleme, was es leider schwer vermittelbar macht. Ich versuche mir irgendwie mit einem nach Möglichkeit anhand des Verhaltens indizierten Neustart des vdr-Prozesses im Boot-Verlauf zu helfen, aber eine Lösung ist das eher nicht.


    Hat hier noch jemand so ein Problem und wie könnte die Lösung aussehen? Sollte das ddci-Plugin hier vielleicht anders initialisieren oder wo kann ich ggf. noch "dran drehen"...?


    ...Hagen

  • Gibt es hier schon eine Lösung?

  • Mangels Hardware kann ich es nicht selber ausprobieren, aber eventuell ist es ein Timing-Problem und es könnte helfen beim Start zusätzlich auf den CA-Adapter zu warten (was die wait-for-dvb@.service bei yaVDR nicht macht, weil nicht jede DVB-Karte ein CA-Modul hat) - das sollte mit so einer Sytemd-Unit gehen:

    Die muss man dann noch für den gewünschten Tuner aktivieren, also z.B. systemctl enable wait-for-ca@0.service für das CA des ersten Tuners.


    Falls das nicht genügt, muss man sich vermutlich was einfallen lassen, wie man den Moment abpassen kann, wann das CI-Modul selbst betriebsbereit sit.

    yaVDR-Dokumentation (Ceterum censeo enchiridia esse lectitanda.)

  • Es ist definitiv ein timing Problem. Aber ich vermute, dass externes Warten nichts nützt, weil das CI erst nach dem Öffnen eine Firmware nachlädt.

  • Nachdem ich den code des ganzen Plugins umgegraben habe..


    Sehr wahrscheinlich muss mit neueren Treibern zuerst das ca device fd geöffnet werden

    und dann


    ioctl(fd, CA_RESET)

    Puts the Conditional Access hardware on its initial state. It should be called before start using the CA hardware.

    ausgeführt werden. Da dieses Plugin erst in cPlugin::Start() initialisiert, sollten die fds in cPlugin::Initialize() geöffnet

    werden und CA_RESET ausgeführt werden. Damit bleibt zum firmware laden genug Zeit bis zum cPlugin::Start() und das CI ist startbereit.


    edit: ich beende VDR dann gewollt und restarte vdr via runvdr script.

  • Für mich jetzt erledigt.

  • Nachdem meine Lösung für mich insofern funktioniert, dass das CI entweder auf Anhieb funktioniert oder per Plugin einen VDR restart forciert bis das CI zuverlässig funktioniert (externer restart von VDR via runvdr o.ä. !)


    Braucht das jmd außer mir? Ich würde das (nur) bei Bedarf als fork von ddci2 bereit stellen.

    Ich habe seit dem keine Problem mit live tv oder verpassten Aufnahmen mehr - aber um den Preis eines evtl. um einige Sekunden verzögerten (VDR Re-)Starts.

  • Ich habe das für mich zwischenzeitlich mit dem Tool "swatch" gelöst, welches auf bestimmte Zeilen im syslog reagiert und so Aktionen im Fehlerfall auslöst.


    Die entsprechende config sieht bei mir SO aus:

    Code: /etc/swatch/swatch_patterns.cfg
    watchfor /DDCI-Err: can't write to CI adapter/
          exec /root/ca-reset.sh
    watchfor /info: Kanal nicht verfügbar/
          exec /root/ca-reset.sh
    watchfor /skipped channels/
          exec /root/ca-reset.sh

    Bei den entsprechenden Events startet ein kleines Script, welches letztlich per svdrp-Tastendruck (mangels direktem Befehl) einen CA-Reset auslöst:

    Ich hab bei mir da noch den EPG-Reload drin (wegen der manchmal fehlenden EPG-Bilder am osd2web) - das ist aber eher Kosmetik...


    Seitdem das aktiv ist habe ich keine Probleme mehr mit verpassten Aufnahmen und finde das eigentlich ganz brauchbar. Einen kompletten vdr Restart würde ich eher nicht vorziehen.

Jetzt mitmachen!

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