Skip to content
  • Kategorien
  • Aktuell
  • Tags
  • Beliebt
  • Benutzer
  • Gruppen
Skins
  • Light
  • Cerulean
  • Cosmo
  • Flatly
  • Journal
  • Litera
  • Lumen
  • Lux
  • Materia
  • Minty
  • Morph
  • Pulse
  • Sandstone
  • Simplex
  • Sketchy
  • Spacelab
  • United
  • Yeti
  • Zephyr
  • Dark
  • Cyborg
  • Darkly
  • Quartz
  • Slate
  • Solar
  • Superhero
  • Vapor

  • Standard: (Kein Skin)
  • Kein Skin
Einklappen
MediathekView Logo

MediathekView-Forum

  1. Übersicht
  2. Entwicklerforum
  3. Hashwert im Dateinamen von Downloads, Debugging in VS Code

Hashwert im Dateinamen von Downloads, Debugging in VS Code

Geplant Angeheftet Gesperrt Verschoben Entwicklerforum
19 Beiträge 7 Kommentatoren 478 Aufrufe
  • Älteste zuerst
  • Neuste zuerst
  • Meiste Stimmen
Anmelden zum Antworten
Dieses Thema wurde gelöscht. Nur Nutzer mit entsprechenden Rechten können es sehen.
  • M Offline
    M Offline
    maf
    schrieb am zuletzt editiert von
    #1

    Hallo,

    ich versuche, in Python ein kleines Skript zu schreiben, das überprüfen soll, ob ich einen mit MediathekView gefundenen Film bereits heruntergeladen habe. Mein Ansatz ist, den standardmäßig im Dateinamen enthaltenenen Hashwert mit dem Hashwert der URL des Kandidaten zu vergleichen.

    In src/main/java/mediathek/daten/DatenDownload.java habe ich die Funktion getHash() gefunden, mit der der Hashwert berechnet wird. Eine Reimplementation von hashCode() in Python habe ich hier gefunden und mit einem kleinen Java-Programm an einer URL verifiziert. Trotzdem stimmen die von mir berechneten Hashwerte nicht mit denen in den Dateinamen meiner Downloads überein. Wo könnte mein Fehler liegen?

    Ich habe den Quellcode von MediathekView von GitHub heruntergeladen. Ich würde das Programm gerne im Debugger ausführen und mit einem Breakpunkt in getHash() herausfinden, was schiefläuft. Wenn ich im Debugger von VS Code Main.java starte, erhalte ich nur eine Fülle von import-Fehlern. Leider entwickle ich selbst nicht in Java. Kann mir jeman einen Tip geben, was ich tun müsste, um das Programm auszuführen?

    Danke im Voraus,
    maf

    1 Antwort Letzte Antwort
    • P Offline
      P Offline
      pidoubleyou Entwickler
      schrieb am zuletzt editiert von
      #2

      hast du ein JDK 21 installiert und wie in der VS Code Extension konfiguriert? (vgl. Anleitung)

      1 Antwort Letzte Antwort
      • M Offline
        M Offline
        maf
        schrieb am zuletzt editiert von
        #3

        Installiert ist OpenJDK 17, das in Debian Bookworm standardmäßig enthalten ist. Damit konnte ich in VS Code aicj problemlos das Java-Programm ausführen, das ich für den Vergleich der Ergebnisse von hashCode() in Java und meiner Reimplementation in Python benutzt habe.

        Meine Vermutung ist, dass ich die Import-Fehler beheben könnte, indem ich mit Maven die (in pom.xml beschriebenen ?) Abhängigkeiten auflöse. Nur wie gesagt: Mangels Erfahrung mit Java und Maven weiß ich nicht, wie ich das - speziell in VS Code mit der Erweiterung Maven for Java - anstellen soll.

        1 Antwort Letzte Antwort
        • M Offline
          M Offline
          maf
          schrieb am zuletzt editiert von
          #4

          Erst beim Test mit Maven habe ich verstanden, dass für die Entwicklung JDK 21 erforderlich ist. Bisher hatte ich geglaubt Version 14 sei ausreichend, weil Java 14 in den Systemvoraussetzungen für die Ausführung von MediathekView genannt wird.

          OpenJDK 21 ist in Debian Bookworm nicht enthalten, ließe sich natürlich trotzdem mit etwas Aufwand installieren. Das würde ich mir gerne ersparen.

          Vielleicht findet sich also doch jemand, der mir einen Tipp gegeben kann, warum in den Dateinamen beim Download andere Hashwerte benutzt werden, als hashCode() für die URLs berechnet?

          1 Antwort Letzte Antwort
          • P Offline
            P Offline
            pidoubleyou Entwickler
            schrieb am zuletzt editiert von
            #5

            wenn ich für die Download-Url in einem simplen Java-Programm String.hashCode() aufrufe, bekomme ich den gleichen absoluten Wert für den Hash wie beim Download in MV.

            Beispiel:

            "https://nrodlzdf-a.akamaihd.net/none/zdf/25/02/250225_rosendahl_charles_hde/1/250225_rosendahl_charles_hde_3360k_p36v17.mp4".hashCode()
            

            liefert den Hash -1776013421, beim Download bekomme ich *1776013421

            die Implementierung von String.hashCode ist laut API-Spec vorgegeben, so dass unterschiedliche JVM sich auch gleich verhalten.

            1 Antwort Letzte Antwort
            • D Offline
              D Offline
              DerReisende77 Entwickler
              schrieb am zuletzt editiert von
              #6
                  /**
                   * Returns a hash code for this string. The hash code for a
                   * {@code String} object is computed as
                   * <blockquote><pre>
                   * s[0]*31^(n-1) + s[1]*31^(n-2) + ... + s[n-1]
                   * </pre></blockquote>
                   * using {@code int} arithmetic, where {@code s[i]} is the
                   * <i>i</i>th character of the string, {@code n} is the length of
                   * the string, and {@code ^} indicates exponentiation.
                   * (The hash value of the empty string is zero.)
                   *
                   * @return  a hash code value for this object.
                   */
                  public int hashCode() {
                      // The hash or hashIsZero fields are subject to a benign data race,
                      // making it crucial to ensure that any observable result of the
                      // calculation in this method stays correct under any possible read of
                      // these fields. Necessary restrictions to allow this to be correct
                      // without explicit memory fences or similar concurrency primitives is
                      // that we can ever only write to one of these two fields for a given
                      // String instance, and that the computation is idempotent and derived
                      // from immutable state
                      int h = hash;
                      if (h == 0 && !hashIsZero) {
                          h = isLatin1() ? StringLatin1.hashCode(value)
                                         : StringUTF16.hashCode(value);
                          if (h == 0) {
                              hashIsZero = true;
                          } else {
                              hash = h;
                          }
                      }
                      return h;
                  }
              

              Aber Vorsicht, die String.hashCode() Methode verhält sich unterschiedlich bzgl. ASCII vs. UFT-16 strings.
              Bei Latin1Stringswird am Ende diese Funktion aufgerufen:

              private static int unsignedHashCode(int result, byte[] a, int fromIndex, int length) {
                      int end = fromIndex + length;
                      for (int i = fromIndex; i < end; i++) {
                          result = 31 * result + Byte.toUnsignedInt(a[i]);
                      }
                      return result;
                  }
              

              result wird hier mit 0 initialisiert.

              Ich würde dir empfehlen IntelliJ Community Edition herunterzuladen. Damit kannst du MV als maven Projekt öffnen. Das Debuggen mit IntelliJ ist bedeutend besser und man kann sehr einfach über context menu oder Tastatur den function calls folgen.

              Open source developers do NOT have to:

              • Make your issue a priority, just because you say so.
              • Give you any sort of "timetable", or explanation for why it´s "taking too long".

              Check your entitlement. Nobody owes you anything.

              1 Antwort Letzte Antwort
              • M Offline
                M Offline
                maf
                schrieb am zuletzt editiert von
                #7

                Ich habe meine Reimplementation von hashCode() in Python mit der oben als Beispiel benutzten URL “https://nrodlzdf-a.akamaihd.net/none/zdf/25/02/250225_rosendahl_charles_hde/1/250225_rosendahl_charles_hde_3360k_p36v17.mp4” getestet. Wie die Bibliotheksfunktion in Java liefert sie den Wert -1776013421. Die Python-Version scheint also korrekt zu sein.

                Das Problem steckt an einer anderen Stelle: Die im Suchergebnis angegebene URL unterscheidet sich von der URL, die in der Infodatei genannt wird. Und deren Hashwert wird beim Download benutzt. Beispiel: Die KiKa-Sendung “Ein warmes Plätzchen” aus der Serie “Shaun das Schaf” wird als “Shaun das Schaf-Ein warmes Plätzchen-1126590016.mp4” heruntergeladen. Laut Infodatei ist die URL der Sendung “https://wdrmedien-a.akamaihd.net/medp/ondemand/de/fsk0/230/2307570/2307570_56461426.mp4”. Der Hashwert dieser URL ist tatsächlich 1126590016. Aber laut Suchergebnis hat die Sendung die URL “https://wdrmedien-a.akamaihd.net/medp/ondemand/de/fsk0/230/2307570/2307570_56461430.mp4”. Die letzten beiden Ziffern vor dem Punkt der URLs unterscheiden sich, und somit auch ihr Hashwert. Wie kommt das denn?

                styrollS 1 Antwort Letzte Antwort
                • styrollS Offline
                  styrollS Offline
                  styroll
                  antwortete auf maf am zuletzt editiert von
                  #8

                  @maf sagte: Die letzten beiden Ziffern vor dem Punkt der URLs unterscheiden sich, und somit auch ihr Hashwert. Wie kommt das denn?

                  • “26”: URL, welche in der Filmliste steht (allgemein: URL der Version in mittlerer Auflösung, was du vermutlich mit “Suchergebnis” gemeint hast)
                  • “30”: URL der höchsten Auflösung (allgemein: URL der Version für die vom Benutzer beim Download selektiertem Auflösung, die dann auch im Info-File erscheint)
                  1 Antwort Letzte Antwort
                  • M Offline
                    M Offline
                    maf
                    schrieb am zuletzt editiert von
                    #9

                    Wie kann ich zu einer URL, die in der Filmliste steht, die URL ermitteln, die zur vom Benutzer für den Dowload ausgewählten Auflösung gehört (um den beim Download im Dateinahmen enthaltenen Hashwert zu berrechnen)?

                    Georg-JG 1 Antwort Letzte Antwort
                    • Georg-JG Offline
                      Georg-JG Offline
                      Georg-J
                      antwortete auf maf am zuletzt editiert von
                      #10

                      @maf Erster Record der Filmliste: “Url_Klein” steht 4 Felder hinter “Url”, “Url_HD” steht 6 Felder hinter “Url”. Diese Inhalte verändern den Wert von “Url”.

                      M 1 Antwort Letzte Antwort
                      • F Offline
                        F Offline
                        FranzB
                        schrieb am zuletzt editiert von
                        #11

                        solltest auch bedenken (z.B. aktueller Tatort, die sammle ich): gleiche Filme werden oft bei unterschiedlichen Sendern / mit unterschiedlichen Titeln («Charlie» – Der neue Fall aus München oder Charlie) und auch unterschiedlichen URLs angeboten. Der Vergleich über die URL wird den Film nicht wiedererkennen.

                        Ich vergleiche über den Titel mit einem “großzügigen” Vergleich

                        1 Antwort Letzte Antwort
                        • M Offline
                          M Offline
                          maf
                          antwortete auf Georg-J am zuletzt editiert von
                          #12

                          @Georg-J sagte in Hashwert im Dateinamen von Downloads, Debugging in VS Code:

                          Erster Record der Filmliste: “Url_Klein” steht 4 Felder hinter “Url”, “Url_HD” steht 6 Felder hinter “Url”. Diese Inhalte verändern den Wert von “Url”.

                          Die unterschiedlichen URLs habe ich noch nicht gefunden. Im Ergebnis der Suche (= Filmliste?) gibt es bei mir folgende Spalter: Nr, Sender, Thema, Titel, (3 x Buttons), Datum, Zeit, Dauer, Größe, HQ, UT, Geo und URL. Diese Daten erhalten ich auch mit Ctrl-A Ctrl-C. Kann ich die Spalten vielleicht konfigurieren?

                          vitussonV 1 Antwort Letzte Antwort
                          • vitussonV Offline
                            vitussonV Offline
                            vitusson
                            antwortete auf maf am zuletzt editiert von
                            #13

                            @maf sagte in Hashwert im Dateinamen von Downloads, Debugging in VS Code:

                            @Georg-J sagte in Hashwert im Dateinamen von Downloads, Debugging in VS Code:

                            Erster Record der Filmliste: “Url_Klein” steht 4 Felder hinter “Url”, “Url_HD” steht 6 Felder hinter “Url”. Diese Inhalte verändern den Wert von “Url”.

                            Die unterschiedlichen URLs habe ich noch nicht gefunden. Im Ergebnis der Suche (= Filmliste?) gibt es bei mir folgende Spalter: Nr, Sender, Thema, Titel, (3 x Buttons), Datum, Zeit, Dauer, Größe, HQ, UT, Geo und URL. Diese Daten erhalten ich auch mit Ctrl-A Ctrl-C. Kann ich die Spalten vielleicht konfigurieren?

                            Georg spricht von der eigentlichen Filmliste, du von der Liste die du unter dem Tab Filme im Client zu sehen bekommst. Zwei verschiedene Dinge.

                            M 1 Antwort Letzte Antwort
                            • M Offline
                              M Offline
                              maf
                              antwortete auf vitusson am zuletzt editiert von
                              #14

                              @vitusson sagte in Hashwert im Dateinamen von Downloads, Debugging in VS Code:

                              Georg spricht von der eigentlichen Filmliste, du von der Liste die du unter dem Tab Filme im Client zu sehen bekommst. Zwei verschiedene Dinge.

                              Ist diese “eigentliche Filmliste” die Datei filme.json im Ordner “.mediathek3”? Dann kann ich also in der Filmliste nach dem Eintrag mit der URL suchen, die ich im Suchergebnis finde, und dann sechs Felder weiter die URL für die HD-Version finden?

                              Mein Test: Die URL der Sendung “Shaun auf der Flucht” in der Liste der Suchergebnisse ist “https://wdrmedien-a.akamaihd.net/medp/ondemand/de/fsk0/222/2227824/2227824_56161383.mp4”. Diese USR finde ich auch in filme.json. Vier Felder weiter steht “82|1.mp4” (was ist das?) und sechs Felder weiter steht “https://wdrmedien-a.akamaihd.net/medp/ondemand/de/fsk0/222/2227824/2227824_56161379.mp4”. Der Hash-Wert dieser URL ist 740055391. Und der Download der Sendung hat tatsächlich den Dateinamen “Shaun das Schaf-Shaun auf der Flucht-0740055391.mp4”. Bingo!

                              Georg-JG 1 Antwort Letzte Antwort
                              • vitussonV Offline
                                vitussonV Offline
                                vitusson
                                schrieb am zuletzt editiert von vitusson
                                #15
                                [ "Sender", "Thema", "Titel", "Datum", "Zeit", "Dauer", "Größe [MB]", "Beschreibung", "Url", "Website", "Untertitel", "UrlRTMP", "Url_Klein", "UrlRTMP_Klein", "Url_HD", "UrlRTMP_HD", "DatumL", "Url_History", "Geo", "neu" ]
                                [ "", "", "Shaun auf der Flucht", "15.03.2025", "18:05:00", "00:07:03", "111", "Als Shaun er in der Küche des Farmers Chaos anrichtet und überall Torte verteilt, können ihm die Schafe nicht mehr helfen. Der Farmer ist stinksauer.", "https://wdrmedien-a.akamaihd.net/medp/ondemand/de/fsk0/222/2227824/2227824_56161383.mp4", "https://www.kika.de/shaun-das-schaf/videos/shaun-auf-der-flucht-102", "", "", "82|1.mp4", "", "81|79.mp4", "", "1742058300", "", "DE", "true" ],
                                1 Antwort Letzte Antwort
                                • Georg-JG Offline
                                  Georg-JG Offline
                                  Georg-J
                                  antwortete auf maf am zuletzt editiert von
                                  #16

                                  @maf sagte in Hashwert im Dateinamen von Downloads, Debugging in VS Code:

                                  “82|1.mp4” (was ist das?)

                                  Nehme die ersten 82 Zeichen von “Url” und hänge “1.mp4” an.

                                  1 Antwort Letzte Antwort
                                  • M Offline
                                    M Offline
                                    maf
                                    schrieb am zuletzt editiert von
                                    #17

                                    Danke euch allen, jetzt klappt es.

                                    Da ich die Suche nun in der Filmliste selbst durchführe, benötige ich das GUI eigentlich nur, falls eine neue Sendung heruntergeladen werden muss. Deshalb, für die reine Suche: Ist es möglich, MediathekView so aufzurufen, dass die Filmliste aktualisiert aber das GUI nicht geöffnet wird. Und für den Fall eines Downloads: Ist es möglich, MediathekView zu starten ohne die Filmliste zu aktualisieren?

                                    vitussonV 1 Antwort Letzte Antwort
                                    • vitussonV Offline
                                      vitussonV Offline
                                      vitusson
                                      antwortete auf maf am zuletzt editiert von
                                      #18

                                      @maf sagte in Hashwert im Dateinamen von Downloads, Debugging in VS Code:

                                      : Ist es möglich, MediathekView so aufzurufen, dass die Filmliste aktualisiert aber das GUI nicht geöffnet wird.

                                      Ja, mit dem Parameter -dq oder --download-quit aufrufen

                                      styrollS 1 Antwort Letzte Antwort
                                      • styrollS Offline
                                        styrollS Offline
                                        styroll
                                        antwortete auf vitusson am zuletzt editiert von styroll
                                        #19

                                        @vitusson sagte: Ja, mit dem Parameter -dq oder --download-quit aufrufen

                                        Das könnte man ja selbst mal testen, bevor man eine Aussage dazu macht (wie nennst du das schon wieder: “Glauben vs. Wissen”?)

                                        @maf: Du kannst mit der besagten Funktion, welche du mit einem Startskript aufrufst, anstehende Downloads z.B. aus Abos runterladen, wonach sich das Programm automatisch beendet (das geht allerdings nicht, ohne dass dabei “das GUI geöffnet” wird).

                                        @maf sagte: Und für den Fall eines Downloads: Ist es möglich, MediathekView zu starten ohne die Filmliste zu aktualisieren?

                                        Ja, ich empfehle dir mal die Programmeinstellungen durchzugehen. Die Art des Ladens der Filmliste kann dort ein- bzw. auf manuell umgestellt werden. Mal abgesehen davon, aktualisiert sich die Filmliste v.a. automatisch, wenn sie älter als 3 h ist und MV neu gestartet wird.

                                        1 Antwort Letzte Antwort
                                        • M maf hat am auf dieses Thema verwiesen

                                        34

                                        Online

                                        6.6k

                                        Benutzer

                                        6.1k

                                        Themen

                                        38.9k

                                        Beiträge
                                        undefined
                                        • Anmelden

                                        • Du hast noch kein Konto? Registrieren

                                        • Anmelden oder registrieren, um zu suchen
                                        • Erster Beitrag
                                          Letzter Beitrag
                                        0
                                        • Kategorien
                                        • Aktuell
                                        • Tags
                                        • Beliebt
                                        • Benutzer
                                        • Gruppen