I just got a promising response from a license server and i'm pretty sure that the keys are under "contentKeyIds".
While i'm aware that these are Base64 encoded (hex), i'm not sure how to get them into the <keyid>:<key> format.
There's a DEFAULT_KID in the original mpd () but it's above PlayReady, so i think it belongs to that.Code:872DEBCC-B7C8-4B6F-91A1-7F69B2A13A24
The Widevine PSSH (Box!) is:whose Key ID then is:Code:AAAAeXBzc2gAAAAA7e+LqXnWSs6jyCfc1R0h7QAAAFkIARIQhy3rzLfIS2+RoX9psqE6JBoGYW1hem9uIjVjaWQ6TFk4N3Y1RnZRK1NqTkpVYXM2MnREUT09LGh5M3J6TGZJUzIrUm9YOXBzcUU2SkE9PSoCU0QyAA==I AM USING FREEVEE!Code:872debcc-b7c8-4b6f-91a1-7f69b2a13a24
Code:{ "returnedTitleRendition": { "asin": "B0CLZ3RFDY", "assetBundleVideoQuality": "HD", "audioQuality": "Stereo", "contentId": "amzn1.dv.vcid.a6cd5789-8c99-4c15-8212-6aae570e2082", "pid": "com.amazon.playback.object.vod.19329F47-5ADF-42C1-8C8B-1487B6C254EA", "selectedEntitlement": { "benefit": "freewithads", "consumptionExpiration": "1710618721626", "entitlementType": "THIRD_PARTY_SUBSCRIPTION", "grantedByCustomerId": "A195Q9JBOPVNNR", "tierId": "amzn1.dv.spbcmd.d3b9f545-452a-4a08-8a00-f925e0929ea9" }, "titleId": "B0CLZ3RFDY", "videoMaterialType": "Feature", "videoQuality": "HD", "videoResolution": "720p" }, "widevine2License": { "license": "CAIShgMKLAoQocW0eC5dNw0veIdLIZ6+MBIIiY8Xhde8ur4gASgAOP/oD0AASPX6x68GEiAIARAAGAAg/+gPKAAw/+gPOABCAEgAUABYAGAAcAB4ARpiChC3cNW0u2tZTa+YWEWq6apfEhAdpEI4SSwtTlqxc3vo8hZvGhAzZev/1Jda5crlJom9VKJ0IAIoATIICAEQKhgAIAA6CAgBECoYACAAQhIKEGtjMTYAA/R/L4Z3luAAAgwaYgoQLY87v5FvQ+SjNJUas62tDRIQ9NMNMSDfAbPEL9/LLmAUlxoQ0CNyB1HYLBUxzROvZN1K9CACKAEyCAgAECoYACAAOggIARAqGAAgAEISChBrYzE2AAP0fy+Gd5agAAAIGmIKEIct68y3yEtvkaF/abKhOiQSEMumkaKgN/qH9qDx+2FjI0UaEOERx53ZTq8L9JFJ1aUuQNIgAigCMggIABAqGAAgADoICAEQKhgAIABCEgoQa2MxNgAD9H8vhneWpAAACCD1+sevBjgAUAIaIFH8+j5kxkeCuXSffcGbsO6DhNkCBEipq6NPfA/23YUhIoABleKJYF0/caA6GzxuKhv9PZVlfx9anGhC6QaJd5Q37/vFQelC8/4YVSiNk4Nair5cI2x3KMN44ZAPtQ88+1tpMuk9ZQvFBFJUxHb1lsqYbt4MkAXJrOHsLaV/+83eDwWuhBu4X+YYYHbDlp1SHCXGNSPpF45W5vJIgM8Vn2/Dmzg6CAoGMTYuNC40QAFKgAIAAAACAAABAAAFABAvhneWipJNlwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAABAAAAAAAAAAAAAAAAAAAAAAAD9H8AAAAAAAAAAAAAAAAAAAAAAAAAAwAAAFQAAAAQAAAAZgAAABAAAAB4AAAAEAAAAAAAAAAAAAAApAAAABAAAAC4AAAAEAAAAMoAAAAQAAAA3AAAABAAAAAAAAAAAAAAAQgAAAAQAAABHAAAABAAAAEuAAAAEAAAAUAAAAAQAAAAAAAAAAAAAAFsAAAAEPRnQirviRsKLjUY6zC534p70gwimNTsj6ka9zKmZXYgWAA=", "metadata": { "keyIds": { "contentKeyIds": [ "LY87v5FvQ+SjNJUas62tDQ==", "hy3rzLfIS2+RoX9psqE6JA==" ], "hdcpTestKeyId": "t3DVtLtrWU2vmFhFqumqXw==" }, "keyMetadata": [ { "hdcp": { "hdcp": "HDCP_V1" }, "id": "t3DVtLtrWU2vmFhFqumqXw==", "keyType": "HDCP_TEST" }, { "hdcp": { "hdcp": "HDCP_NONE" }, "id": "LY87v5FvQ+SjNJUas62tDQ==", "keyType": "CONTENT" }, { "hdcp": { "hdcp": "HDCP_NONE" }, "id": "hy3rzLfIS2+RoX9psqE6JA==", "keyType": "CONTENT" } ] } } }
+ Reply to Thread
Results 1 to 25 of 25
-
-
The thing is, pywidevine/cdm.py is throwing an error when it's fed the request response, even though it seems to be correct:
Code:Traceback (most recent call last): File ".\pywidevine\cdm.py", line 407, in parse_license signed_message.ParseFromString(license_message) google.protobuf.message.DecodeError: Error parsing message with type 'pywidevine_license_protocol.SignedMessage'
Code:Traceback (most recent call last): File "amazondl.py", line 24, in <module> cdm.parse_license(session_id, license.content) File ".\pywidevine\cdm.py", line 411, in parse_license raise InvalidLicenseMessage(f"Could not parse license_message as a SignedMessage, {e}") pywidevine.exceptions.InvalidLicenseMessage: Could not parse license_message as a SignedMessage, Error parsing message with type 'pywidevine_license_protocol.SignedMessage'
-
Well now i don't know what to do:
[Attachment 77658 - Click to enlarge]
the "keys" i obtained are just these in the EME Logger -
Should be something like this in your L3 script:
Code:response_json = json.loads(license.content) lic = response_json['widevine2License']['license'] cdm.parse_license(session_id, lic)
-
(i implemented the changes from @white_snake)
Code:InvalidContext: Cannot parse a license message without first making a license request
Code:If the Session has no Context Data. This is likely to happen if the License Challenge was not made by this CDM instance, or was not by this CDM at all. It could also happen if the Session is closed after calling parse_license but not before it got the context data.
which makes sense i guess, but i have no idea what could fox this.
ideas are welcome -
Sure
Code:import glob import requests import headers import json from pywidevine.device import Device from pywidevine.cdm import Cdm from pywidevine.pssh import PSSH if __name__ == '__main__': files = glob.glob('Device/*.wvd') device = Device.load(files[0]) cdm = Cdm.from_device(device) session_id = cdm.open() #pssh = PSSH(input("PSSH: ")) pssh = PSSH("AAAAeXBzc2gAAAAA7e+LqXnWSs6jyCfc1R0h7QAAAFkIARIQhy3rzLfIS2+RoX9psqE6JBoGYW1hem9uIjVjaWQ6TFk4N3Y1RnZRK1NqTkpVYXM2MnREUT09LGh5M3J6TGZJUzIrUm9YOXBzcUU2SkE9PSoCU0QyAA==") #challenge = cdm.get_license_challenge(session_id, pssh) lic_url = input("License URL: ") license = requests.post(url=lic_url, headers=headers.headers, params=headers.params, data=headers.data, cookies=headers.cookies) license.raise_for_status() print("\n" + str(license.content) + "\n") response_json = json.loads(license.content) lic = response_json['widevine2License']['license'] cdm.parse_license(session_id, lic) #cdm.parse_license(session_id, license.content) for key in cdm.get_keys(session_id): if key.type != 'SIGNING': key_info = f"{key.kid.hex}:{key.key.hex()}\n" print(key_info)
-
Error message was right:
This is likely to happen if the License Challenge was not made by this CDM instance, or was not by this CDM at all.
Code:#challenge = cdm.get_license_challenge(session_id, pssh)
Code:data=challenge
-
when i feed the challenge as base64 into requests i just get this generic answer:
i also tried just the pssh data as input, didn't work.
i'm confused because the error is saying that the license challenge is correct, but it worked (got a license), so for it to actually work i'd have to get a license from the server with my own challenge?
Code:{ "errorsByResource": { "Widevine2License": { "errorCode": "PRS.InvalidRequest", "message": "Cannot complete request.", "type": "PRSInvalidRequestException" } }, "returnedTitleRendition": { "asin": "B0CLZ3RFDY", "assetBundleVideoQuality": "HD", "audioQuality": "Stereo", "contentId": "amzn1.dv.vcid.a6cd5789-8c99-4c15-8212-6aae570e2082", "pid": "com.amazon.playback.object.vod.19329F47-5ADF-42C1-8C8B-1487B6C254EA", "selectedEntitlement": { "benefit": "freewithads", "consumptionExpiration": "1710692482031", "entitlementType": "THIRD_PARTY_SUBSCRIPTION", "grantedByCustomerId": "A195Q9JBOPVNNR", "tierId": "amzn1.dv.spbcmd.d3b9f545-452a-4a08-8a00-f925e0929ea9" }, "titleId": "B0CLZ3RFDY", "videoMaterialType": "Feature", "videoQuality": "HD", "videoResolution": "720p" } }
Code:challenge = cdm.get_license_challenge(session_id, pssh) license = requests.post(url=lic_url, headers=headers.headers, params=headers.params, data=base64.b64encode(challenge), cookies=headers.cookies)
-
You got a response, but not a license, in fact in the latter response the following is missing:
Code:widevine2License": { "license"
I suggest you post the license url request payload from your browser in raw/source form. -
i know, i was referring to the first time i got a license (https://forum.videohelp.com/threads/413795-Extract-Keys-from-License-Server-response#post2727851)
anyways, i think you're referring to the request headers of the license url?
i left out my session token btw
Code:headers = { 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:123.0) Gecko/20100101 Firefox/123.0', 'Accept': '*/*', 'Accept-Language': 'en-US,en;q=0.5', # 'Accept-Encoding': 'gzip, deflate, br', 'Content-Type': 'application/x-www-form-urlencoded', 'Origin': 'https://www.amazon.de', 'Connection': 'keep-alive', 'Referer': 'https://www.amazon.de/', 'Cookie': 'session-id=260-1996516-3016232; session-id-time=2082787201l; ubid-acbde=257-8243882-7781813; session-token=', 'Sec-Fetch-Dest': 'empty', 'Sec-Fetch-Mode': 'cors', 'Sec-Fetch-Site': 'same-site', 'Sec-GPC': '1', } params = { 'deviceID': '00c2942e-2382-4b60-875c-8f07d8765b85', 'deviceTypeID': 'AOAGZA014O5RE', 'gascEnabled': 'false', 'marketplaceID': 'A1PA6795UKMFR9', 'uxLocale': 'de_DE', 'firmware': '1', 'playerType': 'xp', 'operatingSystemName': 'Windows', 'operatingSystemVersion': '10.0', 'deviceApplicationName': 'Firefox64', 'asin': 'amzn1.dv.gti.21608621-f43f-41d6-a201-1b892868aca1', 'consumptionType': 'Streaming', 'desiredResources': 'Widevine2License', 'resourceUsage': 'ImmediateConsumption', 'videoMaterialType': 'Feature', 'clientId': 'f22dbddb-ef2c-48c5-8876-bed0d47594fd', 'userWatchSessionId': 'bbad1c56-0ea0-427d-a569-f191d724b898', 'displayWidth': '1920', 'displayHeight': '1080', 'supportsVariableAspectRatio': 'true', 'deviceProtocolOverride': 'Https', 'vodStreamSupportOverride': 'Auxiliary', 'deviceStreamingTechnologyOverride': 'DASH', 'deviceDrmOverride': 'CENC', 'deviceAdInsertionTypeOverride': 'SSAI', 'deviceHdrFormatsOverride': 'None', 'deviceVideoCodecOverride': 'H264', 'deviceVideoQualityOverride': 'HD', 'deviceBitrateAdaptationsOverride': 'CVBR,CBR', 'playerAttributes': '{"middlewareName":"Firefox64","middlewareVersion":"123.0","nativeApplicationName":"Firefox64","nativeApplicationVersion":"123.0","supportedAudioCodecs":"AAC","frameRate":"HFR","H264.codecLevel":"4.2","H265.codecLevel":"0.0","AV1.codecLevel":"0.0"}', } data = { 'widevine2Challenge': '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', 'includeHdcpTestKeyInLicense': 'true', }
Code:def _license(self, url, headers, pssh, cert, device = (None, False, None)): cert = 'CAUSwgUKvAIIAxIQCuQRtZRasVgFt7DIvVtVHBi17OSpBSKOAjCCAQoCggEBAKU2UrYVOSDlcXajWhpEgGhqGraJtFdUPgu6plJGy9ViaRn5mhyXON5PXmw1krQdi0SLxf00FfIgnYFLpDfvNeItGn9rcx0RNPwP39PW7aW0Fbqi6VCaKWlR24kRpd7NQ4woyMXr7xlBWPwPNxK4xmR/6UuvKyYWEkroyeIjWHAqgCjCmpfIpVcPsyrnMuPFGl82MMVnAhTweTKnEPOqJpxQ1bdQvVNCvkba5gjOTbEnJ7aXegwhmCdRQzXjTeEV2dO8oo5YfxW6pRBovzF6wYBMQYpSCJIA24ptAP/2TkneyJuqm4hJNFvtF8fsBgTQQ4TIhnX4bZ9imuhivYLa6HsCAwEAAToPYW1hem9uLmNvbS1wcm9kEoADETQD6R0H/h9fyg0Hw7mj0M7T4s0bcBf4fMhARpwk2X4HpvB49bJ5Yvc4t41mAnXGe/wiXbzsddKMiMffkSE1QWK1CFPBgziU23y1PjQToGiIv/sJIFRKRJ4qMBxIl95xlvSEzKdt68n7wqGa442+uAgk7CXU3uTfVofYY76CrPBnEKQfad/CVqTh48geNTb4qRH1TX30NzCsB9NWlcdvg10pCnWSm8cSHu1d9yH+2yQgsGe52QoHHCqHNzG/wAxMYWTevXQW7EPTBeFySPY0xUN+2F2FhCf5/A7uFUHywd0zNTswh0QJc93LBTh46clRLO+d4RKBiBSj3rah6Y5iXMw9N9o58tCRc9gFHrjfMNubopWHjDOO3ATUgqXrTp+fKVCmsGuGl1ComHxXV9i1AqHwzzY2JY2vFqo73jR3IElr6oChPIwcNokmNc0D4TXtjE0BoYkbWKJfHvJJihzMOvDicWUsemVHvua9/FBtpbHgpbgwijFPjtQF9Ldb8Swf' headers = (lambda .0: for k, v in .0: if k != 'User-Agent': continuev)(headers.items()) wvdecrypt = WvDecrypt(pssh, cert, device) challenge = wvdecrypt.get_challenge() license_b64 = self.widevine_cert(challenge, url, headers) wvdecrypt.update_license(license_b64) (_, keyswvdecrypt) = wvdecrypt.start_process() KEYS = keyswvdecrypt return KEYS
Last edited by larley; 14th Mar 2024 at 12:50.
-
Add/change this:
Code:json_payload = { 'widevine2Challenge': base64.b64encode(challenge).decode('utf-8'), 'includeHdcpTestKeyInLicense': 'true', } license = requests.post(url=lic_url, json=json_payload, headers=headers.headers, params=headers.params, cookies=headers.cookies)
-
that actually helped
(the error changed
):
Code:{ "errorsByResource": { "Widevine2License": { "downstreamReason": "vmp_validation_required", "errorCode": "PRS.Dependency.DRM.Widevine.HdContentNotAllowed.VmpValidationRequired", "message": "Cannot complete request.", "type": "PRSWidevine2LicenseDeniedException" } }, "returnedTitleRendition": { "asin": "amzn1.dv.gti.21608621-f43f-41d6-a201-1b892868aca1", "assetBundleVideoQuality": "HD", "audioQuality": "Stereo", "contentId": "amzn1.dv.vcid.a6cd5789-8c99-4c15-8212-6aae570e2082", "pid": "com.amazon.playback.object.vod.19329F47-5ADF-42C1-8C8B-1487B6C254EA", "selectedEntitlement": { "benefit": "freewithads", "consumptionExpiration": "1710698799702", "entitlementType": "THIRD_PARTY_SUBSCRIPTION", "grantedByCustomerId": "A195Q9JBOPVNNR", "tierId": "amzn1.dv.spbcmd.d3b9f545-452a-4a08-8a00-f925e0929ea9" }, "titleId": "amzn1.dv.gti.21608621-f43f-41d6-a201-1b892868aca1", "videoMaterialType": "Feature", "videoQuality": "HD", "videoResolution": "720p" } }
i used a different cdm and got this:
Code:{ "errorsByResource": { "Widevine2License": { "downstreamReason": "untrusted_device", "errorCode": "PRS.Dependency.DRM.Widevine.UnsupportedCdmVersion", "message": "Cannot complete request.", "type": "PRSWidevine2LicenseDeniedException" } }, "returnedTitleRendition": { "asin": "amzn1.dv.gti.21608621-f43f-41d6-a201-1b892868aca1", "assetBundleVideoQuality": "HD", "audioQuality": "Stereo", "contentId": "amzn1.dv.vcid.a6cd5789-8c99-4c15-8212-6aae570e2082", "pid": "com.amazon.playback.object.vod.19329F47-5ADF-42C1-8C8B-1487B6C254EA", "selectedEntitlement": { "benefit": "freewithads", "consumptionExpiration": "1710699036097", "entitlementType": "THIRD_PARTY_SUBSCRIPTION", "grantedByCustomerId": "A195Q9JBOPVNNR", "tierId": "amzn1.dv.spbcmd.d3b9f545-452a-4a08-8a00-f925e0929ea9" }, "titleId": "amzn1.dv.gti.21608621-f43f-41d6-a201-1b892868aca1", "videoMaterialType": "Feature", "videoQuality": "HD", "videoResolution": "720p" } }
-
ok this is the end. i just read this:
https://forum.videohelp.com/threads/401717-How-are-you-going-to-respond-to-widevine-l3...56#post2646535
so it seems like this isn't going to work (i think) -
Yup I think so. More info here: https://github.com/Sandmann79/xbmc/issues/294#issuecomment-479558716 (maybe one can still grab sd content that way?)
-
i removed operatingSystemName and operatingSystemVersion from my license url and params but that didn't change anything ...
-
Here's a comparison of the GetPlaybackResources url from an Android Chrome Browser and Firefox on Windows:
-
Omg i got keys
480p keys!!!!
Code:b770d5b4bb6b594daf985845aae9aa5f:b0cb46d2d31cf044bc73db71e9865f6f 14b5a91ed49c4beb85eaa79cc0fa4964:3a4ed70b8740c975c265e90640c3f7d7 1ae09d8dbd5844dfac8318b5d9b060de:99d8be97ddadf993d2274db54b4dc6ae
Code:https://s3-dub-ww.cf.dash.row.aiv-cdn.net/dm/2$dJgpc0RTkFXi2uQ7B3GE2RLwS-0~/8682/bc20/c6f3/4e7e-8d0b-5c919a962092/2cccd819-aa5d-4851-9438-47453c0a35e0_corrected.mpd?amznDtid=AOAGZA014O5RE&encoding=segmentBase
license server response:
Code:{ "returnedTitleRendition": { "asin": "amzn1.dv.gti.21608621-f43f-41d6-a201-1b892868aca1", "assetBundleVideoQuality": "SD", "audioQuality": "Stereo", "audioTrackId": "all", "contentId": "amzn1.dv.vcid.a6cd5789-8c99-4c15-8212-6aae570e2082", "pid": "com.amazon.playback.object.vod.214C35C0-01C1-45E2-87CB-4EFD89665BC3", "selectedEntitlement": { "benefit": "freewithads", "consumptionExpiration": "1710856453499", "entitlementType": "THIRD_PARTY_SUBSCRIPTION", "grantedByCustomerId": "A195Q9JBOPVNNR", "tierId": "amzn1.dv.spbcmd.d3b9f545-452a-4a08-8a00-f925e0929ea9" }, "titleId": "amzn1.dv.gti.21608621-f43f-41d6-a201-1b892868aca1", "videoMaterialType": "Feature", "videoQuality": "SD", "videoResolution": "480p" }, "widevine2License": { "license": "CAISpwQKMAogRDU1NEU0NkQwMDAwMDAwMDAxMDAwMDAwMDAwMDAwMDASCLVNz93rTYZCIAEoABIgCAEQABgAIP/oDygAMP/oDzgAQgBIAFAAWABgAHAAeAEalgEKELdw1bS7a1lNr5hYRarpql8SEAlR/nhZYCXdpYN1OPssrJkaID0vhfEtoFXfSsE0J6K9+qa3GfgbAH0o8UNPmTc7E2eWIAIoATIICAEQKhgAIAA6CAgBECoYACAAQjQKIBPMDC/Itw7bkEM1ET6+h8pc+j+0Jz8Tp8DtHCY6SEerEhCEybbuXoamVsJJ4vw5qZY+YgAalgEKEBS1qR7UnEvrheqnnMD6SWQSEMJmJTJczYz9NVYa4g79Sr8aIMcft+u983ZV9pfo54EBoR8qalOY3gDzXh8N1MSxKWZ/IAIoATIICAAQKhgAIAA6CAgBECoYACAAQjQKIEYpy/5w3tWXq1+q2V9JORt0yvbKbJLWoojGKnEo0DhXEhAXpHSSzXkm3YPiD3iWojj8YgAalgEKEBrgnY29WETfrIMYtdmwYN4SEB/tdNi7T1jSGlxFhHkSfrUaIJXtK/F8RCmYDcdJ46ucWdBJy26a+kg00A7hwBkSz+/kIAIoAjIICAAQKhgAIAA6CAgBECoYACAAQjQKIEEqP/JIwfO5nPVmu92NNCSkz9oix/idbhmAON7gVipJEhBLO3NVWS/27q8tZd09ocpyYgAghMnWrwY4ABogRtDhc76si2d8RPUkRwXz/pLcUUtCxzuH7Kbv5d0//nsigAJ2nwLGFTguhXZpgpJKerWLuXi1AXs7ot40mdppC8DvFHiwlZd56kHgBfr+fkKk/lUcBAy1FiANcKcXHDPKrR0xwVYBOHhB27+QoECd/mvahu8+gWAHbTIiNFCHIQWDykLe9y9Yf7ziurniKi7xhRERhS1vBqjdUN1AVHSMze0LFi9B05oUr567pA862TOe6OhmJaw3hBpfsKEQb6O9GGOgjwmh+MbJoRSNWngOpa8VeBL+pDyF+sAHheA3BuIUYTkNPtgUtLhGAgITDIQgOZLLYYU9bRWMYapZT/8vukkfXN7vdb8wMFzS1B/ARnww1ikv519xA6G7jITGk0TwnL+wOggKBjE4LjAuMUABWAA=", "metadata": { "keyIds": { "contentKeyIds": [ "FLWpHtScS+uF6qecwPpJZA==", "GuCdjb1YRN+sgxi12bBg3g==" ], "hdcpTestKeyId": "t3DVtLtrWU2vmFhFqumqXw==" }, "keyMetadata": [ { "hdcp": { "hdcp": "HDCP_V1" }, "id": "t3DVtLtrWU2vmFhFqumqXw==", "keyType": "HDCP_TEST" }, { "hdcp": { "hdcp": "HDCP_NONE" }, "id": "FLWpHtScS+uF6qecwPpJZA==", "keyType": "CONTENT" }, { "hdcp": { "hdcp": "HDCP_NONE" }, "id": "GuCdjb1YRN+sgxi12bBg3g==", "keyType": "CONTENT" } ] } } }
just set your user agent to android
send a request to the amazon webpage
retrieve the pssh from the mpd file (doesn't need to be a pssh box)
i found that you only need three cookie values in your headers.py:
Code:ubid-acbde x-acbde at-acbde
for the license URL, choose one of the "GetPlaybackResources" that contains "desiredResources=Widevine2License"
then use this script:
Code:import glob import requests import headers import json import base64 from pywidevine.device import Device from pywidevine.cdm import Cdm from pywidevine.pssh import PSSH if __name__ == '__main__': files = glob.glob('Device/*.wvd') device = Device.load(files[0]) cdm = Cdm.from_device(device) session_id = cdm.open() pssh = PSSH(input("PSSH: ")) challenge = cdm.get_license_challenge(session_id, pssh) lic_url = input("License URL: ") json_payload = { 'widevine2Challenge': base64.b64encode(challenge).decode('utf-8'), 'includeHdcpTestKeyInLicense': 'true' } license = requests.post(url=lic_url, data=json_payload, cookies=headers.cookies) license.raise_for_status() response_json = json.loads(license.content) lic = response_json['widevine2License']['license'] cdm.parse_license(session_id, lic) for key in cdm.get_keys(session_id): if key.type != 'SIGNING': key_info = f"--key {key.kid.hex}:{key.key.hex()} " print(key_info, end="")
(i used an Android Studio L3 CDM)Last edited by larley; 16th Mar 2024 at 09:06.
-
-
can a device_vmp_blob only be used for a chrome cdm or does it work on an android cdm too?
-
Wrote a script for all 480p content:
https://github.com/DevLARLEY/amzn-480p-downloader -
Hi, sorry, I'm new to this world could you please explain these steps clearly? I am going to use pywidevine, also explain the commands to use if you don't mind
2. Drop the file in either of those folders (which folder?)
3. Add an L3 CDM in the right folder (basically the .wvd file got from dump?)
4. Add the 3 pre-defined cookies to the headers.py file (done)
5. Add N_m3u8DL-RE to the folder if you wish to have the content downloaded, decrypted and muxed automatically (N_m3u8DL-RE.exe in the script folder I downloaded?)
6. Change the TLD variable to you country's TLD (i.e: com = USA; de = Germany; co.uk = UK) (I'm using UK one, where do I need to change TLD?)
7. Run the script and provide a Prime Video Link / [ASIN](https://en.wikipedia.org/wiki/Amazon_Standard_Identification_Number) / contentId. (okay)
Similar Threads
-
WKS-Keys - Unable to parse license
By banaguitar in forum Video Streaming DownloadingReplies: 18Last Post: 11th Dec 2024, 02:28 -
unable to extract keys from license response
By PETA in forum Video Streaming DownloadingReplies: 7Last Post: 29th Jan 2024, 01:03 -
Same PSSH, different license gives differnet keys?
By Devilman in forum Video Streaming DownloadingReplies: 8Last Post: 15th Jul 2023, 09:03 -
get decryption key from license request/response
By HORDTHIONZAC in forum Video Streaming DownloadingReplies: 26Last Post: 30th Jun 2023, 08:56 -
FairPlay License Request/Response
By Rathan in forum Video Streaming DownloadingReplies: 6Last Post: 16th Jun 2023, 09:51