Beiträge von schmirl

    Irgendetwas geht da gehörig schief:

    Code
    DELF 100 2 255
    220 Filter -1250955316 stopped
    ADDF 96 2 255
    220 Filter -1250955316 transferring


    Anstelle von -1250955316 sollte da die PID stehen, also 100 bzw. 96. Ich habe immer noch den falschen Aufruf von cString::sprintf im Verdacht. Evtl. ist die APIVERSNUM nicht verfügbar? Kommen beim Kompilieren von connectionVTP.c irgendwelche Warnungen?


    Bitte mal mit folgender Änderung kompilieren. Wäre tatsächlich APIVERSNUM undefiniert, ließe sich das Plugin dann nicht mehr bauen.

    Diff
    --- a/server/connectionVTP.c
    +++ b/server/connectionVTP.c
    @@ -1818,6 +1818,7 @@ bool cConnectionVTP::Respond(int Code, const char *Message, ...)
     #if APIVERSNUM >= 10728
            cString str = cString::vsprintf(Message, ap);
     #else
    +#error APIVERSNUM fehlt
            cString str = cString::sprintf(Message, ap);
     #endif
            va_end(ap);

    Sogar als Devicenummer wird völliger Quark ( -1309683828 ) gemeldet :wow. Im Code kann ich beim besten Willen kein Problem erkennen. Damit bleiben für mich zur zwei Möglichkeiten: Ich habe Tomaten auf den Augen oder euer Streamdev ist nicht aktuell. Folgender im Februar gefixter Bug könnte die falschen Werte verursachen, sofern die VDR-Version mindesten 1.7.28 ist und streamdev von vor Februar:


    http://projects.vdr-developer.…ff/server/connectionVTP.c

    Das ist interessant. Sowohl für das Erzeugen der Link-Liste als auch für die Suche nach der zur URL passenden Aufnahme wird die inode auf gleiche Weise ermittelt. Evtl. wird für die inodes kein "unsigned long" sondern etwas längeres verwendet. Bitte mal mit folgendem Patch versuchen:

    Diff
    --- a/server/menuHTTP.c
    +++ b/server/menuHTTP.c
    @@ -28,7 +28,7 @@ const cString cRecordingsIterator::ItemRessource() const
     {
            struct stat st;
            if (stat(current->FileName(), &st) == 0)
    -               return cString::sprintf("%lu:%lu.rec", st.st_dev, st.st_ino);
    +               return cString::sprintf("%lu:%lu.rec", (unsigned long) st.st_dev, (unsigned long) st.st_ino);
            return "";
     }

    Streamdev überträgt die Werte von der DVB-Karte auf dem Server über das Netzwerk an den Client. Kannst Du mit einem Netzwerk-Sniffer wie wireshark oder tcpdump die Kommunikation über Port 2004 mitschneiden? Die Signal-Qualität wird mit dem Befehl SGNL angefordert. Als Antwort gibt es entweder eine Fehlermeldung oder "220 DEVICENUMMER SIGNALSTÄRKE:SIGNALQUALITÄT".

    Das Streamen von Aufnahmen über Remuxer ist noch nicht implementiert. Habe leider im Moment sehr wenig Freizeit. Egal welchen Link (EXT, TS, PES) Du nimmst - es wird immer die Original-Datei gestreamt.


    Zu Deinem Problem mit der identischen ID: Die setzt sich zusammen aus der Device-ID und der Inode-Nummer. Die Inode-Nummer scheint bei Dir überall 0 zu sein. Welches Dateisystem nutzt Du? Zeigt der Befehl "stat AUFNAHMEVERZEICHNIS.rec" auch Inode-Nummer 0 an?

    Das Problem tritt bei mir auch immer wieder auf. Da ich es aber sonst von noch niemandem gehört hatte, hatte ich mich noch nicht näher damit auseinander gesetzt. Nur ganz selten klappt das Schneiden mit "grün" sofort. Wenn die Timeout Fehlermeldung kommt und ich den Schnitt nochmal mit "grün" starte, klappt es aber immer und recht zügig. Der Timeout steht bei mir übrigens auf 10 Sekunden.


    Remotetimers schickt nur zwei Befehle: LSTR (um die Nummer der Aufnahme zu finden) und EDIT NUMMER (Aufnahme schneiden). Das vermutliche Problem: Bei LSTR liest VDR erst die Aufnahmen neu ein - das kann je nach Anzahl der Aufnahmen und Geschwindigkeit der Platten schonmal dauern und ist dank Plattencache vermutlich beim nächsten Aufruf schneller. Und dann muss die Liste natürlich auch noch über das Netz übertragen werden. Wie lange dauert es denn bei Dir, wenn Du LSTR mit svdrpsend oder per telnet ausführst? Wenn meine Theorie mit dem Cache stimmt, sollten kurz aufeinander folgende LSTR-Befehle schneller gehen. Selbiges dürfte auch unmittelbar nach dem Starten des VDR gelten, da VDR die Aufnahmen auch erstmal einliest und somit in den Cache legt.

    Um das ganze in Bezug auf remotetimers kurz klarzustellen: Remotetimers orientiert sich immer weitestgehend am original VDR-Menü. Entsprechend nutzt es die folders.conf um aus entsprechend vordefinierten Verzeichnissen einen Ordner für den Timer auszuwählen. Die folders.conf kann auch über das remotetimers-Menü bearbeitet werden. Im Aufzeichnungen-Menü von remotetimers kann manuell oder ebenfalls über folders.conf der Pfad oder der Dateiname einer Aufzeichnung geändert werden. Die Aufnahme wird dann entsprechend umbenannt oder, wenn das Ziel auf einem anderen Medium liegt, nach Bestätigung im Hintergrund verschoben. Die Bandbreite lässt sich dabei limitieren.

    Schein soweit alles korrekt konfiguriert zu sein. Offenbar versucht sich das Plugin mit der Adresse 0.0.0.0 zu verbinden. Zumindest bei Linux ist das offenbar gleichbedeutend mit 127.0.0.1. Scheinbar kommt das Plugin an die Setup-Optionen nicht ran - warum auch immer. Ich würde mal VDR und Plugins komplett neu kompilieren (nach "make clean").

    Die aktuelle GIT-Version von Streamdev kann seit gestern alle HTML-Menüs nun auch als RSS-Feed darstellen (einfach die Datei-Endung .html durch .rss ersetzen, also channels.rss, groups.rss, ...). Für die Wiedergabe von Aufzeichnungen habe ich ebenfalls gestern das Menü erweitert (recordings.html/m3u/rss). Vielleicht hat von euch jemand Zeit und Lust das mal mit dem Samsung zu testen?

    Remotetimers prüft vor jeder Änderung mit "LSTT timer-nummer" ob sich der betroffene Timer seit der letzten Änderung in irgendeiner Weise verändert hat (wobei das "recording"-Flag ignoriert wird). Falls ja, wird die Aktion abgebrochen und die Timer-Liste neu geladen. Das greift insbesondere auch dann, wenn sich die Timer-Nummern verschoben haben. Denn dann wird mir "LSTT veraltete-timer-nummer" einen ganz anderen Timer liefern, also Abbruch. Hatte bisher keine Klagen mit dieser Vorgehensweise.


    Fortlaufende Timer-IDs stellen sicher, dass ein Timer nach Abruf der Timer-Liste später wieder gefunden wird. Aber solange SVDRP keine parallelen Verbindungen unterstützt, sollte jede Anwendung den SVDRP-Port schleunigst wieder freigeben. Vor jeder erneuten Operation müsste also geprüft werden, ob VDR seitdem neu gestartet wurde. Wenn ja, muss auch wieder abgebrochen werden. Dagegen helfen nur UUIDs oder das Abspeichern der eindeutigen Timer-ID. Die zuletzt vergebene ID in der Config zu speichern, halte ich wie Klaus für ungeeignet. Ich würde die neuen IDs in der timers.conf abspeichern und bei den SVDRP-Befehlen über ein Flag steuern, ob die eindeutige ID statt der fortlaufenden Nummer ausgegeben werden soll. Damit bliebe die Rückwärtskompatibilität erhalten.


    Wenn es um die Bearbeitung von Timern durch ein externes Programm geht, sehe ich bis hierher jedoch keinen großen Vorteil in der Einführung von IDs. Auch bei einer langlebigen ID (egal ob in der Form wie es Klaus vorschwebt oder in Form einer UUID) muss die in Remotetimers durchgeführte Überprüfung stattfinden. Denn nichts ist ärgerlicher als wenn Benutzer/Anwendung A einen Timer ändert und Benutzer/Anwendung B diese Änderung 1 Minute später einfach Rückgängig macht, weil die Änderung auf einem älteren Stand basiert. Wesentlich kritischer ist zu sehen, dass SVDRP keine Garantie gibt, dass sich z.B. zwischen unmittelbar aufeinanderfolgenden LSTT- und MODT-Befehlen der Timer nicht ändert. Wenn dies so bleibt, kann letzlich nur der komplette Timer-String als ID fungieren und z.B. MODT müsste als Argument den alten und den neuen String übergeben bekommen, DELT den alten String. Und VDR intern müsste der passende Timer über genau diesen String gesucht werden (wobei einzelne Werte wie das "recording" flag ignoriert werden müssten). Eine eindeutige ID ist also eigentlich gar nicht so wichtig. Die Möglichkeit einen Timer atomar ändern zu können ist eigentlich das Entscheidende.


    Zu den IDs für Aufnahmen: Wenn nicht mit UUID, dann wäre eine schöne eindeutige ID die Kombination von den struct stat Feldern st_dev und st_ino

    Neue Makefiles für svdrpservice, remotetimers, remoteosd, svdrposd und epgsync liegen auf http://vdr.schmirler.de. Neue Versionen der Plugins mit den neuen Makefiles folgen in den nächsten Wochen.


    Bislang includieren epgsync und die remote*-Plugins "../svdrpservice/svdrpservice.h". Dadurch funktioniert das Kompilieren nur, wenn die svdrpservice-Sourcen an entsprechender Stelle liegen. Ab der nächsten Version werden die Plugins eine Kopie von svdrpservice.h enthalten.

    Ist eingebaut. Vielen Dank für's testen und die Anregungen! Die Darstellung kann im Setup für jedes der drei Menüs einzeln auf "Plugin" (default) oder "Oberfläche" gestellt werden. Habe mir auf meiner Testmaschine nun auch skinnopacity-0.5.2 installiert. Allerdings bekomme ich im Aufnahmen-Menü immer eine normale Liste. Ist da noch ein Fehler in remotetimers oder hast Du eine git-Version von skinnopacity?

    Vermutlich musst Du in menu.c noch mcPlugin ersetzen. Das kommt insgesamt drei mal vor. Diese Stelle ist für die Recordings-Liste zuständig:


    Code
    @@ -2299,7 +2330,7 @@ cMenuEditRecording::cMenuEditRecording(const cRecording *Recording)
     {
     #if VDRVERSNUM >= 10728
       // with mcRecording some skins would add free diskspace to title
    -  SetMenuCategory(mcPlugin);
    +  SetMenuCategory(mcRecording);
     #endif
       // Must be locked against Recordings
     #if VDRVERSNUM < 10721

    Ich habe ein 64-Bit System - und er meckert leider beim Bauen:


    Oops. Man sollte Patches vor dem Posten zumindest mal durch den Compiler jagen. Sorry! :versteck


    Im anderen Thread habe ich eine aktualisierte Version des Patches hinterlegt (die Kommentare um die SetMenuItem()-Aufrufe sind noch drin).


    Ich würde vorschlagen, bei weiteren Problemen dort weiter zu machen, da das ganze hier mittlerweile ziemlich OT ist.