streamdev im Mischbetrieb 1.2.x und 1.3.x

  • Hi,


    ich habe folgende Konstellation:
    - Client mit VDR 1.2.5 und streamdev-0.3.3-pre4-gen, DVB-S
    - Server mit VDR 1.3.23 und streamdev-cvs von vor einiger Zeit, DVB-T


    Das CVS kompiliert nicht unter 1.2.5, das pre4 umgekehrt nicht im Server.


    Die folgenden Probleme beziehen sich vermutlich z.T. auf Inkompatibilitäten zwischen den Plugins, und z.T. zwischen den VDR-Versionen. Mich würde interessieren, was dazu so bekannt ist, welche Konstellationen klappen, und was man vielleicht doch noch tun kann, um Details auch in meiner Konstellation noch zu verbessern.


    Diese Anfrage hat übrigens eine Vorgeschichte, wens interessiert:
    http://vdrportal.de/board/thread.php?threadid=37888&sid=


    • Streaming funktioniert recht gut: die in der channels.conf eingefügten Kanäle vom Server (natürlich unter höheren Programmplätzen) kann ich ansehen. Normal durchschalten liessen sie sich allerdings erst nach einer Source-Änderung wie hier beschrieben:
      http://www.vdr-portal.de/board/thread.php?threadid=37828&sid=


    • Remote Recordings: hier ist nichts zu sehen. Im Log: Couldn't fetch recordings from ...
      Dies stört mich nicht weiter, da ich die Aufnahmen über Netz-Mount (also direkt im Filesystem) ansehe. Interessant wärs allerdings, wenn man darüber in den remote recordings einen Schneidevorgang (auf dem Server) auslösen könnte - wenns funktionieren würde - wäre das so? Kann man über diesen Menüpunkt normalerweise entfernte Aufnahmen ansehen?


    • EPG: das klappt nicht:
      ERROR: unexpected tag while reading EPG data: V 1125849900
      ERROR: Streamdev: Parsing EPG data failed
      Hier ist wohl das Format vom 1.3er VDR neu und vom 1.2er nicht mehr interpretierbar? Oder könnte man da was machen? Wäre sehr gut, da ansonsten Timerprogrammierung nat. mehr als mühsam ist.


    • Remote Timer: das wichtigste. Ich sehe vorhandene remote Timer und kann diese löschen. Allerdings wird als Programmplatz der vom Server angezeigt. Beim Editieren müsste ich dann den richtigen Programmplatz vom Client nehmen - sonst Fehlermeldung auf dem Server "channel ... not defined". Aber auch wenn ich das mache, bleibt ein Editieren wirkungslos! D.h. wenn ein Timer nicht genau passt, muss ich löschen und neuanlegen. Denn Anlegen klappt. Allerdings mangels EPG sehr aufwendig (Namenseingabe).


    Soweit also der Zustand - im Prinzip habe ich damit schon mal mein Ziel erreicht, den Server-VDR über den Client fernzusteuern (Timer) - allerdings noch etwas unkomfortabel. Bin dankbar für alle Hinweise, wie man das nun noch verbessern könnte. Allerdings bis auf weiteres unter Beibehaltung der Server- und Client-VDR-Versionen.

  • Noch zwei Beobachtungen nachgeliefert:


    - Ein remote Timer, der gerade aufnimmt, ist als solcher nicht erkennbar. Ausser über die Eigenschaft, dass er nicht gelöscht werden kann (kein Effekt), d.h. laufenden Aufnahmen auf dem Server lassen sich nicht abbrechen


    - Trotz fehlenden EPGs für die remote channels kann man auf einem lokalen Kanal den "remote schedule" aufrufen und bekommt das lokale EPG des laufenden Kanals angezeigt. Da man alle DVB-T Kanäle auch unter DVB-S hat, könnte man dadurch nur durch manuelle Änderung des Kanals im Timer doch bequem aus dem EPG heraus programmieren. Nur leider wird auf diesem Weg der Name der Sendung nicht in den Timer übernommen!

  • Tja, nach längerer Debugging-Session (meine C/C++ Kenntnisse sind nicht mehr ganz frisch): der Grund für die Nicht-Übernahme des Filenamens aus dem EPG in den remote-Timer ist gefunden und behoben.


    In client/remote.c im Zuweisungsoperator:
    cRemoteTimer &cRemoteTimer::operator=(const cRemoteTimer &Timer)
    wird der Filename nicht mitkopiert. Einzufügen ist:
    strncpy(m_File, Timer.m_File, sizeof(m_File));


    Sonst scheitert in client/menu.c in
    cStreamdevMenuEditTimer::cStreamdevMenuEditTimer(cRemoteTimer *Timer, bool New)
    die Zuweisung
    m_Data = *m_Timer;
    bzw. der Filename fehlt eben.


    Habe das bei mir im 0.3.3-pre4-geni gemacht, aber ist auch in der CVS-Version noch so! Hat das noch niemanden gestört!? Kann doch eigtl. bei niemandem je so funktioniert haben.
    Gibts einen Maintainer dem ich das zukommen lassen sollte?


    Ist zwar immer noch etwas holprig (neue Timer immer erst nach zweimal remote-timer-menu Aufruf sichtbar und was ich so oben alles beschrieben habe), aber langsam wird die Sache praktikabel.

  • Hallo hivdr,


    das mit den Remote Timern hat mich schon immer gestört. Leider kann ich nicht programmieren und Hilfe habe ich bis jetzt noch nicht gefunden.
    Dank Deinem Patch wird der Titel mit übernommen. Soweit so gut. Jetzt kann ich zwar den Timer am Server optimal programmieren, er wird nur leider nicht vom Server angenommen. Wenn ich die Remote Timer dann anschaue, ist der neue nicht vorhanden. Kannst Du Dir das erklären?


    Gruß
    mac66


    P.S.
    So wie es ausschaut, nutzen wir beide als einzige dieses Feature.

    VDR1: Activy 350 mit gen2VDR 1.1
    VDR2: Activy 300 mit gen2VDR 1.1
    VDR-Server: 1,5 GHz Celeron Mobile, 2 GB Ram, 2x 200 GB HD, 1x Siemens DVB-S 1.3, 2x TT-Nova, SuSE9.3

  • Hallo mac66,


    Geht bei Dir denn EPG? Oder machst Du es genau wie ich: das lokale EPG
    benutzen (über remote schedule auf einem lokalen Kanal) und dann von
    Hand den Kanal ändern?
    Also ich habs ja oben alles ganz genau beschrieben, wie es bei mir läuft.
    Und zwar dass ich neue Timer anlegen kann, aber keine editieren. Und
    in meinem letzten Post steht auch, dass ich nach Anlegen eines Timers
    den erst mal nicht bei den remote Timers sehe - ich muss noch zweimal
    den Menupunkt aufrufen, dann ist der Timer sichtbar. Probiers mal, mit
    etwas Geduld.. oder geht es bei Dir dann wirklich gar nicht?
    Am besten prüft man auf dem Server direkt ob der Timer da ist oder nicht.
    Du hattest mich doch auf die Streaming Controls erst gebracht und
    erzählt, dass es bei Dir läuft!?


    Ich habe generell schon vor, auch der Sache mit dem Editieren noch weiter
    nachzugehen, aber es ist schon etwas mühsam so von Null und v.a. habe
    ich zu wenig Zeit :( Aber wann immer ich neue Erkenntnisse oder Lösungen
    habe, melde ich mich hier.


    Dass wir die einzigen sind scheint so, aber vielleicht gibt ja doch demnächst
    noch der ein oder andere ein Lebenszeichen.


    Das CVS hat sich übrigens seit Anfang Juli nicht verändert.

  • Nach stundenlangem Debugging wieder eine kleine Erkenntnis: warum das Timer-Editieren nicht funktioniert. Es wird der Tag nicht korrekt vom remote-Timer übernommen, da steht 0 (hätte mir nat. auch direkt auffallen können..). Setzt man den Tag wie den Kanal per Hand korrekt, klappt auch das Ändern vorhandener Timer.


    Grund für den falschen Tag ist, dass der Server (1.3.x) den Tag in der Form 2005-09-09 schickt, was die ParseDay-Funktion in client/remote.c nicht verkraftet. Ich habe nicht durchschaut was die genau treibt, bei mir sieht sie jetzt einfach nur noch so aus:



    Damit wird der Tag korrekt herausgeparst.

  • Bei mir gehe ich über Streamkontrolle auf "Remote Schedule". Dann wird mir der EPG angezeigt. Über "rot" kann ich dann die gewünschte Sendung programmieren. In der ungepatchten Version funktioniert das alles, bis auf den Sendungsnamen. Mit Deinem Patch wird der auch übernommen, nur dann wird der Timer nicht gesetzt. Ich werde heute mal die Erkenntnisse aus Deinem letzten Posting bie mir testen.


    Ich verwende auf dem Server, wie auch auf dem Client die VDR-Version 1.2.6 mit streamdev-0.3.3-pre4.


    Gruß
    mac66


    P.S.
    Aus welcher Ecke in Bayern kommst Du? Mein Standort wäre Nähe Dachau

    VDR1: Activy 350 mit gen2VDR 1.1
    VDR2: Activy 300 mit gen2VDR 1.1
    VDR-Server: 1,5 GHz Celeron Mobile, 2 GB Ram, 2x 200 GB HD, 1x Siemens DVB-S 1.3, 2x TT-Nova, SuSE9.3

  • Dass bei Dir EPG geht (also remote schedule auch auf den remote channels mit den Server-EPG-Daten) deutet also darauf hin, dass entweder die gleiche Plugin-Version auf beiden Seiten hilft, oder aber viel wahrscheinlicher eben die gleiche VDR-Version - denn wie gesagt kann bei mir das EPG nicht verarbeitet werden, es käme offenbar schon über die Leitung daher.
    Das Editieren der Timer ging bei Dir auch nicht? Denkbar dass für das Format 200x-y-z das Plugin verantwortlich ist, aber bei gleicher Version wärs schon seltsam.


    Mein Standort ist die andere Seite von München, wohl gut 100km weg. Aber das Forum ist doch ein gutes Mittel zum Austausch. Werde jetzt wieder erst irgendwann nächste Woche zum weitermachen kommen.

  • So, nun habe ich nochmal einige Macken behoben. Welche davon auf den Mischbetrieb zurückgehen und welche auch etwa Du, mac66, zu beklagen hast, das würde mich interessieren.


    Generell sollte man im client/socket.c unter Command() bzw. Expect() die ausgehenden Kommandos OUT und die Ergebnisse IN loggen, um genauer nachzuvollziehen, was vor sich geht. Allerdings sollte man EPG-Daten (Expect = 215) ausnehmen, die müllen das Log ordentlich voll.
    Ich konzentriere mich auf den Client (0.3.3-pre4-geni im VDR 1.2.5), evtl. Fehlverhalten im Server bleibt erstmal unberücksichtigt und wird ggf. im Client umgangen.


    • EPG:
      Um das EPG vom 1.3er Server zu verkraften: V-Zeilen (offenbar neue Daten zum VPS - seit wann gibts denn VPS und kann man das nutzen?) ausblenden:


    • Nun kann man direkt aus dem EPG der remote channels timer programmieren, ohne noch unbedingt was von Hand anpassen zu müssen. Dann werden diese allerdings nicht übernommen.
      Grund: beim Record() wird der Timer nicht als "neu" angelegt, und "neu" reicht auch nicht als Grund zum Speichern - es wird nur auf eine Änderung geprüft. Zwei Stellen im Code:


    • Als nächstes wird immer nach Neuanlage oder Editieren eines Timers der neue Zustand erst nach zweimaligem Auslesen der server-Timer angezeigt. Nach dem ersten LSTT kommt immer garnichts vom Server, und die Verbindung zum Server wird neu aufgemacht. Also einfach ggf. zweimal abholen:
      In socket.c, LoadTimers(): Schleife um den Kommando-Block, die bei erstmaligem Versagen erneut LSTT anfordert.


    • Aufnehmende Timer werden nicht erkannt. Damit diese wie üblich mit # markiert werden (sie können dann aber immer noch nicht gelöscht / Aufnahme abgebrochen werden):

      Code
      menu.c / void cStreamdevMenuTimerItem::Set(void)
       einkommentieren: m_Timer->Recording() ? '#' : '>',
      
      
      remote.h/.c als Funktion einfügen:
       bool cRemoteTimer::Recording(void) {
         return ((m_Active & 8) > 0);
       }


    • Schliesslich werden die Kanäle der Server-Timer nur als Kanalnummer übertragen. Das Plugin kann nicht wissen, welcher Kanal auf dem Client korrespondiert. Also macht man einen Hack, der einen festen Offset vorgibt: zB Offset 100: Server 1 = ARD -> Client 101 = Server-ARD.

      Code
      remote.c, cRemoteTimer::cRemoteTimer(const char *Text):
       ..
       if (isnumber(tmpbuf))
         m_Channel = Channels.GetByNumber(strtoul(tmpbuf, NULL, 10) + 100);


      Danach wird der korrekte Kanal angezeigt und beim Editieren vorgegeben.


    Damit ist nun erstmal das Gröbste erledigt und ich kann vernünftig mit den remote Timern arbeiten.

  • Hallo hivdr,


    ich habe noch ein paar Probleme mit den Änderungen von Dir.
    Kannst Du mir die Sourcen komplett zur Verfügung stellen, oder die Änderungen mit den Zeilen-Nummern ein bischen besser dokumentieren, damit es für mich als Programier-DAU nachvollziehbar ist.


    Die Macken des Plugins sind bei meinem VDR nur im setzen und editieren der "Remote Timer" (Programmname wird nicht übernommen oder beim Ändern gelöscht).
    Das Problem mit den Kanälen habe ich einfach so gelöst, dass der Client immer die channels.conf vom Server nimmt (eine editieren und auf die Clients verteilen). Habe allerdings Server und Client mit der selben VDR-Version.


    Bis bald
    mac66

    VDR1: Activy 350 mit gen2VDR 1.1
    VDR2: Activy 300 mit gen2VDR 1.1
    VDR-Server: 1,5 GHz Celeron Mobile, 2 GB Ram, 2x 200 GB HD, 1x Siemens DVB-S 1.3, 2x TT-Nova, SuSE9.3

  • Hi mac66,


    Ich habe die modifizierten Files aus dem Verzeichnis client von 0.3.3-pre4-geni
    (4 Stück) angehängt. Viel Erfolg!

  • Nachtrag: wenn Du die 4 Files in client/ direkt nimmst (also ersetzt), hast Du den gleichen Stand wie ich derzeit. Es steht dann auch die Netzwerk-Kommunikation im Log (IN/OUT). Allerdings musst Du mindestens die Stelle wieder rückgängig machen, wo ich die remote-channels mit +100 ermittle.

  • Hallo hivdr,


    ich konnte jetzt Deine Modifikationen im Streamdev-Plugin implementieren.
    Folgendes Ergebnis:
    Setzen des Remote-Timers klappt jetzt. Es funktioniert allerdings nur in der Programm-Ansicht des entsprechenden Kanals. In der Übersicht "was läuft jetzt" oder "was läuft als nächstes" kann man den Timer nicht setzen. Auszug aus dem log:
    ---Sep 17 18:34:10 linvdr user.info vdr[810]: timer 0 modified (active)---
    kein OUT oder IN. Daher auch kein Timer.


    Ein Problem existiert noch: wenn man nach dem setzen eines Remote Timers, nochmal über Streamkontrolle, Remote Timers aufruft, findet am Client ein VDR-Restart statt.
    Hierzu konnte ich im log nichts finden.


    Gruß
    mac66

    VDR1: Activy 350 mit gen2VDR 1.1
    VDR2: Activy 300 mit gen2VDR 1.1
    VDR-Server: 1,5 GHz Celeron Mobile, 2 GB Ram, 2x 200 GB HD, 1x Siemens DVB-S 1.3, 2x TT-Nova, SuSE9.3

  • Hi mac66,


    aus now / next hatte ich es noch nicht probiert. Nicht übernommen wird nur, wenn man garnichts ändert - Grund war der gleiche wie beim normalen Schedule: der Timer wird nicht als "neu" instanziiert. Man muss in Zeile 400 von menu.c die gleiche Änderung machen wie in Zeile 574: ,true anhängen!


    Der Restart bedeutet, dass der VDR abschmiert - im runvdr-Skript wird er in einer Endlos-Schleife dann gleich wieder neu gestartet. Ich muss leider sagen, dass es auch bei mir ziemlich zuverlässig zum Crash kommt, wenn man etwas mit dem streamdev-client macht - also nicht sofort und auch nicht total reproduzierbar, aber doch recht schnell. Besonders schwerverdaulich scheint ein EPG-Sync zu sein. Im Log steht auch bei mir nichts, was den Crash erklären würde. Man sollte also besser nicht mit dem Plugin arbeiten, wenn grade eine Aufnahme auf dem Client läuft.


    Na denn gute Nacht..

  • Danke für die schnelle Antwort.


    Neue Erkenntnise:
    Client stürzt jetzt nur noch ab, wenn der Server Timer über Programm gesetzt wurde.
    Aus "now" oder "next" einen Timer setzen und die Probleme sind weg.


    Gruß
    mac66

    VDR1: Activy 350 mit gen2VDR 1.1
    VDR2: Activy 300 mit gen2VDR 1.1
    VDR-Server: 1,5 GHz Celeron Mobile, 2 GB Ram, 2x 200 GB HD, 1x Siemens DVB-S 1.3, 2x TT-Nova, SuSE9.3

  • Zitat

    Original von mac66
    Client stürzt jetzt nur noch ab, wenn der Server Timer über Programm gesetzt wurde.
    Aus "now" oder "next" einen Timer setzen und die Probleme sind weg.


    Sehr seltsam. Möglicherweise hast Du automatisches EPG Sync konfiguriert, und wenn Du den schedule aufrufst wird der ausgelöst, während bei now/next noch genug Daten vom letzten mal da sind? Ich würde vorschlagen das nochmal über einen längeren Zeitraum zu beobachten und dann nochmal von den Erkenntnissen zu berichten.

Jetzt mitmachen!

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