Hi,
I'm trying to install playready proxy and play ready proxyapi from ThatNotEasy I wonder if any of you have made it wrk successfully please ?
my PRPApi is launching fine, but my PRP edge plugin don't make any call on the API.
Here is my PRP plugin screen
[Attachment 86164 - Click to enlarge]
Thanks a lot for any help![]()
+ Reply to Thread
Results 1 to 22 of 22
-
-
Seems that extension is still kinda buggy. Hope they fix it. Here's what worked for me without bothering too much. There are 2 directories
- PlayReadyProxy-API-main => the local api
- PlayReadyProxy-main => the extension
Unpack them both. In the local api folder:
- rename the env and config like their git tells you to do
- copy in that folder (near the app.py) the prd file. Mine is called: "your_prd_file.prd"
- then go to config.ini and change
Code:[CDM] DEVICE_FILE = device/ # DEVICE FILENAME DEVICE_NAME = # DEVICE NAME
Code:[CDM] DEVICE_FILE = your_prd_file.prd DEVICE_NAME = your_prd_file.prd
Code:[{"apikey":"secret"}]
* Running on http://127.0.0.1:1337
- go to config folder and open "local.json" . Change
Code:{ "security_level": "", "host": "", "secret": "", "device_name": "" }
Code:{ "security_level": "", "host": "http://127.0.0.1:1337", "secret": "secret", "device_name": "your_prd_file.prd" }
- open the addon menu, make sure "enabled" is checked. Go to remote cdm > choose config and pick the previously edited "local.json" file.
While testing the addon on
https://reference.dashif.org/dash.js/v4.4.0/samples/drm/playready.html
I had to refresh 2 times to get both set of keys (video+audio) and it worked.
[Attachment 86173 - Click to enlarge]
Code:N_m3u8DL-RE "https://media.axprod.net/TestVectors/v7-MultiDRM-MultiKey-MultiPeriod/Manifest.mpd" --key 2d6e938760ca4145aec2c40837b4b026:42d0bff1b60f7be49f17d603484d0cb9 --key 8b029e51d56a44bd910fd4b5fd90fba2:c889cca25eb30b3b128eb834ea4da4fa -M format=mkv
--[----->+<]>.++++++++++++.---.--------.
[*drm mass downloader: widefrog*]~~~~~~~~~~~[*how to make your own mass downloader: guide*] -
May I ask how to use this program?
https://github.com/ready-dl/csplayready -
-
It's a C# implementation. It's not an addon. It even explains you the steps in the readme git section. If you can handle pyplayready, you can handle the C# alternative. If you don't know about scripts, then you can stick only to the addons.
No problem--[----->+<]>.++++++++++++.---.--------.
[*drm mass downloader: widefrog*]~~~~~~~~~~~[*how to make your own mass downloader: guide*] -
I had done all step
but It seems not query the api.
[Attachment 86198 - Click to enlarge]
tried under windows and same thing. do anyone have a clue on what I made wrong please ? -
Code:
try use local.json
Last edited by NBA456017; 18th May 2025 at 17:34.
discord nxhda -
Hello,
Thanks for this tutorial!
I've done everything correctly, I don't get any error messages, and yet it's not working. Any ideas?
[Attachment 87639 - Click to enlarge]
My PlayReady-API -> config.ini :
Code:[CDM] DEVICE_FILE = device/lg_electronics_inc_lg_webos_tv_msd93xbg_sl3000.prd DEVICE_NAME = LG
Code:[ { "username": "test", "apikey": "test_99c036381a6736de600f61c07a" } ]
Code:{ "security_level": "3000", "host": "http://127.0.0.1:1337", "secret": "test_99c036381a6736de600f61c07a", "device_name": "LG" }
Thanks in advance -
Bypass HMACs, One-time-tokens and Lic.Wrapping: https://github.com/DevLARLEY/WidevineProxy2
-
larley the king of video decryption! thank you so much mate for your work. amazing
just little tip: from PR github page on chrome section you write 'download zip'
we have just xpi file, for FF. anyway it's easy to extract all content with wrar or 7zip
loaded extension on chromium browser i get this error 'background.scripts' requires manifest version of 2 or lower -
Bypass HMACs, One-time-tokens and Lic.Wrapping: https://github.com/DevLARLEY/WidevineProxy2
-
yea, right. but why this error from this new extension?
or this error is with chromium browser only and no error with FF browser?
also tried to edit manifest version 3 to version 2 but my browser can't load extension, with manifest version 2
just out curiosity...! -
Among Chromium browsers, I think it is only going to work on Microsoft Edge. In Ungoogled Chromium there is no PlayReady CDM displayed in chrome://media-internals/
I tried implementing some PlayReady-to-ClearKey hook with LLM assistance, but it doesn't work yet and I have no idea how to pass information to jsplayready from content script. Maybe larley can help.
Code:(function () { const originalRequest = navigator.requestMediaKeySystemAccess; navigator.requestMediaKeySystemAccess = async function (keySystem, supportedConfigurations) { if (["com.microsoft.playready.recommendation", "com.microsoft.playready.recommendation.3000", "com.microsoft.playready.hardware", "com.microsoft.playready", "com.youtube.playready"].includes(keySystem)) { const realKeySystem = "org.w3.clearkey"; // Sanitize configurations for compatibility with ClearKey const modifiedConfigs = supportedConfigurations.map(config => { const sanitized = { ...config }; sanitized.videoCapabilities = (config.videoCapabilities || []).map(cap => { const { robustness, ...rest } = cap; return rest; }); sanitized.audioCapabilities = (config.audioCapabilities || []).map(cap => { const { robustness, ...rest } = cap; return rest; }); // Optional: sanitize other fields like distinctiveIdentifier, persistentState, etc. return sanitized; }); const access = await originalRequest.call(navigator, realKeySystem, modifiedConfigs); const originalCreate = access.createMediaKeys.bind(access); const wrappedAccess = { keySystem, getConfiguration: () => access.getConfiguration(), createMediaKeys: async () => { const realMediaKeys = await originalCreate(); return createWrappedMediaKeys(realMediaKeys); } }; return wrappedAccess; } return originalRequest.call(navigator, keySystem, supportedConfigurations); }; function createWrappedMediaKeys(realMediaKeys) { const originalCreateSession = realMediaKeys.createSession.bind(realMediaKeys); realMediaKeys.createSession = function (...args) { const realSession = originalCreateSession(...args); return new Proxy(realSession, { get(target, prop) { if (prop === "generateRequest") { return async (initDataType, initData) => { console.log("[CustomKeySystem] generateRequest", { initDataType, initData }); console.log(Object.keys(initData)); if (initDataType == "cenc") { const data = new Uint8Array(initData); //let pssh = Pssh(initData); console.log(uint8ArrayToString(data)); //const a = uint8ArrayToString(initData); //console.log(Object.keys(initData)); return target.generateRequest("keyids", initData); } return target.generateRequest(initDataType, initData); }; } if (prop === "update") { return async (response) => { console.log("[CustomKeySystem] update", response); // {"keys":[{"kty":"oct","alg":"A128KW","kid":"nrQFDeRLSAKTLifXUIPiZg","k":"FmY0xnWCPCNaSpRG-tUuTQ"}]} return target.update(response); }; } return typeof target[prop] === "function" ? target[prop].bind(target) : target[prop]; } }); }; return realMediaKeys; } })();
-
background and content script communicate through a message proxy that converts one type of event to another and adds a unique id to each one to track which have arrived and which haven't. It's a true pain but also the only way possible.
Code:async function processMessage(detail) { return new Promise((resolve, reject) => { chrome.runtime.sendMessage({type: detail.type, body: detail.body}, (response) => { if (chrome.runtime.lastError) { return reject(chrome.runtime.lastError); } resolve(response); }); }) } document.addEventListener('response', async (event) => { const { detail } = event; const responseData = await processMessage(detail); const responseEvent = new CustomEvent('responseReceived', { detail: detail.requestId.concat(responseData) }); document.dispatchEvent(responseEvent); });
Code:const playready_device = new Device(Utils.base64ToBytes(device_b64)); const cdm = Cdm.fromDevice(playready_device); const licenseChallenge = cdm.getLicenseChallenge(wrmHeader, rawRevLists, version); const returned_keys = cdm.parseLicense(decodedLicense); const keys = returned_keys.map(key => ({ k: utils.bytesToHex(key.key), kid: utils.bytesToHex(key.key_id) }));
Bypass HMACs, One-time-tokens and Lic.Wrapping: https://github.com/DevLARLEY/WidevineProxy2 -
Hello, and thank you very much for your help!
I tried PlayreadyProxy2 on Edge and Chrome, but it doesn't seem to be working.
Is this a PlayreadyProxy update?
Do I need the same configuration as for PlayreadyProxy (server, etc.), or just the .prd file and do roughly the same thing as for WidevineProxy2?
Thanks in advance
Sincerely,
Yanis -
everything is the same as with widevineproxy2 except that there will never be remote cdm support. and no it doesn't have anything to do with playreadyproxy
Bypass HMACs, One-time-tokens and Lic.Wrapping: https://github.com/DevLARLEY/WidevineProxy2 -
Hi,
Okay, great, thanks for taking the time to answer me. The tool is truly incredible from what I've tested (with WidevineProxy2).
Now I'm getting an error with WidevineProxy2 or PlayReadyProxy2.
The video isn't loading (normal), but I no longer have the key. At the bottom of the screen, it says:
ENGINE_ERROR / ENGINE_DRM_ERROR
Is this because my .wvp or .prd file is banned?
Or is it unrelated?
Thanks in advance.
EDIT : I dumped my own .wvd and it works again with WidevineProxy2
But if I want to download content from Canal+, I get the audio, but the video is encrypted.
I tried with PlayReadyProxy2, but I don't have anything in "Keys," and the video plays normally (even though the extension is enabled).Last edited by yalgerino; 1st Jul 2025 at 18:59.
-
Use Microsoft Edge web browser. Go to edge://flags to enable "Override software rendering list" (to force enable PlayReady DRM if your hardware doesn't support it) and disable "Widevine DRM". I suggested reimplementing the program to not require PlayReady support, but it isn't done yet.
-
Similar Threads
-
playready key?
By iamghost in forum Video Streaming DownloadingReplies: 7Last Post: 5th Jul 2024, 09:15 -
Get PSSH for l3.py with PlayReady headers
By Bartie__ in forum Video Streaming DownloadingReplies: 20Last Post: 5th Apr 2024, 15:02 -
Playready
By hencha in forum Video Streaming DownloadingReplies: 11Last Post: 30th Jan 2023, 06:01 -
Playready DRM
By farafero21 in forum Video Streaming DownloadingReplies: 7Last Post: 17th Dec 2021, 15:45