[Release] Amazon Music

  • Na da legen wir eben mal wieder ne schöne CD in Player..
    Nur kein Stress @spacy es ist ja Weihnachten zumindest bald. Wünsch Dir und Deiner Familie Schönes Fest und geruhsame Feiertage!

    Nvidia Shield TV Pro 2015/2019| Omega Beta3 | HorizonzV
    Zbox ID83 | i3 | 8 GB Ram | SSD M4 64GB | Libreelec Matrix | Estuary Mod 2
    Zotac Zbox Ad02 | 8 GB Ram | Libreelec 9| Madnox
    AMD Ryzen 5 3600 | 16GB | Radeon RX5500 XT Win 10 x64 | Omega Nightly | Viele Skins zum Probieren
    NAS Synology DS 216+II 16TB DSM 7.2
    Fire Cube 3 | Omega | Metropolis
    Tanix TX3 4/64 GB | Corelec Matrix | Estuary Mod

  • Glaubt mir, ich vermisse die tägliche freie Musikauswahl genauso wie ihr und würde eher heute als morgen das Ganze wieder zum Laufen bringen.
    Immer wenn man meint einen Schritt vorangekommen zu sein tauchen neue Hürden auf...hier mal der aktuelle Stand:

    Problem
    - Abspielen von allen nicht gekauften Song ist nicht mehr möglich (Live Fußball funktioniert 8) )

    Ursache
    - Amazon hat die Bereitstellung des Contents signifikant geändert und (so sieht es für mich aus) den DRM-Schutz oben drauf gepackt.

    Lösungsansätze / Entwicklungsstand
    - Client-Server-Kommunikation steht, das mpd File als Basis des Streamings kann extrahiert und lokal gespeichert werden
    - Kodi kann nativ keine mpd Files abspielen
    - Nutzung von inputstream.adaptive als "helper"
    - Wiedergabe mittels inputstream.adaptive ist bisher nicht erfolgreich (liegt an Kodi selbst, Alternativen müssen noch getestet werden)
    - Wiedergabe mittels VLC funktioniert sofort, aber und das habe ich erst kürzlich herausgefunden stoppt die Wiedergabe nach ca. 30 Sekunden (Ursache bisher unklar)

    Vermutung
    - selbst wenn die Wiedergabe mit Kodi funktionieren sollte, erwarte ich das gleiche Verhalten wie mit VLC -> also weiterhin weit weg von einer Lösung
    - in der weiteren Client-Server-Kommunikation wird ein "licenseChallenge" gesendet und daraufhin erhält man den DRM-Schlüssel
    - mit diesem DRM-Schlüssel kann vermutlich die komplette Wiedergabe erfolgen

    Fragestellungen
    - Wenn der gesamte Content DRM geschütz ist, warum ist dann eine teilweise Wiedergabe möglich? ...ist total unlogisch
    - Wenn DRM wider Erwarten keine Rolle spielt, warum stoppt die Wiedergabe nach ca. 30 Sekunden? ...möglicherweise habe ich hier noch etwas übersehen

    Aus meiner Sicht ist die Ermittlung der "licenseChallenge" im wahrsten Sinne des Wortes der Schlüssel. Diese wird lokal durch Scripting ermittelt und versteckt sich in den vielen Script-Dateien von Amazon (11 habe ich bisher gezählt). Selbige sind extrem kryptisch und umfassen teilweise mehr als 130.000 Zeilen Code und Dank Visual Studio kann man diese Dateien "lesbarer" gestalten...(verstehen ist eine andere Sache :whistling: ). Script-Debugging führte bisher nicht zum Erfolg und Script-Recording auch nicht....dafür passiert einfach zu viel und vermutlich passten meine Breakpoints nicht.
    Also wenn jemand Lust und Laune hat an dieser Stelle zu unterstützen..."feel free to support" :thumbup:

  • Hallo Ronny und allen anderen die hier fleißig mitlesen,

    zur Lösung der DRM Lizenzschlüsselthematik brauche ich definitiv Unterstützung. D.h. wenn jemand jQuery beherrscht, BASE64 Kodierung kennt und ggf. btoa und otab schon gehört hat, bist du bereits bestens prepariert.
    Was wäre konkret zu machen? Nun, wie in meinem vorangegangen Post bereits geschildert, müssen die Amzn Scripte analysiert werden, um genau zu verstehen wie die "licenseChallenge" aufgebaut wird.
    Einen Einsprungspunkt kenne ich und auch ein paar Funktionsabhängigkeiten. Somit konnte ich mir einige Punkte zusammenreimen, aber das ganze Bild habe ich noch nicht (auch aufgrund Zeitmangels).

    Die "licenseChallenge" an sich beinhaltet u.a. den unterstützen Codec des Browsers (WIDEVINE oder PLAYREADY), hinzu kommt vermutlich noch die Player- als auch Browserversion und natürlich die abzuspielende Song-ID. Mit der "licenseChallenge" wird die API zur Lizenzschlüsselbereitstellung versorgt, alles weitere kommt dann von Amazon.

  • Die "licenseChallenge" an sich beinhaltet u.a. den unterstützen Codec des Browsers (WIDEVINE oder PLAYREADY), hinzu kommt vermutlich noch die Player- als auch Browserversion und natürlich die abzuspielende Song-ID. Mit der "licenseChallenge" wird die API zur Lizenzschlüsselbereitstellung versorgt, alles weitere kommt dann von Amazon

    Also wenn man sich


    ansieht und den Fakt dass das Ergebnis von

    nur 4 Zeichen ist, glaub ich kaum dass da sonderlich viel Info enthalten ist.
    Wo genau t.body herkommt ist mir allerdings ein leichtes Rätsel

  • Hi @balabana,
    du hast bereits den Punkt gefunden, nur bei mir ist die licenseChallenge ein String von ca. 2.400 Zeichen. Ca. 80% sind bei jedem Aufruf identisch, die fehlenden 20 Prozent scheinen der gewünschte Song zu sein.
    Und es geht tatsächlich darum wie und in welcher Funktion t.body genieriert wird.

    Für alle anderen zum Abholen :thumbup:
    Die Javascript Datei, die "main" im Dateinamen hat, enthält die Funktion "Obkh" in der ist o.a. Code-Schnipsel hinterlegt. Hinzu kommen noch (bisheriger Kenntnisstand):
    - Webplayer_vendors.js
    - Webplayer_runtime.js
    - Webplayer * cp_src*
    - Webplayer * cp_css*
    - Webplayer * de_DE*
    - Webplayer * jquery * min *
    - jquery.js mit Amazon Erweiterungen
    - MaestrojsBuzz.js
    - AmazonPopoversAUIShim.js
    - RetailDownloaderAUIAsset.js

    und auf der HTML Seite an sich laufen auch noch einige Scripte.

  • @spacy wenn ich das richtig sehe, wird die licenseChallenge von widevine generiert. Bei Amazon Video sieht die Challenge ähnlich aus und wird von Widevine generiert. Der license_key in Kodi müsste dann ungefähr so aussehen:

    Code
    <url>|Content-Type=application%2Fx-www-form-urlencoded&Cookie=<cookieData>|<jsonstr>|JBlicense


    wobei <jsonstr> ähnlich wie der folgende aussehen sollte:

    Code
    {"DrmType": "WIDEVINE","licenseChallenge": "B{SSM}", "customerId": "<cid>","deviceToken": {"deviceTypeId": "<dtid>","deviceId": "<did>"},"appInfo": {"musicAgent": "Maestro/1.0 WebCP/1.0.202638.0 (17d5-73f8-dmcp-c163-61530)"}}

    <cid>, <dtid>, <did> müssen durch passende Werte ersetzt werden, sollten aber bei jedem Lied gleich sein. Testen konnte ich es bis jetzt noch nicht, da gerade durch die Cookie Daten ein schneller Test nicht so einfach ist, aber ich hoffe es hilft dir weiter.

  • Vielen Dank @Pati, das ist genau der Grund warum ich Open Source und die damit verbundene Community so mag...man hilft sich einfach. :thumbup:

    ...und ich kann vorsichtigen Optimismus verbreiten.
    Nach gefühlt tausenden Anpassungen und Tests, ist es mir endlich gelungen inputstream adaptive und vor allem den Amazon Request so aufzubauen, dass der Lizenzschlüssel zum Abspielen empfangen wird und Kodi tatsächlich etwas wiedergibt.

    Vorsichtiger Optimismus desshalb weil die gekauften Songs noch nicht so wollen. Das liegt vermutlich an den vielen Code-Schnippseln, die ich erst einmal wieder sortieren muss.

  • Die neue Version funktioniert bei mir nicht. Fehlermeldung beim Start des Addons. Das Addon-Package scheint unvollständig zu sein.

    Python
    2020-03-25 00:16:24.952867+0100 kodi.bin[55871:9203389] [definition='1','3']Debug[/definition] Print: EXCEPTION Thrown (PythonToCppException) : -->Python callback/script returned the following error<--
     - NOTE: IGNORING THIS CAN LEAD TO MEMORY LEAKS!
    Error Type: <type 'exceptions.ImportError'>
    Error Contents: No module named lib.NetflixCommon
    Traceback (most recent call last):
      File "/Users/kai/Library/Application Support/Kodi/addons/plugin.audio.amazonmedia/service.py", line 8, in <module>
        from resources.lib.NetflixCommon import NetflixCommon
    ImportError: No module named lib.NetflixCommon
    -->End of Python script error report<--

    Ist übrigens nicht Mac-spezifisch. Gleiches Fehlerbild auch unter Android.

Jetzt mitmachen!

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