Hash-Werte bei "play_recording"

  • Hallo,


    ich weiß ihr reagiert "streng" ;) wenn ein Thema nicht ins (Unter-)Forum passt, doch erstmal finde ich kein bessereres. Daher bitte ich um Milde.


    Es geht um das Webinterface des VDR. Dort wird von dem Menüpunkt "Aufnahmen" (Link http://192.168.1.9:8008/recordings.html) ausgehend die Liste der Aufnahmen des jeweiligen VDRs angezeigt. Und dort gibt es auch für jede Aufnahme einen Knopf mit grünem dreieckigen Symbol "Diese Aufnahme abspielen".


    Soweit, so gut, sehr schön gelöst. Schaut man sich aber den Link an, fällt auf, dass da nicht der Datei-Pfad der Aufnahme steht, sondern offenbar ein Hash-Wert zur Identifizierung jeder Aufnahme. Beispiel:


    http://192.168.1.9:8008/vdr_re…d03064275a907d2742f5b8714


    Kann mir jemand auf die Sprünge helfen, wie dieser Hash-Wert berechnet wird? Ich hab noch nicht mal eine Datei 'recordings.html' im (yavdr)-Verzeichnisbaum finden können. Offenbar ist das kein eigener Webserver sondern irgendwie im VDR integriert.


    Hintergrund ist, dass ich zur besseren Suche und zur Vermeidung doppelter Aufnahmen ein (Python)-Skript geschrieben habe, was das VDR-Aufnahmeverzeichnis nach den 'info'-Dateien durchsucht, die darin enthaltenen Daten wie Titel, Kurztext und Beschreibung auswertet und daraus eine sqlite-DB erzeugt. Diese kopier ich dann auf einen ständig laufenden Raspberry mit Apache/PHP und kann sie jederzeit von überall im Heimnetz per Browser abfragen :)


    Den oben erwähnten 'Aufnahme starten'-Knopf hätte ich jetzt gerne für dieses DB-Webinterface nachgebaut, um eine gefundene Aufnahme direkt starten zu können und die Aufnahme nicht ein zweites Mal im VDR selber suchen zu müssen, was - wie ihr bestimmt wisst - bei einer großen Anzahl von Aufnahmen schwierig sein kann.


    Ich sehe da durchaus Aussicht auf Erfolg, weil dieser Hash-Wert nicht temporär zu sein scheint, sondern Neustarts des VDR und löschen anderer Aufnahmen übersteht. Man müsste halt nur wissen, wie der Hash erzeugt wird. Erste Vermutung: der Dateipfad in irgendeiner bestimmten Zusammensetzung.


    Danke für alle Anregungen.


    Jürgen

    HD-VDR | yaVDR 0.5 | Intel DH67BL | Intel i3-2105 | 2x2GB RAM | DVB-C DD Duoflex CT | 1TB HD | Asus GT520 Passiv| Logitech K400

  • Code
    string RecordingsManager::Md5Hash(cRecording const * recording) const
    	{
    		return "recording_" + MD5Hash(recording->FileName());
    	}


    in recman.cpp vom Live-Plugin.

    - Client1: Thermaltake DH 102 mit 7" TouchTFT * Debian Stretch/vdr-2.4.0/graphtft/MainMenuHooks-Patch * Zotac H55-ITX WiFi * Core i3 540 * 4GB RAM ** Zotac GT630 * 1 TB System HDD * 4 GB RAM * Harmony 900 * satip-Plugin

    - Client2: Alfawise H96 Pro Plus * KODI
    - Server: Intel Pentium G3220 * DH87RL * 16GB RAM * 4x4TB 3.5" WD RED + 1x500GB 2.5" * satip-Plugin
    - SAT>IP: Inverto iLNB

  • Das ist das live Plugin, also einfach da mal in den Sourcen suchen.
    Aber der Pfad wäre schon geeigneter zum Abspielen. Läuft dein Webinterface auf dem vdr? Dann schau dir doch mal restfulapi oder dbus2vdr an. Die bieten auch Schnittstellen zum Abspielen von Aufnahmen.


    Lars

  • Wow, das ging schnell - offenbar sind gerade die richtigen Spezies online :)


    Asche auf mein Haupt, wie kann es auch anders sein: das Webinterface ist ein Plugin! Für mich waren bisher VDR und Webinterface eines.... Danke für den Verweis auf das Live-Plugin.


    TheChief: Das ist wohl C++. Naja, meine C-Jahre liegen auch schon länger zurück und C++ hab ich nur gestreift. Mal sehen, was ich so rausfinde. Die Datenstruktur recording sollte ich jedenfalls verstehen können.


    mini73: nur das Skript, was die info-Dateien auswertet, läuft auf dem VDR selbst. Die fertige DB liegt auf einem Raspberry und wird dort per Apache mit PHP abgefragt. Damit ist dein Vorschlag hinfällig? Ich schau mir diese Plugins mal an, wofür die sind.


    Jürgen

    HD-VDR | yaVDR 0.5 | Intel DH67BL | Intel i3-2105 | 2x2GB RAM | DVB-C DD Duoflex CT | 1TB HD | Asus GT520 Passiv| Logitech K400

  • Damit ist dein Vorschlag hinfällig?


    restfulapi ist für den Zugriff übers Netzwerk konzipiert - dein yaVDR liefert auf Port 8002 die Dokumentation als info.html aus:

    Code
    <IP/Hostname des VDR>:8002/info.html


    Ich hatte mal vor zwei Jahren ein Python-Modul für den bequemeren Zugriff darauf angefangen (aber dann nicht weitergemacht, weil ich noch keine echte Verwendung dafür hatte - daher müsste man da ein paar Dinge für die aktuelle API ergänzen.): https://github.com/seahawk1986/pyrestfulapi

    yaVDR-Dokumentation (Ceterum censeo enchiridia esse lectitanda.)


  • restfulapi ist für den Zugriff übers Netzwerk konzipiert - dein yaVDR liefert auf Port 8002 die Dokumentation als info.html aus:

    Code
    :8002/info.html


    Ich hatte mal vor zwei Jahren ein Python-Modul für den bequemeren Zugriff darauf angefangen (aber dann nicht weitergemacht, weil ich noch keine echte Verwendung dafür hatte - daher müsste man da ein paar Dinge für die aktuelle API ergänzen.): https://github.com/seahawk1986/pyrestfulapi</ip>

    Cool, hab gerade mal ein bisschen rumgespielt: damit kann man ja dem VDR aus der Ferne alles entlocken und/oder fernsteuern, was wichtig ist. Sehr interessant!


    Und deine Python-Lib zeigt mir, wie man es aus Python aufrufen müsste. Meine Python-Kenntnisse sind momentan arg begrenzt: ich überlege was ich so machen will und schau dann in der Doku, was Python da so bietet...


    Immerhin hab ich jetzt zwei Möglichkeiten, eine davon werd ich wohl hinkriegen.


    Jürgen

    HD-VDR | yaVDR 0.5 | Intel DH67BL | Intel i3-2105 | 2x2GB RAM | DVB-C DD Duoflex CT | 1TB HD | Asus GT520 Passiv| Logitech K400

  • Und deine Python-Lib zeigt mir, wie man es aus Python aufrufen müsste. Meine Python-Kenntnisse sind momentan arg begrenzt: ich überlege was ich so machen will und schau dann in der Doku, was Python da so bietet...


    Ich habe mal das Abspielen von Aufnahmen ergänzt - kleines Beispiel:

    Code
    import restfulapi
    vdr = restfulapi.RestfulAPI('192.168.1.104')
    rec, count, total = vdr.get_recordings()
    for i in rec:
        print u"%s: %s" % (i['number'], i['name'])
    vdr.play_recording(rec_number=42)
    vdr.rw_and_play_recording(rec_number=23)


    Eine Aufnahme liefert diese Felder:

    yaVDR-Dokumentation (Ceterum censeo enchiridia esse lectitanda.)

  • Sehr schön gemacht dein API, hab's gerade mal getestet. Du programmierst bestimmt schon länger in Python.


    Es ist ja echt klasse, wie leicht so ein kleiner Test mit Python mal kurz durchzuführen ist: Python-Lib runterladen, Python aufrufen, copy und paste von drei oder vier Zeilen und schon sieht man das Ergebnis. Bin immer wieder begeistert, wie das optimal in Python gelöst ist...


    Offenbar hast du "rw_and_play..." in "rewind_and_play..." umbenannt - kleiner Fehler um mich zu testen? ;)


    Etwas OT: Wo ich dich gerade dran habe, du hast doch bestimmt ein nettes Beispiel für den Zugriff auf die IMDB? :) Irgendwie haben die was verändert, die Beispiele, die ich finde, laufen nicht mehr.


    Jürgen


    Edit: Sehr gut: die Liste beinhaltet auch Aufnahmen in Unterverzeichnissen, das Verz. durch einen '~' getrennt. Also bspw.:
    Stummfilme~Der Vagabund

    HD-VDR | yaVDR 0.5 | Intel DH67BL | Intel i3-2105 | 2x2GB RAM | DVB-C DD Duoflex CT | 1TB HD | Asus GT520 Passiv| Logitech K400

    2 Mal editiert, zuletzt von geier ()

  • Vielleicht interessiert es den einen oder anderen, wie es letztendlich ausgegangen ist...


    Startpunkt war als ich rausfand, dass auch das normale Linux-Tool md5sum die korrekte Hash-Berechnung durchführt, wenn man den LF beim echo weglässt und den Pfad der Aufnahme von / an angibt. Also bspw.:


    Code
    echo -n /srv/vdr/video.00/Stummfilme/Der_Vagabund/2013-12-30.13.20.4-0.rec | md5sum


    Auf diese Weise kann ich, während das Video-Verz. des VDR nach info-Dateien durchgescannt wird, auch den Hash-Wert der Aufnahme in der DB abspeichern und damit in der Weboberfläche per PHP den Link erzeugen, der die Aufnahme bei Anklicken startet. Die eleganteste Lösung, die zudem noch am wenigsten Arbeit macht :D


    In diesem Sinne noch einen schönen Abend,
    Jürgen

    HD-VDR | yaVDR 0.5 | Intel DH67BL | Intel i3-2105 | 2x2GB RAM | DVB-C DD Duoflex CT | 1TB HD | Asus GT520 Passiv| Logitech K400

  • Nun ja, genau das steht in dem Codeschnipsel, den TheChief gepostet hat: MD5-Hash des Aufnahmepfades... :D
    Und MD5 sollte immer MD5 sein, egal, welches Programm. Sonst wäre es nutzlos. :)


    Lars

  • Jau, jetzt bin ich ebenfalls klüger :]


    Meine früheren Experimente mit md5sum sind wohl an dem LF gescheitert, den das echo-Kommando normalerweise an den Dateipfad hängt - dadurch ändert sich natürlich der Hash-Wert. Aber ich dachte deshalb, recording->FileName sei eine irgendwie geartete, merkwürdige C-Struktur - bis ich mich ein bisschen durch den Source-Code gelesen habe...


    Jürgen

    HD-VDR | yaVDR 0.5 | Intel DH67BL | Intel i3-2105 | 2x2GB RAM | DVB-C DD Duoflex CT | 1TB HD | Asus GT520 Passiv| Logitech K400

Jetzt mitmachen!

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