VideoHelp Forum





Try StreamFab Downloader and download streaming video from Netflix, Amazon!



+ Reply to Thread
Page 7 of 8
FirstFirst ... 5 6 7 8 LastLast
Results 181 to 210 of 220
  1. Code:
    MPD: https://vodnowusoawsdash-a.akamaihd.net/pgrn/streaming/watch/946662/1-10000-1-1-1-X.ism/rtlplus.mpd
    Key: c20cb5f427d2294ccd92e57d195166e5:2a250cffd2157c685efed20d1abc241b
    best CBR version.
    Quote Quote  
  2. Hello,
    I'm having a problem with the following video:
    https://plus.rtl.de/die-geissens-eine-schrecklich-glamourose-fami-p_10990/video/robert...uroese-familie

    I'm getting the following error:

    09:13:01.260 WARN: [h264 @ 00000162351f8e80] top block unavailable for requested intra mode -1
    09:13:01.261 WARN: [h264 @ 00000162351f8e80] error while decoding MB 0 0, bytestream 153456

    The resulting MKV file has fine audio, but the video is unwatchable.

    Does anyone have any ideas on how I can fix this?

    N_m3u8DL-RE.exe "https://origin.vod.rtlde.bedrock.tech/rtlde/output/8/e/b/8ebb15d54ea415094452a19c38d4e6e034485e0a/static/1939898_9ce32c2b223ba026d61d6c05bcecfb8e_web_dash_ upTo1080p_1080p_vbr_cae_drm_hardware.mpd" --key 7dd97bd3e9895c2b8224c3a8a192f643:c3d91f318d7a53ddb 5c7d7db18079eff --save-dir "media\plus_rtl_de" --save-name "Die Geissens - Eine schrecklich glamouröse Familie 24-27 Robert unterm Messer" -M format=mkv
    09:10:57.514 INFO : N_m3u8DL-RE (Beta version) 20251029
    09:10:57.517 INFO : Loading URL: https://origin.vod.rtlde.bedrock.tech/rtlde/output/8/e/b/8ebb15d54ea415094452a19c38d4e...m_hardware.mpd
    09:10:57.602 INFO : Content Matched: Dynamic Adaptive Streaming over HTTP
    09:10:57.603 INFO : Parsing streams...
    09:10:57.667 WARN : Writing meta json
    09:10:57.681 INFO : Extracted, there are 7 streams, with 6 basic streams, 1 audio streams, 0 subtitle streams
    09:10:57.683 INFO : Vid *CENC 1920x1080 | 6994 Kbps | video=6994619 | avc1.640029 | 1019 Segments | Main | ~43m28s
    09:10:57.684 INFO : Vid *CENC 1920x1080 | 4343 Kbps | video=4343436 | avc1.640028 | 1019 Segments | Main | ~43m28s
    09:10:57.692 INFO : Vid *CENC 1280x720 | 2350 Kbps | video=2350386 | avc1.64001F | 1019 Segments | Main | ~43m28s
    09:10:57.695 INFO : Vid *CENC 1024x576 | 1436 Kbps | video=1436806 | avc1.64001F | 1019 Segments | Main | ~43m28s
    09:10:57.695 INFO : Vid *CENC 1024x576 | 797 Kbps | video=797548 | avc1.64001F | 1019 Segments | Main | ~43m28s
    09:10:57.696 INFO : Vid *CENC 640x360 | 419 Kbps | video=419139 | avc1.42C01E | 1019 Segments | Main | ~43m28s
    09:10:57.696 INFO : Aud audio1=96000 | 96 Kbps | mp4a.40.2 | deu | 2CH | 1019 Segments | Main | ~43m28s
    09:11:23.515 INFO : Parsing streams...
    09:11:23.528 INFO : Selected streams:
    09:11:23.529 INFO : Vid *CENC 1920x1080 | 6994 Kbps | video=6994619 | avc1.640029 | 1019 Segments | Main | ~43m28s
    09:11:23.529 INFO : Aud audio1=96000 | 96 Kbps | mp4a.40.2 | deu | 2CH | 1019 Segments | Main | ~43m28s
    09:11:23.530 WARN : Writing meta json
    09:11:23.533 INFO : Save Name: Die Geissens - Eine schrecklich glamour├Âse Familie 24-27 Robert unterm Messer
    09:11:23.534 WARN : MuxAfterDone is detected, binary merging is automatically enabled
    09:11:23.535 INFO : Start downloading...Vid 1920x1080 | 6994 Kbps | video=6994619 | avc1.640029 | Main
    09:11:23.555 WARN : Type: cenc
    09:11:23.555 WARN : PSSH(WV): CAESEHPETU8E41XurFCFU2VBS1kiJGV5SmhjM05sZEVsa0lqb2 lZMnhwY0Y4eE9UTTVPRGs0SW4wPQ==
    09:11:23.556 WARN : KID: 73c44d4f04e355eeac50855365414b59
    09:11:23.557 WARN : Reading media info...
    09:11:23.579 INFO : [0x1]: Video, h264 (avc1), 1920x1080
    09:12:57.820 INFO : Binary merging...
    09:12:59.215 WARN : Type: cenc
    09:12:59.216 WARN : PSSH(WV): CAESEHPETU8E41XurFCFU2VBS1kiJGV5SmhjM05sZEVsa0lqb2 lZMnhwY0Y4eE9UTTVPRGs0SW4wPQ==
    09:12:59.217 WARN : KID: 73c44d4f04e355eeac50855365414b59
    09:12:59.231 INFO : Decrypting using MP4DECRYPT...
    09:12:59.232 INFO : Start downloading...Aud audio1=96000 | 96 Kbps | mp4a.40.2 | deu | 2CH | Main
    09:12:59.251 WARN : Reading media info...
    09:12:59.300 INFO : [0x1]: Audio, aac (mp4a), 96 kb/s
    09:13:00.987 INFO : Binary merging...
    09:13:01.138 WARN : Die Geissens - Eine schrecklich glamour├Âse Familie 24-27 Robert unterm Messer.mp4
    09:13:01.139 WARN : Die Geissens - Eine schrecklich glamour├Âse Familie 24-27 Robert unterm Messer.deu.m4a
    09:13:01.139 WARN : Muxing to Die Geissens - Eine schrecklich glamour├Âse Familie 24-27 Robert unterm Messer.MUX.mkv
    09:13:01.260 WARN : [h264 @ 00000162351f8e80] top block unavailable for requested intra mode -1
    09:13:01.261 WARN : [h264 @ 00000162351f8e80] error while decoding MB 0 0, bytestream 153456
    09:13:03.699 WARN : Cleaning files...
    09:13:04.074 INFO : Done
    Quote Quote  
  3. Code:
    Decryption Key: 73c44d4f04e355eeac50855365414b59:fe5921e82735589a95a66b1dd0d9ceb7
    Quote Quote  
  4. how is the new licenseurl from the new rtlplus?
    Quote Quote  
  5. The hardware urls now need Widevine L1 lol crazy for this shit type of content.
    Quote Quote  
  6. :ROTFLOL:

    Probably in preparation of integration of Sky Germany after their deal was approved...
    Quote Quote  
  7. Member MartinTH's Avatar
    Join Date
    Oct 2024
    Location
    Germany
    Search PM
    @Lostion Do you have the new License URL and MPD URL with best Bitrate ?

    The Bitrates of the MPD-Links in the Browser are quite low.
    Quote Quote  
  8. Hello dear Video-professionals.

    I tried to get https://plus.rtl.de/inside-aida-die-geheimnisse-des-kreuzfahrtgiganten-p_70558 but had no luck.
    All this hitech computer stuff is so confusing - i miss the old VHS days...

    Can anybody of you help or guide me to get just a playable video file of that documentation?

    Have a nice evening
    Quote Quote  
  9. Code:
    ---------------------------------------------------------------------------------
    MPD URL: https://vodnowusoawsdash-a.akamaihd.net/pgrn/streaming/watch/1063208/0-10000-1-1-1-X.ism/rtlplus.mpd
    ---------------------------------------------------------------------------------
    Decryption Key: f19dbc170e3fac3fa1eef810c5ba01a4:cd611f5e6b2c535346260d65ad2434d1
    ---------------------------------------------------------------------------------
    Have Fun.
    Quote Quote  
  10. Member MartinTH's Avatar
    Join Date
    Oct 2024
    Location
    Germany
    Search PM
    Originally Posted by Lostion View Post
    Code:
    ---------------------------------------------------------------------------------
    MPD URL: https://vodnowusoawsdash-a.akamaihd.net/pgrn/streaming/watch/1063208/0-10000-1-1-1-X.ism/rtlplus.mpd
    ---------------------------------------------------------------------------------
    Decryption Key: f19dbc170e3fac3fa1eef810c5ba01a4:cd611f5e6b2c535346260d65ad2434d1
    ---------------------------------------------------------------------------------
    Have Fun.
    How did you get the Video ID?

    Please briefly explain how to get it.
    Quote Quote  
  11. Originally Posted by Lostion View Post
    Code:
    ---------------------------------------------------------------------------------
    MPD URL: https://vodnowusoawsdash-a.akamaihd.net/pgrn/streaming/watch/1063208/0-10000-1-1-1-X.ism/rtlplus.mpd
    ---------------------------------------------------------------------------------
    Decryption Key: f19dbc170e3fac3fa1eef810c5ba01a4:cd611f5e6b2c535346260d65ad2434d1
    ---------------------------------------------------------------------------------
    Have Fun.
    Thanks a lot! It worked.

    If its not too much trouble - could you tell how you did this? (Its a bit of black magic to me )
    Quote Quote  
  12. Use:
    https://github.com/nilaoda/N_m3u8DL-RE

    Code:
    N_m3u8DL-RE "https://vodnowusoawsdash-a.akamaihd.net/pgrn/streaming/watch/1063208/0-10000-1-1-1-X.ism/rtlplus.mpd" --key f19dbc170e3fac3fa1eef810c5ba01a4:cd611f5e6b2c535346260d65ad2434d1
    Quote Quote  
  13. Member MartinTH's Avatar
    Join Date
    Oct 2024
    Location
    Germany
    Search PM
    Originally Posted by Lostion View Post
    Use:
    https://github.com/nilaoda/N_m3u8DL-RE

    Code:
    N_m3u8DL-RE "https://vodnowusoawsdash-a.akamaihd.net/pgrn/streaming/watch/1063208/0-10000-1-1-1-X.ism/rtlplus.mpd" --key f19dbc170e3fac3fa1eef810c5ba01a4:cd611f5e6b2c535346260d65ad2434d1
    I think we would all like to know how you get the Video ID for the MPD URL.

    Since the Website changeover, the Video IDs no longer match with the old MPD URLs.

    But apparently you can get other Video IDs from the Website.

    Update: I've now figured out the Trick myself
    Last edited by MartinTH; 8th May 2026 at 16:52.
    Quote Quote  
  14. Heya,

    In the past I used a simple script which calls widefrog and downloaded the "Gute Zeiten, Schlechte Zeiten" and "Alles was zählt"-Daily-Soaps for my wife (only the free ones it did not download yet).
    Since the change of the rtl.plus.de page this ("of course") does no longer work. It relies on graphql-stuff etc.

    Using WideVineProxy2 works though - gives me some N_m3u8DL-RE command and most important the proper key-combination.


    Now here people asked for keys to a video (this "Inside Aida" thing). The question for me is HOW to retrieve the key (which scripts/tools are used to do so)?
    I even registered at the rtl-page and visited the specific "Inside Aida" website (you linked earlier) but did not even have a "play" button or so.


    The Stream-"ID" can be extracted by just checking the sources:
    -> \"assetid\":\"rrn_watch_videohub_movie_1063208\ "

    So I here eg could extract the ID (106308) and glue it together to the vodnow...akamaihd.net-link.
    But I still miss the way on how to retrieve fitting keys.

    ---

    Back to the daily soaps: Of course I can extract the video/stream ID for the series episodes this way too. But it is not enough to adjust the command for N_m3u8DL-RE by replacing the mpd-url in the one the widevine2 proxy browser addon gave me. Keys are for the "other one" (in this case the 576p variant).


    TL/DR:
    @MartinTH you wrote "I've now figured out the Trick myself": would be nice to reply what tricks you are using to download (guess you do a similar thing to extract the video IDs). But how do you find out the actually to use keys/kid? You wrote pages earlier, you use a custom script - guess you auth at rtl and then execute some "magic commands" doing the grunt work. Would be nice if you could paste a snippet to here.


    @Lostion: Could you please describe what tools you use to get your "output" ("MPD Url", "Decryption Key") - and if the tools do not come with a "setup guide" (or are self-explanatory for "average joe"-coders/guys) it would be super helpful if you could give some "first steps" aid (or a link to an existing guide). As said: I have the urls (eg. https://plus.rtl.de/alles-was-zahlt-p_11229) and I have my login data (if that was required - but guess it should do as a guest user too)



    Thanks in Advance.
    Quote Quote  
  15. Originally Posted by CestMoi View Post
    Heya,

    In the past I used a simple script which calls widefrog and downloaded the "Gute Zeiten, Schlechte Zeiten" and "Alles was zählt"-Daily-Soaps for my wife (only the free ones it did not download yet).
    Since the change of the rtl.plus.de page this ("of course") does no longer work. It relies on graphql-stuff etc.

    Using WideVineProxy2 works though - gives me some N_m3u8DL-RE command and most important the proper key-combination.


    Now here people asked for keys to a video (this "Inside Aida" thing). The question for me is HOW to retrieve the key (which scripts/tools are used to do so)?
    I even registered at the rtl-page and visited the specific "Inside Aida" website (you linked earlier) but did not even have a "play" button or so.


    The Stream-"ID" can be extracted by just checking the sources:
    -> \"assetid\":\"rrn_watch_videohub_movie_1063208\ "

    So I here eg could extract the ID (106308) and glue it together to the vodnow...akamaihd.net-link.
    But I still miss the way on how to retrieve fitting keys.

    ---

    Back to the daily soaps: Of course I can extract the video/stream ID for the series episodes this way too. But it is not enough to adjust the command for N_m3u8DL-RE by replacing the mpd-url in the one the widevine2 proxy browser addon gave me. Keys are for the "other one" (in this case the 576p variant).


    TL/DR:
    @MartinTH you wrote "I've now figured out the Trick myself": would be nice to reply what tricks you are using to download (guess you do a similar thing to extract the video IDs). But how do you find out the actually to use keys/kid? You wrote pages earlier, you use a custom script - guess you auth at rtl and then execute some "magic commands" doing the grunt work. Would be nice if you could paste a snippet to here.


    @Lostion: Could you please describe what tools you use to get your "output" ("MPD Url", "Decryption Key") - and if the tools do not come with a "setup guide" (or are self-explanatory for "average joe"-coders/guys) it would be super helpful if you could give some "first steps" aid (or a link to an existing guide). As said: I have the urls (eg. https://plus.rtl.de/alles-was-zahlt-p_11229) and I have my login data (if that was required - but guess it should do as a guest user too)



    Thanks in Advance.
    Hello, you can obtain the video keys; you have several options:
    WideVineProxy2
    https://forum.videohelp.com/threads/416316-%5BRelease%5D-WidevineProxy2-Extension-Bypa...s-Lic-wrapping
    Vineless
    https://github.com/Ingan121/Vineless
    Widevine
    https://pypi.org/project/pywidevine/

    Then, using Widevine, you can extract the pssh code from the MPD and copy the license from F12 DevTools Network Search: regexp:widevine|acquire|license|drm|licence|mpd
    Quote Quote  
  16. Thanks for the swift reply - as written in the message you have cited: I am using WideVineProxy2 already. But there I only get the keys for the 576p variant. They do not work for the "akamai"-links (which seem to be the same for all - except the videoID).

    (I also tried the regexp stuff - the licence url seems to be h***s://lic.drmtoday.c**/license-proxy-widev***/cenc/ ) - I copied the post data as curl-command (some scripts like Hellyes accept it) but it fails to handle the 1080p stuff.


    So I can extract the video/streamID, mangle the akamai-link and download it - but to decode I need the corresponding key/kid/... stuff.


    And my question is - and was - how to retrieve these keys (for 1080p).
    In addition any "scriptable" solution (not a browser extension) would be helpful too - as I would prefer to automate downloading (run once a week, download the week's episodes if they are not on disc already) as I did with widefrog.py.


    Thanks in advance.
    Quote Quote  
  17. Old and new endpoints have different license servers.

    But old endpoints are gone soon so makes no sense to build a new script for it.
    Quote Quote  
  18. Originally Posted by CestMoi View Post
    Thanks for the swift reply - as written in the message you have cited: I am using WideVineProxy2 already. But there I only get the keys for the 576p variant. They do not work for the "akamai"-links (which seem to be the same for all - except the videoID).

    (I also tried the regexp stuff - the licence url seems to be h***s://lic.drmtoday.c**/license-proxy-widev***/cenc/ ) - I copied the post data as curl-command (some scripts like Hellyes accept it) but it fails to handle the 1080p stuff.


    So I can extract the video/streamID, mangle the akamai-link and download it - but to decode I need the corresponding key/kid/... stuff.


    And my question is - and was - how to retrieve these keys (for 1080p).
    In addition any "scriptable" solution (not a browser extension) would be helpful too - as I would prefer to automate downloading (run once a week, download the week's episodes if they are not on disc already) as I did with widefrog.py.


    Thanks in advance.
    The problem is not with the key but with the mpd file; you need to check with N_M3U8DL-RE "URL_MPD" what format it is in; the key works on all video formats.

    After placing the order, you can add: -sv best -sa best
    Last edited by sesamap159; 9th May 2026 at 04:44.
    Quote Quote  
  19. He tries to get keys for the old endpoint and not the new one. Old and new endpoints are using different keys so widevineproxy2 will not work. Also some licensed series aren't 1080p in browser so widevineproxy2 will only output the 1024x576 variant.
    Quote Quote  
  20. Originally Posted by Lostion View Post
    But old endpoints are gone soon so makes no sense to build a new script for it.
    A pity. The 576p variants often look awkwardly compressed - maybe my brain is already wired so hard to FHD and 4K (I am not watching RTL or "TV" in general) that it just looks odd. But I simply compared the 576p to the SD-Records my wife normally does with her old (but trusted) usb-thumb-drive-record-device. We do not pay for "HD" content on our cable contract - so SD only. She is fine with it.


    @sesamap159
    Lostion is right, I was interested in getting the "old" endpoints to work.


    Generally I looking for some "convenient" script which I can use to feed with some stuff "extractable" right from a movie/show/series page - so eg video IDs (if there was some "simple formula" to transform it into an mpd-url, I could write that on my own). This is why I was asking @Lostion, how what they do to spit out these nicely using "MPD Url" and "Licence Key"-lines. And what "manual labor" they have to provide to the scripts.

    As I am not interested in other "RTL media" than the two series, I would happily "hardcode" a lot of stuff in a script (things specific to the shows, but not changing between episodes etc). The less "magic" happens (sending out requests, doing challenges, ...) the better.


    Enjoy your weekends.
    Thanks.
    Last edited by CestMoi; 9th May 2026 at 06:47.
    Quote Quote  
  21. What did I do wrong? I am getting the following error message.

    Code:
    python rtl.py 
    Traceback (most recent call last):
      File "/home/tvhuser/rtl.py", line 24, in <module>
        licence.raise_for_status()
        ~~~~~~~~~~~~~~~~~~~~~~~~^^
      File "/usr/lib/python3.14/site-packages/requests/models.py", line 1028, in raise_for_status
        raise HTTPError(http_error_msg, response=self)
    requests.exceptions.HTTPError: 403 Client Error: Forbidden for url: https://rtlplus-widevine.streamingtech.de/license/rtlplus
    I wanted to download the video:
    Code:
    https://plus.rtl.de/moonfall-p_1745
    These are the data I used.
    Code:
    https://vodnowusoawsdash-a.akamaihd.net/pgrn/streaming/watch/892519/0-10000-1-1-1-X.ism/rtlplus.mpd
    AAAAUHBzc2gAAAAA7e+LqXnWSs6jyCfc1R0h7QAAADAIARIgN2QxMjc2NzE5YTM4OTBmMDI5OWU4MGE1YzAyOTdjYzciBjg5MjUxOSoCU0Q=
    https://rtlplus-widevine.streamingtech.de/license/rtlplus
    rtl.py
    Code:
    from pywidevine.cdm import Cdm
    from pywidevine.device import Device
    from pywidevine.pssh import PSSH
    
    import requests
    
    # prepare pssh
    pssh = PSSH("AAAAUHBzc2gAAAAA7e+LqXnWSs6jyCfc1R0h7QAAADAIARIgN2QxMjc2NzE5YTM4OTBmMDI5OWU4MGE1YzAyOTdjYzciBjg5MjUxOSoCU0Q=")
                 
    # load device
    device = Device.load("/Downloads/device.wvd")
    
    # load cdm
    cdm = Cdm.from_device(device)
    
    # open cdm session
    session_id = cdm.open()
    
    # get license challenge
    challenge = cdm.get_license_challenge(session_id, pssh)
    
    # send license challenge (assuming a generic license server SDK with no API front)
    licence = requests.post("https://rtlplus-widevine.streamingtech.de/license/rtlplus", data=challenge)
    licence.raise_for_status()
    
    # parse license challenge
    cdm.parse_license(session_id, licence.content)
    
    # print keys
    for key in cdm.get_keys(session_id):
        print(f"[{key.type}] {key.kid.hex}:{key.key.hex()}")
    
    # close session, disposes of session data
    cdm.close(session_id)
    Thank you very much
    Quote Quote  
  22. Code:
    ---------------------------------------------------------------------------------
    MPD URL: https://vodnowusoawsdash-a.akamaihd.net/pgrn/streaming/watch/892519/0-10000-1-1-1-X.ism/rtlplus.mpd
    ---------------------------------------------------------------------------------
    PSSH: AAAAUHBzc2gAAAAA7e+LqXnWSs6jyCfc1R0h7QAAADAIARIgN2QxMjc2NzE5YTM4OTBmMDI5OWU4MGE1YzAyOTdjYzciBjg5MjUxOSoCU0Q=
    ---------------------------------------------------------------------------------
    License URL: https://rtlplus-widevine.streamingtech.de/license/rtlplus
    ---------------------------------------------------------------------------------
    Decryption Key: 7d1276719a3890f0299e80a5c0297cc7:7d1900c0c6d6ce4aa30efd2ffe8bd51f
    ---------------------------------------------------------------------------------
    Output Name: moonfall
    ---------------------------------------------------------------------------------
    Have Fun.
    Quote Quote  
  23. i used vineless to get playready key on edge and useragent and it works.
    Quote Quote  
  24. which useragent? i use also vineless but seems i am getting wrong PSSH and keys since the new website
    so decrypting only working for 576p.
    Quote Quote  
  25. It has nothing to do with the useragent you don't need any for license request nor for the normal API request.
    Quote Quote  
  26. Originally Posted by Lostion View Post
    Code:
    ---------------------------------------------------------------------------------
    MPD URL: https://vodnowusoawsdash-a.akamaihd.net/pgrn/streaming/watch/892519/0-10000-1-1-1-X.ism/rtlplus.mpd
    ---------------------------------------------------------------------------------
    PSSH: AAAAUHBzc2gAAAAA7e+LqXnWSs6jyCfc1R0h7QAAADAIARIgN2QxMjc2NzE5YTM4OTBmMDI5OWU4MGE1YzAyOTdjYzciBjg5MjUxOSoCU0Q=
    ---------------------------------------------------------------------------------
    License URL: https://rtlplus-widevine.streamingtech.de/license/rtlplus
    ---------------------------------------------------------------------------------
    Decryption Key: 7d1276719a3890f0299e80a5c0297cc7:7d1900c0c6d6ce4aa30efd2ffe8bd51f
    ---------------------------------------------------------------------------------
    Output Name: moonfall
    ---------------------------------------------------------------------------------
    Have Fun.

    I asked for it already in my last posts: would you please be so kind to post what tool you use here, and what input it requires (in the sense of what you pass to it to get the output).
    Would help the people to resolve their requests on their own (aka downloading what they want to download) instead of having to play "beggars" to get some keys.
    (eg the user asked what is wrong with his script - and the reply is the keys. Might help them, but only for this particular issue)


    Edit: with "https://lic.drmtoday.com/license-proxy-widevine/cenc" as licence server (576p output for my "GZSZ" episodes) you always need a fresh "x-dt-auth-token" in the headers-part. The token is only valid for some minutes.
    So for this one it seems you need to find a way to (automatically) retrieve a "current" token (valid for the upcoming request).
    Once you got it, you can retrieve the keys-combination which is no longer requiring a token (that token is just to validate the drm-requests)
    For the time being you can retrieve it via the post-params of the drmtoday-post-request you can fetch when opening up the dev bar when trying to play back the video ... not convenient. Would be nice if something could automate the "process" (or shortcut it) and retrieve the current token.

    "Old" "https://rtlplus-widevine.streamingtech.de/license/rtlplus" might work differently - they require other data. Guess it is hard to retrieve the information based on what the _current_ mediathek service offers.


    If @Lostion uses a different licence-server, then it might allow different ways to work with - this is why I asked what they use, and what they pass to it (input data). And if the input data is something "user specific", how to retrieve the data.


    Thanks.
    Last edited by CestMoi; 12th May 2026 at 01:56.
    Quote Quote  
  27. i figured out:
    rtl uses software and hardware mpd links.
    hardware mpd links for some series/movies, you cant select 720/1080p in the browserplayer, affected the current and next episodes
    so if you can select 720/1080p its software mpd link and works with vineless/WideVineProxy2 for me.
    they have some issues oder it takes some days until its fixed.

    EDIT:
    checked rtl community and read some threads and issue is known and they working on it.
    Last edited by ginko; 12th May 2026 at 04:56.
    Quote Quote  
  28. Maybe this is of use for someone -- the following part allows for automated retrieval of the keys (and thus executing the N_3mu8DL-RE-tool etc).

    In essence it follows what the browser does except for the retrieval of 2 tokens, you need to copy them on your own from the web-dev-bar in your browser (there is surely a way to do differently, but the tokens seem to be valid for quite some time here)

    I base the code on "allhell3.py" and simply placed my stuff in the "main"-part. so copy allhell3.py, and adjust accordingly (some functions are obsolete then)
    Code:
        # === IMPORTANT ===
        # 1) open https://plus.rtl.de/gute-zeiten-schlechte-zeiten-p_10463/video/zu-viel-des-guten-c_1933680
        # 2) observe web dev bar - first hit (here blocked by ublock origin):
        #    https://heartbeat-v2.rtlde.bedrock.tech/v2/platforms/m6group_web/notify/view?authorization=eyJ0 ... .. &customerName=rtlde&clientRelease=6.41.2
        #    -> authorization => xBedrockToken
        # 3) filter web dev bar: "front-auth"
        #    https://front-auth.rtlde.bedrock.tech/v2/rtlde/platforms/m6group_web/token
        #    -> Authorization ("Bearer ey...") => authorizationBearer
        xBedrockToken = "eyJ ..."
        authorizationBearer = "Bearer eyJ ..."
    
        video_page_url = "https://plus.rtl.de/gute-zeiten-schlechte-zeiten-p_10463/video/zu-viel-des-guten-c_1933680"
        mpd_url = ""
    
    
        import requests
        import re
        import json
    
        # extract mpd link from website
        # sample old mpd_url = "https://vodnowusoawsdash-a.akamaihd.net/pgrn/streaming/watch/1002038/0-10000-1-1-1-X.ism/rtlplus.mpd"
        # sample new mpd_url = "https://origin.vod.rtlde.bedrock.tech/rtlde/output/5/7/1/571.../static/1933680_25ed..._web_dash_upTo576p_576p_vbr_cae_drm_software.mpd"
        html = requests.get(video_page_url).text
        match = re.search(r'\\"path\\":\\"(https:[^"]+?\.mpd[^"]*)\\"', html)
        if match:
            encoded_mpd_url = match.group(1)
            mpd_url = json.loads(f'"{encoded_mpd_url}"')
        else:
            print("No MPD-URL extracted")
            exit()
    
        # fetch pssh
        mpd_content = requests.get(mpd_url).text
        if (mpd_content):
            pssh = extract_or_generate_pssh(mpd_content)
            print("Extracted or generated PSSH:", pssh)
        else:
            print("Failed to fetch or parse MPD content.")
            
    
    
        # fetch auth token
        # - extract clip id from url
        #   ex: https://plus.rtl.de/gute-zeiten-schlechte-zeiten-p_10463/video/zu-viel-des-guten-c_1933680
        #       clip id = 1933689
        match = re.search(r"-c_(\d+)", video_page_url)
        clip_id = match.group(1) if match else None
    
        token_url ="https://drm.rtlde.bedrock.tech/v1/customers/rtlde/platforms/m6group_web/services/video_tv/users/guest/videos/clip_" + clip_id + "/upfront-token"
        headers = {
            "User-Agent": "Mozilla/5.0 (X11; Linux x86_64; rv:148.0) Gecko/20100101 Firefox/148.0",
            "Accept": "*/*",
            "Accept-Language": "de,en-US;q=0.9,en;q=0.8",
            "Request-Timeout": "10000",
            "X-Customer-Name": "rtlde",
            "X-Client-Release": "6.41.2",
            "X-Bedrock-Token": xBedrockToken,
            "Sec-Fetch-Dest": "empty",
            "Sec-Fetch-Mode": "cors",
            "Sec-Fetch-Site": "cross-site",
            "Authorization": authorizationBearer,
            "Priority": "u=4",
            "Pragma": "no-cache",
            "Cache-Control": "no-cache",
            "referrer": "https://plus.rtl.de/", #sic! refe_rr_er
        }
    
        auth_token = ""
        if auth_token == "":
            token_response = requests.get(token_url, headers=headers)
            if token_response.ok:
                auth_token = token_response.json().get("token")
    
    
        #do license challenge
        lic_url = "https://lic.drmtoday.com/license-proxy-widevine/cenc/"
        method = "POST"
        headers = {
            "User-Agent": "Mozilla/5.0 (X11; Linux x86_64; rv:148.0) Gecko/20100101 Firefox/148.0",
            "Accept": "*/*",
            "Accept-Language": "de,en-US;q=0.9,en;q=0.8",
            "Accept-Encoding": "gzip, deflate, br, zstd",
            "Referer": "https://plus.rtl.de/",
            "x-dt-auth-token": auth_token,
            "Origin": "https://plus.rtl.de",
            "Sec-Fetch-Dest": "empty",
            "Sec-Fetch-Mode": "cors",
            "Sec-Fetch-Site": "cross-site",
            "Connection": "keep-alive",
            "Priority": "u=4",
            "TE": "trailers",
        }
        data = None
    
    
        # get key from pssh and license URL
        key_results = get_key(pssh, lic_url)
        print('\n' + key_results + '\n')

    Should be fairly easy to adopt to a other video url. the "token_url" contains "guest" - normally there was a device-id there (or when logged in, a user id). I replaced it with "guest" (think any string works there - also device id fffff-fff... did not error out).



    Excuse me if there is a solution which does already work and requires less hassle, but as my questions were not properly answered yet and I got impatient, I fiddled out something which at least looks as if it could do the job for me (for now). I am quite sure there are more effective ways - feel free to improve (or simply ignore my code input here).
    Quote Quote  
  29. Member MartinTH's Avatar
    Join Date
    Oct 2024
    Location
    Germany
    Search PM
    Maybe you all won't get any concrete Answers because this is a public Forum.

    This means that the Developers of RTL+ can also read along here and possibly close any weak points.

    Sometimes you just shouldn't say/write anything.
    Quote Quote  
  30. Then these "silent readers" will also know about the tools and their "service files" written about here and in other threads.


    This aside ... got my tool working, it downloads all missing episodes of the series. Skips paid ones etc.
    Have split it into two scripts. One to extract the episodes from the series page and one "download from the given video link" (would have been easier to share the less "specific" script here - but guess I shouldn't)

    Basically the script just loads in the javascript-object (each page contains it) and scans the elements of interest. Extracts required information to build the episode web urls and passes them to the downloader which does the drm-challenge stuff and feeds the mpd + keys to N_m3u8DL_RE if not already loaded before.


    BTW: you asked for specific urls ... Once this information is publically exposed (eg urls only used by an android application...) developers could change that too ... so what you wrote affects you too.
    Quote Quote  



Similar Threads

Visit our sponsor! Try DVDFab and backup Blu-rays!