Na zum Glück hast du kein Jahr angegeben...
...momentan komme ich zeitlich nicht dazu und es haben sich weitere technische Hürden aufgetan.
[Release] Amazon Music
-
spacy -
29. April 2019 um 17:42 -
Erledigt
-
-
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! -
-
Wir hoffen auch das es bald wieder geht!
Allerdings geht die Familie vor! Ich kenne das.
Und so ein Addon als Ein-Mann-Projekt ist echt nicht ohne!Viele Grüße und ein frohes Fest!
-
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 )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 erfolgenFragestellungen
- 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 übersehenAus 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 ). 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" -
-
Gibt es noch Hoffnung?
-
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.
-
-
@spacy Also ich hab mir mal ein Probe Amazon Music Abo geklickt.
Wo genau fängt man mit der Suche an? Welche JS Dateien , Netzwerk-Requests oder Strings sind denn involviert wenn eine Lizenz abgerufen wird zum Abspielen? -
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
JavaScript
Alles anzeigenfunction d(e, t) { o.isFunction(performance.mark) && performance.mark("licenseRequestStart"), t.resolver = "json", t.credentials = "same-origin", t.headers = o.extend({}, t.headers, l.getRequestHeader("com.amazon.digitalmusiclocator.DigitalMusicLocatorServiceExternal.getLicenseForPlaybackV2")), delete t.headers["Content-Type"], delete t.headers.SOAPAction; var n = { DrmType: e, licenseChallenge: btoa(String.fromCharCode.apply(null, new Uint8Array(t.body))), customerId: a.customerId, deviceToken: { deviceTypeId: s.deviceType, deviceId: s.deviceId }, appInfo: { musicAgent: l.getMusicUserAgent() } }; return t.body = JSON.stringify(n), t }
ansieht und den Fakt dass das Ergebnis vonJavaScript
Alles anzeigen{ "DrmType": "WIDEVINE", "licenseChallenge": "DAS=", "customerId": "ADB5Z27C0XI2V", "deviceToken": { "deviceTypeId": "A29ZV8BU35N2N3", "deviceId": "11749896328793438" }, "appInfo": { "musicAgent": "Maestro/1.0 WebCP/1.0.202638.0 (17d5-73f8-dmcp-c163-61530)" } }
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
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.jsund auf der HTML Seite an sich laufen auch noch einige Scripte.
-
So lang? Mit Welcher Anwendung kommt man denn auf eine derart ausführliche Challenge?
Ich war bei Amazon Music mit einem aktuellen Firefox unter Windows. -
-
Du kommst mit dem Browser deiner Wahl darauf. Wichtig ist nur, dass mind. ein Prime Account vorhanden ist und spätestens beim Abspielen solltest du auch diesen langen string sehen können.
-
@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:
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.
-
-
https://github.com/peak3d/inputstream.adaptive/issues/397 , scheint mir da bastelt grad wer an Amazon.
Wenn ich das richtig sehe sind wir mit Geräten wie dem Raspberry Pi dank strikter Checks aussen vor, oder? -
Nur zur Info ...Sandmann mußte in der Video Sektion zum Beispiel vom Amazon VOD Addon auch etwas ändern damit die Einträge wieder sichtbar wurden.
-
-
-
@Pati hast du evtl. ein Beispiel wie mit "&Cookie=<cookieData>" umzugehen ist, also was genau hier hinterlegt werden muss?
-
-
@spacy in etwa so:
Pythoncookiedict = {} for cookie in self.cj: cookiedict[cookie.name] = cookie.value cj_str = ';'.join(['%s=%s' % (k, v) for k, v in cookiedict.items()])
cj_str ist dann <cookieData>
-
Vielen Dank @Pati, das ist genau der Grund warum ich Open Source und die damit verbundene Community so mag...man hilft sich einfach.
...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.
-
-
Eine neue Version steht ab sofort auf Github bereit...endlich wieder (meine) Musik hören können.
Bei Problemen bitte melden. -
Die neue Version funktioniert bei mir nicht. Fehlermeldung beim Start des Addons. Das Addon-Package scheint unvollständig zu sein.
Python2020-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!