Keys:
Code:bc945de9a957ab14e80244c00b27e7fd:b8eea9fb4dce61c8cded0f136a37122d 23fe583a6bc4acc3c4372b57689c0d20:fb372447ce6d32edc583c4a08f0e14ae
+ Reply to Thread
Results 151 to 159 of 159
-
Bypass HMACs, One-time-tokens and Lic.Wrapping: https://github.com/DevLARLEY/WidevineProxy2
-
CBR 1080p:
Code:https://vodnowusoawsdash-cf.tvnow.de/pgrn/streaming/watch/1025166/1-10000-1-1-1-X.ism/rtlplus.mpd 56922b077e89d58ac7c4b8a3f0243ec3:59de6c0fdc4ecfccc0021ee8e2a5f89c https://vodnowusoawsdash-cf.tvnow.de/pgrn/streaming/watch/1025167/1-10000-1-1-1-X.ism/rtlplus.mpd 637a19992e0c27df76d356e103fafa9b:862bd4e117a72b9ada96816d83b0e222
Code:https://vodnowusoawsdash-cf.tvnow.de/pgrn/cves/sd/rtlplus/1025166/3-1-1-1-2-1-12.ism/v1.mpd 906f41d341b6387d502064e5625e6c11:5527f4048344d84a6989680a3c1cf9b1 https://vodnowusoawsdash-cf.tvnow.de/pgrn/cves/sd/rtlplus/1025167/6-1-1-1-2-1-12.ism/v1.mpd 7a2cda05d355eb5e7ba64f7337ec5b6c:756f53b53134fe7818a02a8d4215e3f4
VBR is 99 % trash. So have fun with the CBR PlaylistLast edited by Lostion; 12th Sep 2025 at 17:23.
-
Hi all,
I also need a little help getting the keys.
I try to go step by step through what I've done so far:
1) The file I want to download: https://plus.rtl.de/video-tv/serien/alles-was-zaehlt-146430/2025-8-1039293/episode-476...bedroht-971749
2) --> mpd: https://vodnowusoawsdash-cf.tvnow.de/pgrn/streaming/watch/971749/3-10000-1-1-1-X.ism/rtlplus.mpd
3) --> licence url: https://rtlplus-widevine.streamingtech.de/index/rtlplus
Then I edited the headers.py with the x-auth-token show in the headers of the POST https://rtlplus-widevine.streamingtech.de/index/rtlplus:
[Attachment 88706 - Click to enlarge]
(scolling down a little to the x-auth-token:
[Attachment 88707 - Click to enlarge]
4) My headers.py:
Code:import requests headers = { 'x-auth-token': 'eyJhbGciO...', } params = ( ('platform', 'BROWSER'), ('type', 'MOVIE'), ) # params inserted below will be passed to data-raw token = 'PFYtFSqWMYIROJYywBp0rbKvpD3z6N6E6UezNrZmCeKHkcJ5BiH4J8qwO0kfWOmrSsyFJMg9OqKKEwvuQiXL4qdDTa6ZYplNV9IQt6eEuveglDxjVlYd0vAecS5TZKn5mIs01YxcYNlTC7tu3BIk63JhMykMWEMmj1oEqaLa7N3ZrfU2VTlEPaWXBQV6PxnFeD022Yi298GOX/lDik7sXt5u4duT0aKIYbz0HPmjoh8b9Uy8bvzJUa0/SlgRcsW8RNTNjRJHM6N7BESCBGFEZcWoSXeDLEblEfRoBKro2iDGB1neLfRdY1fj7tJX1Rn9lj+OJwRTrBV4XoTQFuSsFwvYCeQfkAoRHXnze9njI5pY7sYgIGxuM4Zh3Wqaps6kxdO53QMm0jJ/L41X6r5CikSGKQ3Rcps8eQccZb9svEuyXMof2nm+eYL+AVPPrfmAf/BrmUHfiuF9CmNsF9pI7PjJfLeASmh3KDI/5gUuC4uJB7rjTzHVWNRz8MSvYjJ37/5V9+FTihpu04+0jFZ1AlGRks2dzk2IGvm5WcwUhsW2l/oQXlh7AgsksIl2DT0wH11WeG+h1/ijymMcG9AZzsxtkC53eLJ8bl55/Aag0TJfX4N6KvV7UhglXxkLifb06bLK/wlcGCfb01b4cnngcjPJEMxh2+Q7sJSnbyrtsfodzNah8JXITmx5kTkFFZkdtga1ha9jAb+Z40VMQfbrCLgh0GEe2G3VczcIt8QHAWAeS91TkzLbMRAugbgLvdbI8yQXtM15uo+TXrV4PNFprug33AnvnQu7IpNxlmgPMZhEn4Qqc/V++OFIpz/JYEMnLFvjYcXE2+sPc4uKnoE0xk33+IgZKtWtDhxRg2SJKyKOYxXucXybUuqPP/d+Nq1VNhD84Of+EfVvBjs1u75pNz/kmu5ms9ppRMkafq0/2311hbYi6VXmp6AeJweGJWkGKEFxw7xADuC8iM7xWnXW5aiNvhbsXBOwuTK8b2ioxjrg6OFhiMck+z9M5FHg+ktY7YB8iY+0V6B/Op2cQGtLaZ2E9lsomlQpxL+LiPI7UWEqmALEGH/Pk5tdLnlFRjEk2PPc8YURw+/nkP9tqJ/AXQwaXc9iwC5yxlYPCsp/Tc4=' provider = 'kakaotv' releasePid = "_qVpiY31v_oU" #response = requests.post('https://rtlplus-widevine.streamingtech.de/index/rtlplus', headers=headers, cookies=cookies, data=data) response = requests.post('https://rtlplus-widevine.streamingtech.de/index/rtlplus', headers=headers) # print(f'{chr(10)}widevine_license: {response.content}') #NB. Original query string below. It seems impossible to parse and #reproduce query strings 100% accurately so the one below is given #in case the reproduced version is not "correct". # response = requests.options('https://api.ott.kinopoisk.ru/v12/license-affected-content-metadata?contentIds=4b63db58ab27e92b90a457e533b00007&serviceId=25', headers=headers) # dash-cenc/hdr10_uhd_hevc_ec3.mpd # https://strm.yandex.ru/vh-ottenc-converted/vod-content/4315082489d87677b21f7c83593fcb73/8614535x1631802676x41611665-4e76-41ac-93a7-5070b77b5f3c/dash-cenc/sdr_uhd_hevc_ec3.mpd # 'GET /certificate HTTP/1.1'
In the requests.post I removed the cookies=cookies and data=data as later on the l3.py crashed.
With the cookies I get this error:
Code:Traceback (most recent call last): File "C:\Users\Marcel\Downloads\tmp\widevine_keys\l3.py", line 8, in <module> import headers File "C:\Users\Marcel\Downloads\tmp\widevine_keys\headers.py", line 17, in <module> response = requests.post('https://rtlplus-widevine.streamingtech.de/index/rtlplus', headers=headers, cookies=cookies, data=data) NameError: name 'cookies' is not defined
I get this error:
Code:Input MPD URL: https://vodnowusoawsdash-cf.tvnow.de/pgrn/streaming/watch/971749/3-10000-1-1-1-X.ism/rtlplus.mpd License URL: https://rtlplus-widevine.streamingtech.de/index/rtlplus PSSH obtained. AAAAUHBzc2gAAAAA7e+LqXnWSs6jyCfc1R0h7QAAADAIARIgNDQyNDZlNjUzMTNhNjk3N2I1MjA3ZDY3MzVhNjkyZTQiBjk3MTc0OSoCU0Q= license response status: <Response [404]> server reports: {"error":"invalid.meta.data.INVALID_LICENSE_CHALLENGE.100)","errorCode":12400,"origin":"google"} server did not issue license, make sure you have correctly pasted all the required headers in the headers.py. Also check json/raw params of POST request.
Last edited by Marcel; 13th Sep 2025 at 13:09.
-
@Obo
@larley
Thank you very much for the links and for the keys, respectively. However, due to random, I have tried the links from @lostion first, and they worked at once, so I didn't try yours in addition.
@Lostion
As always, thank you very much! Your links and keys worked like a charm - no fiddling around. Next weekend I'll probably ask for the next two Schlefaz episodes -
Hi Marcel,
I really can't tell you what the problem is. Nevertheless, I perhaps have a solution for you:
Personally, my motivation to play around with Python code is quite limited; I just want the stuff to be on my disk. Therefore, a while ago, I have searched for a more usable solution and have found something that is called `hellyes`. Watch out out for version 5 (hellyes5). It is a ZIP archive that (among a lot of other stuff) contains a python script with "...gui..." in its name.
This is what you may be after. If you execute it, a minimal GUI appears where you enter the MPD URL in the first field and the license request URI in the second field, and it does the rest automatically. I always had success with it as long as I had the correct MPD and license URI. I didn't test it with anything else than RTL plus so far, though, because I am only interested in the Schlefaz show.
Two things to note:
1. Before you start the script mentioned above, you must activate the correct virtual environment that's in the helleys5 directory. Otherwise, the script may throw errors and may not start at all (depending on your Python installation).
2. I believe that your license URI is wrong. I haven't used all that stuff for a longer time now, but I eventually remember that the license URI usually contains a lot of parameters and thus is several hundreds of characters long. In contrast, your URI is just a URL without any parameters. I may be wrong, so it would probably a good idea to learn how to extract the license URI the correct way.
Have fun, and a nice Sunday!Last edited by 4L7zHhiyQO3Thui6; 14th Sep 2025 at 06:37.
-
Hi 4L7zHhiyQO3Thui6,
thanks for the hint, it's working now. You were right, the problem was the url of the licence.
I will play around with it a little more and then come back and give an update.
Thanks again and have a nice rest of the sunday -
Code:
https://rtlplus-widevine.streamingtech.de/index/rtlplus
No idea about the python code above. -
you only need to pass x-auth-token in pywidevine script
Code:def decrypt_content(pssh, license_url, token): try: pssh_obj = PSSH(pssh) device = Device.load(DEVICE_PATH) cdm = Cdm.from_device(device) session_id = cdm.open() challenge = cdm.get_license_challenge(session_id, pssh_obj) headers = { 'x-auth-token': token, } session = requests.Session() licence_response = session.post( license_url, data=challenge, headers=headers ) licence_response.raise_for_status() licence = licence_response.content cdm.parse_license(session_id, licence) returned_keys = [] print("\nKeys :") for key in cdm.get_keys(session_id): if key.type != "SIGNING": key_string = f"{key.kid.hex}:{key.key.hex()}" returned_keys.append(key_string) print(f" --key {key_string}") cdm.close(session_id)
Similar Threads
-
Downloading videos from RTL
By Data2006 in forum Video Streaming DownloadingReplies: 17Last Post: 30th Jul 2024, 00:32 -
DOWNLOAD protected DRM video separated video and audio from (learnyst)
By yassin in forum Video Streaming DownloadingReplies: 4Last Post: 8th Jan 2024, 04:36 -
First try with RTL+/TVNow
By resonator79 in forum Video Streaming DownloadingReplies: 3Last Post: 23rd Feb 2023, 06:41 -
How can I download videos from play.rtl.hr?
By Nintendo Custom in forum Video Streaming DownloadingReplies: 23Last Post: 24th May 2022, 12:51 -
Download HLS video using FFMPEG with separate video and audio URLs?
By oschrndz in forum Video Streaming DownloadingReplies: 2Last Post: 15th Dec 2020, 13:53