VideoHelp Forum
+ Reply to Thread
Results 1 to 10 of 10
Thread
  1. Hi!

    Been reading here (and elsewhere) trying to wrap my head around all this, and I'm close but I cannot figure out what isn't working to get the keys.

    I can get keys for the tests in Angela's "howtos" so wks-keys is working properly.
    But using the same process for tv4play.se refuses to work, I get various errors from wks-keys but I'm not sure if it is related to my headers, my license or my PSSH.

    I found this thread and this post specifically:
    https://forum.videohelp.com/threads/401172-Everyone-can-help-me-fix-error-on-mp4decryp...e2#post2710176

    OP has eventually found the PSSH and the license url along with the headers, and seems to be able to download it.
    I'm trying to backtrace the steps to find the same information since it seemed to work not long ago, but I must be looking in the wrong place or using the info I find wrong.

    I can find the license (open https://www.tv4play.se/video/d95c4c7c9cf95c7e4c74/avsnitt-1 -> devtools / network -> filter "lic")
    I can find the headers using that file (the x-dt-auth-token bit which seems to be all that is needed if I understand correctly?)

    This is my headers.py, slightly different from the one in the other thread but this is what the license file gives me now.
    I have tried both with this and with the one from the other thread:
    PHP Code:
    headers = {
        
    'x-dt-auth-token''eyJhbGciOiJIUzUxMiJ9.eyJjcnQiOiJbe1wiYWNjb3VudGluZ0lkXCI6XCI3ZTNmMjgzZC0xMWNlLTQwMDktOGU1NS01NTc1M2Q0ZTI2ZjdcIixcImFzc2V0SWRcIjpcInR2bWVkaWEtMjA1MjI3MDJcIixcInByb2ZpbGVcIjp7XCJyZW50YWxcIjp7XCJhYnNvbHV0ZUV4cGlyYXRpb25cIjpcIjIwMjQtMDEtMDZUMTE6MTc6MzguOTUzWlwiLFwicGxheUR1cmF0aW9uXCI6ODY0MDAwMDB9fSxcIm91dHB1dFByb3RlY3Rpb25cIjp7XCJkaWdpdGFsXCI6dHJ1ZSxcImFuYWxvZ3VlXCI6dHJ1ZSxcImVuZm9yY2VcIjpmYWxzZX0sXCJuck9mU2ltdWx0YW5lb3VzU3RyZWFtc1wiOjAsXCJzdG9yZUxpY2Vuc2VcIjpmYWxzZX1dIiwib3B0RGF0YSI6IntcIm1lcmNoYW50XCI6XCJhMmRcIixcInVzZXJJZFwiOlwiYWRtaW4tc3ViLXZpbW9uZFwiLFwic2Vzc2lvbklkXCI6XCJ0bTYyTkUxcmwxblNaRzlDRGJvaTZnPT1cIn0iLCJpYXQiOjE3MDQ0NTM0NTgsImp0aSI6IkRjOFl6M3M2UWc3Mlc5XC80dFp3RVh3PT0ifQ.Dh6a_xH-Dxr9-G94mBqVxVpF0I8PgA9nhSN-aothEfZKW7Kuqa6xY5GGZQnhbEScJr0bDJb3DSqkXsEpB2QqF',

    TL;DR: How to find the correct PSSH so I can get the key? Please point me in the right direction.




    This is what I've tried so far:
    Looking at the one he found, it doesn't start with "AAAA...", so I'm guessing it's a base64 to HEX conversion. Cannot get the same numbers out though. Does it change after some time?

    Trying the code he found from his post gives me 404 (the PSSH has changed is my guess?):
    PHP Code:
    (pyenv-wks-photobuf4PS python.exe .\l3.py

    PSSH
    EhA9Xm01m5pB6LhD3TxucsQsSOPclZsG
    License URL
    https://lic46.drmtoday.com/license-proxy-widevine/cenc/?specConform=true&assetId=tvmedia-20522702
    license request failed:
     
    b'<!doctype html><html lang="en"><head><title>HTTP Status 404 \xe2\x80\x93 Not Found</title><style type="text/css">body {font-family:Tahoma,Arial,sans-serif;} h1, h2, h3, b {color:white;background-color:#525D76;} h1 {font-size:22px;} h2 {font-size:16px;} h3 {font-size:14px;} p {font-size:12px;} a {color:black;} .line {height:1px;background-color:#525D76;border:none;}</style></head><body><h1>HTTP Status 404 \xe2\x80\x93 Not Found</h1></body></html>'
    (pyenv-wks-photobuf4PS 
    I'm struggling to find an "mpd" file in devtools for tv4play - I think they're named something else, or they are contained in the m3u8 instead.
    Searching for "m3u8" I find ".m3u8?start_index=3" containing this:
    Code:
    #EXTM3U
    #EXT-X-VERSION:6
    ## Created with Unified Streaming Platform (version=1.11.23-28141)
    #EXT-X-SESSION-KEY:METHOD=SAMPLE-AES,KEYID=0x6c8101ca99963428bd608db49e912fd2,URI="data:text/plain;base64,AAAAYnBzc2gAAAAA7e+LqXnWSs6jyCfc1R0h7QAAAEISEGyBAcqZljQovWCNtJ6RL9IiKGV5SmhjM05sZEVsa0lqb2lkSFp0WldScFlTMHlNRFV5TWpjd01pSjlI88aJmwY=",KEYFORMAT="urn:uuid:edef8ba9-79d6-4ace-a3c8-27dcd51d21ed",KEYFORMATVERSIONS="1"
    #EXT-X-SESSION-KEY:METHOD=SAMPLE-AES,URI="data:text/plain;charset=UTF-16;base64,MgMAAAEAAQAoAzwAVwBSAE0ASABFAEEARABFAFIAIAB4AG0AbABuAHMAPQAiAGgAdAB0AHAAOgAvAC8AcwBjAGgAZQBtAGEAcwAuAG0AaQBjAHIAbwBzAG8AZgB0AC4AYwBvAG0ALwBEAFIATQAvADIAMAAwADcALwAwADMALwBQAGwAYQB5AFIAZQBhAGQAeQBIAGUAYQBkAGUAcgAiACAAdgBlAHIAcwBpAG8AbgA9ACIANAAuADMALgAwAC4AMAAiAD4APABEAEEAVABBAD4APABQAFIATwBUAEUAQwBUAEkATgBGAE8APgA8AEsASQBEAFMAPgA8AEsASQBEACAAQQBMAEcASQBEAD0AIgBBAEUAUwBDAEIAQwAiACAAVgBBAEwAVQBFAD0AIgB5AGcARwBCAGIASgBhAFoASwBEAFMAOQBZAEkAMgAwAG4AcABFAHYAMABnAD0APQAiAD4APAAvAEsASQBEAD4APAAvAEsASQBEAFMAPgA8AC8AUABSAE8AVABFAEMAVABJAE4ARgBPAD4APABMAEEAXwBVAFIATAA+AGgAdAB0AHAAcwA6AC8ALwBsAGkAYwAuAGQAcgBtAHQAbwBkAGEAeQAuAGMAbwBtAC8AbABpAGMAZQBuAHMAZQAtAHAAcgBvAHgAeQAtAGgAZQBhAGQAZQByAGEAdQB0AGgALwBkAHIAbQB0AG8AZABhAHkALwBSAGkAZwBoAHQAcwBNAGEAbgBhAGcAZQByAC4AYQBzAG0AeAA8AC8ATABBAF8AVQBSAEwAPgA8AEwAVQBJAF8AVQBSAEwAPgBoAHQAdABwAHMAOgAvAC8AcABsAGEAeQByAGUAYQBkAHkALQB1AGkALgBlAHgAYQBtAHAAbABlAC4AYwBvAG0APAAvAEwAVQBJAF8AVQBSAEwAPgA8AEQARQBDAFIAWQBQAFQATwBSAFMARQBUAFUAUAA+AE8ATgBEAEUATQBBAE4ARAA8AC8ARABFAEMAUgBZAFAAVABPAFIAUwBFAFQAVQBQAD4APAAvAEQAQQBUAEEAPgA8AC8AVwBSAE0ASABFAEEARABFAFIAPgA=",KEYFORMAT="com.microsoft.playready",KEYFORMATVERSIONS="1"
    #EXT-X-SESSION-KEY:METHOD=SAMPLE-AES,URI="skd://drmtoday?assetId=tvmedia-20522702&variantId&keyId=6c8101ca99963428bd608db49e912fd2",KEYFORMAT="com.apple.streamingkeydelivery",KEYFORMATVERSIONS="1"
    #EXT-X-SESSION-KEY:METHOD=SAMPLE-AES,KEYID=0x6c8101ca99963428bd608db49e912fd2,URI="data:text/plain;base64,AAAAn3Bzc2gAAAAAPV5tNZuaQei4Q908bnLELAAAAH97InZlcnNpb24iOiJWMS4wIiwia2lkcyI6WyJiSUVCeXBtV05DaTlZSTIwbnBFdjBnPT0iXSwiY29udGVudElEIjoiZXlKaGMzTmxkRWxrSWpvaWRIWnRaV1JwWVMweU1EVXlNamN3TWlKOSIsImVuc2NoZW1hIjoiY2JjcyJ9",KEYFORMAT="urn:uuid:3d5e6d35-9b9a-41e8-b843-dd3c6e72c42c",KEYFORMATVERSIONS="1"
    And I do see some "AAAA..." strings in there so seems right.

    I tried using the first one as-is in wks-keys:
    PHP Code:
    (pyenv-wks-photobuf4PS python.exe .\l3.py

    PSSH
    AAAAYnBzc2gAAAAA7e+LqXnWSs6jyCfc1R0h7QAAAEISEGyBAcqZljQovWCNtJ6RL9IiKGV5SmhjM05sZEVsa0lqb2lkSFp0WldScFlTMHlNRFV5TWpjd01pSjlI88aJmwY=
    License URLhttps://lic46.drmtoday.com/license-proxy-widevine/cenc/?specConform=true&assetId=tvmedia-20522702
    license request failed:
     
    b'<!doctype html><html lang="en"><head><title>HTTP Status 403 \xe2\x80\x93 Forbidden</title><style type="text/css">body {font-family:Tahoma,Arial,sans-serif;} h1, h2, h3, b {color:white;background-color:#525D76;} h1 {font-size:22px;} h2 {font-size:16px;} h3 {font-size:14px;} p {font-size:12px;} a {color:black;} .line {height:1px;background-color:#525D76;border:none;}</style></head><body><h1>HTTP Status 403 \xe2\x80\x93 Forbidden</h1></body></html>'
    (pyenv-wks-photobuf4PS 
    Not error 404, but 403 instead.. how come?

    Tried to do base64 to hex on that one gives me:
    Code:
    edef8ba979d64acea3c827dcd51d21ed
    which is the same as what is right after in the "KEYFORMAT" part, but with hyphens.
    but:
    PHP Code:
    (pyenv-wks-photobuf4PS python.exe .\l3.py

    PSSH
    edef8ba979d64acea3c827dcd51d21ed
    License URL
    https://lic46.drmtoday.com/license-proxy-widevine/cenc/?specConform=true&assetId=tvmedia-20522702
    unable to parseunsupported init data format
    unable to parse init data
    session ID does not exist
    Traceback 
    (most recent call last):
      
    File "WKS_KEYS_l3_correction\l3.py"line 28in <module>
        
    correctkeys WV_Function(psshlic_url)
                        ^^^^^^^^^^^^^^^^^^^^^^^^^^
      
    File "WKS_KEYS_l3_correction\l3.py"line 19in WV_Function
        widevine_license 
    requests.post(url=lic_urldata=wvdecrypt.get_challenge(), headers=headers.headers)
                           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
      
    File "pyenv-wks-photobuf4\Lib\site-packages\requests\api.py"line 115in post
        
    return request("post"urldata=datajson=json, **kwargs)
               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
      
    File "pyenv-wks-photobuf4\Lib\site-packages\requests\api.py"line 59in request
        
    return session.request(method=methodurl=url, **kwargs)
               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
      
    File "pyenv-wks-photobuf4\Lib\site-packages\requests\sessions.py"line 589in request
        resp 
    self.send(prep, **send_kwargs)
               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
      
    File "pyenv-wks-photobuf4\Lib\site-packages\requests\sessions.py"line 703in send
        r 
    adapter.send(request, **kwargs)
            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
      
    File "pyenv-wks-photobuf4\Lib\site-packages\requests\adapters.py"line 486in send
        resp 
    conn.urlopen(
               ^^^^^^^^^^^^^
      
    File "pyenv-wks-photobuf4\Lib\site-packages\urllib3\connectionpool.py"line 790in urlopen
        response 
    self._make_request(
                   ^^^^^^^^^^^^^^^^^^^
      
    File "pyenv-wks-photobuf4\Lib\site-packages\urllib3\connectionpool.py"line 496in _make_request
        conn
    .request(
      
    File "pyenv-wks-photobuf4\Lib\site-packages\urllib3\connection.py"line 363in request
        chunks_and_cl 
    body_to_chunks(bodymethod=methodblocksize=self.blocksize)
                        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
      
    File "pyenv-wks-photobuf4\Lib\site-packages\urllib3\util\request.py"line 247in body_to_chunks
        raise TypeError
    (
    TypeError'body' must be a bytes-like objectfile-like object, or iterableInstead was 1
    (pyenv-wks-photobuf4PS 
    and googling that error didn't get me any closer to a solution I'm afraid.

    Thought that perhaps it's a "kid" string, and tried to convert it:
    PHP Code:
    PS python .\psshfromkid.py
    Please input KID in hex string
    edef8ba979d64acea3c827dcd51d21ed
    PSSH AAAAMnBzc2gAAAAA7e
    +LqXnWSs6jyCfc1R0h7QAAABISEO3vi6l51krOo8gn3NUdIe0=
    PS 
    but again, 404 error from wks.

    Tried the second string in the m3u8:
    Code:
    AAAAn3Bzc2gAAAAAPV5tNZuaQei4Q908bnLELAAAAH97InZlcnNpb24iOiJWMS4wIiwia2lkcyI6WyJiSUVCeXBtV05DaTlZSTIwbnBFdjBnPT0iXSwiY29udGVudElEIjoiZXlKaGMzTmxkRWxrSWpvaWRIWnRaV1JwWVMweU1EVXlNamN3TWlKOSIsImVuc2NoZW1hIjoiY2JjcyJ9
    -> must be byte object

    Tried converting it to hex -> must be byte object

    Tried converting kid to pssh -> error 404

    I'm out of ideas.
    Could someone with more knowledge point me in the right direction please?
    Last edited by insideoutegg; 7th Jan 2024 at 04:49.
    Quote Quote  
  2. -widevine PSSH start with 'AAAA'
    you can find PSSH by using EME logger, or look at inside mpd

    -if your license is : https://lic46.drmtoday.com/license-proxy-widevine/cenc/?specConform=true or https://lic.drmtoday.com/license-proxy-widevine/cenc/?specConform=true
    you need headers

    - your headers could be x-dt-auth-token, custom-data, etc

    can you share mpd link?
    and fresh x-dt-auth-token?

    copy request headers in license url

    i think this is your PSSH
    Code:
    #EXTM3U
    #EXT-X-VERSION:6
    ## Created with Unified Streaming Platform (version=1.11.23-28141)
    #EXT-X-SESSION-KEY:METHOD=SAMPLE-AES,KEYID=0x6c8101ca99963428bd608db49e912fd2,URI="data:text/plain;base64,AAAAYnBzc2gAAAAA7e+LqXnWSs6jyCfc1R0h7QAAAEISEGyBAcqZljQovWCNtJ6RL9IiKGV5SmhjM05sZEVsa0lqb2lkSFp0WldScFlTMHlNRFV5TWpjd01pSjlI88aJmwY=",KEYFORMAT="urn:uuid:edef8ba9-79d6-4ace-a3c8-27dcd51d21ed",KEYFORMATVERSIONS="1"
    Last edited by jckzz; 5th Jan 2024 at 12:19.
    Quote Quote  
  3. Other PSSH start with AAAA as well. Widevine PSSH is always associated with a uri:uuid: starting with "urn:uuid:ede" (regardless of caps). And if it contains "e+", you've found it.
    Quote Quote  
  4. Average video editor Sviests's Avatar
    Join Date
    Sep 2018
    Location
    USA,Sweden
    Search Comp PM
    You can just download 1080p HLS via streamlink

    streamlink "https://vod.streaming.a2d.tv/662bdcbd-4d1e-4ad4-89ac-a3547b2302d1/e7dbd3e0-6285-11ee-8ec1-4109d0dc33a2_20694345.ism/.m3u8?start_index=3" best -o output.mp4
    Will grab 1080p easy,no decryption needed.Tested it,it works.

    Edit,if you for whatever reason still need licence url and want to get it via dash, network threw something like this licence out:

    "https://playback2.a2d.tv/play/d95c4c7c9cf95c7e4c74?service=tv4play&device=browse r&protocol=hls%2Cdash&drm=widevine&browser=GoogleChrome&capabilities=live-drm-adstitch-2%2Cyospace3"

    You need this token from it in headers:
    X-Jwt: 'Bearer (and whatever follows here)'

    You can get .mpd by just changing it from .m3u8
    "https://vod.streaming.a2d.tv/662bdcbd-4d1e-4ad4-89ac-a3547b2302d1/e7dbd3e0-6285-11ee-8ec1-4109d0dc33a2_20694345.ism/.mpd"

    i could be wrong,but this could be the Pssh:
    AAAARnBzc2gBAAAA7e+LqXnWSs6jyCfc1R0h7QAAAAHn29PgYo UR7o7BQQnQ3DOiAAAAEhIQ59vT4GKFEe6OwUEJ0Nwzog==
    Last edited by Sviests; 5th Jan 2024 at 15:44.
    Quote Quote  
  5. Originally Posted by jckzz View Post
    -widevine PSSH start with 'AAAA'
    you can find PSSH by using EME logger, or look at inside mpd

    -if your license is : https://lic46.drmtoday.com/license-proxy-widevine/cenc/?specConform=true or https://lic.drmtoday.com/license-proxy-widevine/cenc/?specConform=true
    you need headers

    - your headers could be x-dt-auth-token, custom-data, etc

    can you share mpd link?
    and fresh x-dt-auth-token?

    copy request headers in license url

    i think this is your PSSH
    Code:
    #EXTM3U
    #EXT-X-VERSION:6
    ## Created with Unified Streaming Platform (version=1.11.23-28141)
    #EXT-X-SESSION-KEY:METHOD=SAMPLE-AES,KEYID=0x6c8101ca99963428bd608db49e912fd2,URI="data:text/plain;base64,AAAAYnBzc2gAAAAA7e+LqXnWSs6jyCfc1R0h7QAAAEISEGyBAcqZljQovWCNtJ6RL9IiKGV5SmhjM05sZEVsa0lqb2lkSFp0WldScFlTMHlNRFV5TWpjd01pSjlI88aJmwY=",KEYFORMAT="urn:uuid:edef8ba9-79d6-4ace-a3c8-27dcd51d21ed",KEYFORMATVERSIONS="1"
    Unfortunately I can't find a proper mpd, only the m3u8.
    What could the search terms be to find one - or are there times when no mpd exists?


    Yeah, that key seems right. I find it in the m3u8 and also with EME Logger.
    Code:
    MediaKeySession.generateRequest("cenc", Uint8Array instance [
    AAAAYnBzc2gAAAAA7e+LqXnWSs6jyCfc1R0h7QAAAEISEGyBAcqZljQovWCNtJ6RL9IiKGV5SmhjM05sZEVsa0lqb2lkSFp0W
    ldScFlTMHlNRFV5TWpjd01pSjlI88aJmwY=
    ]) => undefined
    So:
    PSSH = AAAAYnBzc2gAAAAA7e+LqXnWSs6jyCfc1R0h7QAAAEISEGyBAc qZljQovWCNtJ6RL9IiKGV5SmhjM05sZEVsa0lqb2lkSFp0W
    ldScFlTMHlNRFV5TWpjd01pSjlI88aJmwY=

    As for license, i find this:
    Image
    [Attachment 76040 - Click to enlarge]

    which is this url:
    Code:
    https://lic46.drmtoday.com/license-proxy-widevine/cenc/?specConform=true&assetId=tvmedia-20522702
    So, I guess:
    LICENSE = https://lic46.drmtoday.com/license-proxy-widevine/cenc/?specConform=true&assetId=tvmedia-20522702
    or should I remove the assetId and include it in headers instead? Tried both.

    As for headers, this is the full output from curlconverter:
    PHP Code:
    import requests

    headers 
    = {
        
    'authority''lic46.drmtoday.com',
        
    'accept''*/*',
        
    'accept-language''en,sv-SE;q=0.9,sv;q=0.8',
        
    'dnt''1',
        
    'origin''https://www.tv4play.se',
        
    'referer''https://www.tv4play.se/',
        
    'sec-ch-ua''"Not_A Brand";v="8", "Chromium";v="120", "Google Chrome";v="120"',
        
    'sec-ch-ua-mobile''?0',
        
    'sec-ch-ua-platform''"Windows"',
        
    'sec-fetch-dest''empty',
        
    'sec-fetch-mode''cors',
        
    'sec-fetch-site''cross-site',
        
    'user-agent''Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36',
        
    'x-dt-auth-token''eyJhbGciOiJIUzUxMiJ9.eyJjcnQiOiJbe1wiYWNjb3VudGluZ0lkXCI6XCJmZmMyNjEzYS03NzBjLTQ2MzMtYmE4ZC0zNjU5NDU4NjllZDZcIixcImFzc2V0SWRcIjpcInR2bWVkaWEtMjA1MjI3MDJcIixcInByb2ZpbGVcIjp7XCJyZW50YWxcIjp7XCJhYnNvbHV0ZUV4cGlyYXRpb25cIjpcIjIwMjQtMDEtMDZUMjA6MDg6MjEuMDY1WlwiLFwicGxheUR1cmF0aW9uXCI6ODY0MDAwMDB9fSxcIm91dHB1dFByb3RlY3Rpb25cIjp7XCJkaWdpdGFsXCI6dHJ1ZSxcImFuYWxvZ3VlXCI6dHJ1ZSxcImVuZm9yY2VcIjpmYWxzZX0sXCJuck9mU2ltdWx0YW5lb3VzU3RyZWFtc1wiOjAsXCJzdG9yZUxpY2Vuc2VcIjpmYWxzZX1dIiwib3B0RGF0YSI6IntcIm1lcmNoYW50XCI6XCJhMmRcIixcInVzZXJJZFwiOlwiYWRtaW4tc3ViLXZpbW9uZFwiLFwic2Vzc2lvbklkXCI6XCJoNTJBUzVmMWtoYnI3dWYxeVZ5MmhnPT1cIn0iLCJpYXQiOjE3MDQ0ODUzMDEsImp0aSI6InNIN3BrYWFEeUhXNk1cL3JPaDhBXC9tdz09In0.gKjkjMFrbD2778sYYSmm26n-l-2PnbdEkOuslE-y1opGAX6iYXQ5_9VUtKzhbhyBtlr3SihNnRaoWTfmle5Ix',
        
    'content-type''application/x-www-form-urlencoded',
    }

    params = {
        
    'specConform''true',
        
    'assetId''tvmedia-20522702',
    }

    data '\b\x04'

    response requests.post('https://lic46.drmtoday.com/license-proxy-widevine/cenc/'params=paramsheaders=headersdata=data
    Do I perhaps need the data part?
    Is the "'content-type': 'application/x-www-form-urlencoded'," relevant?
    The specConform and assetid are provided in the url, but I've tried to include them in the header too.
    Tried to include referer, origin and most other stuff too in various combinations.

    That last part seems like it matters:
    Code:
    response = requests.post('https://lic46.drmtoday.com/license-proxy-widevine/cenc/', params=params, headers=headers, data=data)
    I've tried all sorts of header configurations.
    Here's the output from different header configurations and the same (correct, I hope) PSSH and license in a fresh venv.
    Let me know if I should post this on pastebin instead, a bit long.

    PHP Code:
    (widevinePS C:\tv4\WKS_KEYSpython .\l3.py

    PSSH
    AAAAYnBzc2gAAAAA7e+LqXnWSs6jyCfc1R0h7QAAAEISEGyBAcqZljQovWCNtJ6RL9IiKGV5SmhjM05sZEVsa0lqb2lkSFp0WldScFlTMHlNRFV5TWpjd01pSjlI88aJmwY=
    License URLhttps://lic46.drmtoday.com/license-proxy-widevine/cenc/?specConform=true

    0testing these headers:
    {
    'authority''lic46.drmtoday.com''accept''*/*''accept-language''en,sv-SE;q=0.9,sv;q=0.8''dnt''1''origin''https://www.tv4play.se''referer''https://www.tv4play.se/''sec-ch-ua''"Not_A Brand";v="8", "Chromium";v="120", "Google Chrome";v="120"''sec-ch-ua-mobile''?0''sec-ch-ua-platform''"Windows"''sec-fetch-dest''empty''sec-fetch-mode''cors''sec-fetch-site''cross-site''user-agent''Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36''x-dt-auth-token''eyJhbGciOiJIUzUxMiJ9.eyJjcnQiOiJbe1wiYWNjb3VudGluZ0lkXCI6XCJiMWI2ODJlMi1kNWU2LTRjNWMtOTQwNS0wOWI1M2I0MGM1MmJcIixcImFzc2V0SWRcIjpcInR2bWVkaWEtMjA1MjI3MDJcIixcInByb2ZpbGVcIjp7XCJyZW50YWxcIjp7XCJhYnNvbHV0ZUV4cGlyYXRpb25cIjpcIjIwMjQtMDEtMDZUMjA6NDQ6NTcuMDU3WlwiLFwicGxheUR1cmF0aW9uXCI6ODY0MDAwMDB9fSxcIm91dHB1dFByb3RlY3Rpb25cIjp7XCJkaWdpdGFsXCI6dHJ1ZSxcImFuYWxvZ3VlXCI6dHJ1ZSxcImVuZm9yY2VcIjpmYWxzZX0sXCJuck9mU2ltdWx0YW5lb3VzU3RyZWFtc1wiOjAsXCJzdG9yZUxpY2Vuc2VcIjpmYWxzZX1dIiwib3B0RGF0YSI6IntcIm1lcmNoYW50XCI6XCJhMmRcIixcInNlc3Npb25JZFwiOlwiem94RENJZU13Q2dTUUt6djJlYVVmUT09XCIsXCJ1c2VySWRcIjpcImFkbWluLXN1Yi12aW1vbmRcIn0iLCJpYXQiOjE3MDQ0ODc0OTcsImp0aSI6ImJ3MEVlK2xBcnY3NUV6YTlWT2V1XC9RPT0ifQ.s8f2PtvAwnU6TUu5uqg28NseP4jqBRBojGssyWL8xbva91w5dLWa39Q4Yq0plirJPhb-6nQ_OJMgCwr_Y_Cte''content-type''application/x-www-form-urlencoded'}

    license request failed:
     
    b'<!doctype html><html lang="en"><head><title>HTTP Status 400 \xe2\x80\x93 Bad Request</title><style type="text/css">body {font-family:Tahoma,Arial,sans-serif;} h1, h2, h3, b {color:white;background-color:#525D76;} h1 {font-size:22px;} h2 {font-size:16px;} h3 {font-size:14px;} p {font-size:12px;} a {color:black;} .line {height:1px;background-color:#525D76;border:none;}</style></head><body><h1>HTTP Status 400 \xe2\x80\x93 Bad Request</h1></body></html>'

    1testing these headers:
    {
    'authority''lic46.drmtoday.com''accept-language''en,sv-SE;q=0.9,sv;q=0.8''dnt''1''origin''https://www.tv4play.se''referer''https://www.tv4play.se/''x-dt-auth-token''eyJhbGciOiJIUzUxMiJ9.eyJjcnQiOiJbe1wiYWNjb3VudGluZ0lkXCI6XCJiMWI2ODJlMi1kNWU2LTRjNWMtOTQwNS0wOWI1M2I0MGM1MmJcIixcImFzc2V0SWRcIjpcInR2bWVkaWEtMjA1MjI3MDJcIixcInByb2ZpbGVcIjp7XCJyZW50YWxcIjp7XCJhYnNvbHV0ZUV4cGlyYXRpb25cIjpcIjIwMjQtMDEtMDZUMjA6NDQ6NTcuMDU3WlwiLFwicGxheUR1cmF0aW9uXCI6ODY0MDAwMDB9fSxcIm91dHB1dFByb3RlY3Rpb25cIjp7XCJkaWdpdGFsXCI6dHJ1ZSxcImFuYWxvZ3VlXCI6dHJ1ZSxcImVuZm9yY2VcIjpmYWxzZX0sXCJuck9mU2ltdWx0YW5lb3VzU3RyZWFtc1wiOjAsXCJzdG9yZUxpY2Vuc2VcIjpmYWxzZX1dIiwib3B0RGF0YSI6IntcIm1lcmNoYW50XCI6XCJhMmRcIixcInNlc3Npb25JZFwiOlwiem94RENJZU13Q2dTUUt6djJlYVVmUT09XCIsXCJ1c2VySWRcIjpcImFkbWluLXN1Yi12aW1vbmRcIn0iLCJpYXQiOjE3MDQ0ODc0OTcsImp0aSI6ImJ3MEVlK2xBcnY3NUV6YTlWT2V1XC9RPT0ifQ.s8f2PtvAwnU6TUu5uqg28NseP4jqBRBojGssyWL8xbva91w5dLWa39Q4Yq0plirJPhb-6nQ_OJMgCwr_Y_Cte''content-type''application/x-www-form-urlencoded'}

    license request failed:
     
    b'<!doctype html><html lang="en"><head><title>HTTP Status 400 \xe2\x80\x93 Bad Request</title><style type="text/css">body {font-family:Tahoma,Arial,sans-serif;} h1, h2, h3, b {color:white;background-color:#525D76;} h1 {font-size:22px;} h2 {font-size:16px;} h3 {font-size:14px;} p {font-size:12px;} a {color:black;} .line {height:1px;background-color:#525D76;border:none;}</style></head><body><h1>HTTP Status 400 \xe2\x80\x93 Bad Request</h1></body></html>'

    2testing these headers:
    {
    'origin''https://www.tv4play.se''referer''https://www.tv4play.se/''x-dt-auth-token''eyJhbGciOiJIUzUxMiJ9.eyJjcnQiOiJbe1wiYWNjb3VudGluZ0lkXCI6XCJiMWI2ODJlMi1kNWU2LTRjNWMtOTQwNS0wOWI1M2I0MGM1MmJcIixcImFzc2V0SWRcIjpcInR2bWVkaWEtMjA1MjI3MDJcIixcInByb2ZpbGVcIjp7XCJyZW50YWxcIjp7XCJhYnNvbHV0ZUV4cGlyYXRpb25cIjpcIjIwMjQtMDEtMDZUMjA6NDQ6NTcuMDU3WlwiLFwicGxheUR1cmF0aW9uXCI6ODY0MDAwMDB9fSxcIm91dHB1dFByb3RlY3Rpb25cIjp7XCJkaWdpdGFsXCI6dHJ1ZSxcImFuYWxvZ3VlXCI6dHJ1ZSxcImVuZm9yY2VcIjpmYWxzZX0sXCJuck9mU2ltdWx0YW5lb3VzU3RyZWFtc1wiOjAsXCJzdG9yZUxpY2Vuc2VcIjpmYWxzZX1dIiwib3B0RGF0YSI6IntcIm1lcmNoYW50XCI6XCJhMmRcIixcInNlc3Npb25JZFwiOlwiem94RENJZU13Q2dTUUt6djJlYVVmUT09XCIsXCJ1c2VySWRcIjpcImFkbWluLXN1Yi12aW1vbmRcIn0iLCJpYXQiOjE3MDQ0ODc0OTcsImp0aSI6ImJ3MEVlK2xBcnY3NUV6YTlWT2V1XC9RPT0ifQ.s8f2PtvAwnU6TUu5uqg28NseP4jqBRBojGssyWL8xbva91w5dLWa39Q4Yq0plirJPhb-6nQ_OJMgCwr_Y_Cte'}

    license request failed:
     
    b'<!doctype html><html lang="en"><head><title>HTTP Status 403 \xe2\x80\x93 Forbidden</title><style type="text/css">body {font-family:Tahoma,Arial,sans-serif;} h1, h2, h3, b {color:white;background-color:#525D76;} h1 {font-size:22px;} h2 {font-size:16px;} h3 {font-size:14px;} p {font-size:12px;} a {color:black;} .line {height:1px;background-color:#525D76;border:none;}</style></head><body><h1>HTTP Status 403 \xe2\x80\x93 Forbidden</h1></body></html>'

    3testing these headers:
    {
    'x-dt-auth-token''eyJhbGciOiJIUzUxMiJ9.eyJjcnQiOiJbe1wiYWNjb3VudGluZ0lkXCI6XCJiMWI2ODJlMi1kNWU2LTRjNWMtOTQwNS0wOWI1M2I0MGM1MmJcIixcImFzc2V0SWRcIjpcInR2bWVkaWEtMjA1MjI3MDJcIixcInByb2ZpbGVcIjp7XCJyZW50YWxcIjp7XCJhYnNvbHV0ZUV4cGlyYXRpb25cIjpcIjIwMjQtMDEtMDZUMjA6NDQ6NTcuMDU3WlwiLFwicGxheUR1cmF0aW9uXCI6ODY0MDAwMDB9fSxcIm91dHB1dFByb3RlY3Rpb25cIjp7XCJkaWdpdGFsXCI6dHJ1ZSxcImFuYWxvZ3VlXCI6dHJ1ZSxcImVuZm9yY2VcIjpmYWxzZX0sXCJuck9mU2ltdWx0YW5lb3VzU3RyZWFtc1wiOjAsXCJzdG9yZUxpY2Vuc2VcIjpmYWxzZX1dIiwib3B0RGF0YSI6IntcIm1lcmNoYW50XCI6XCJhMmRcIixcInNlc3Npb25JZFwiOlwiem94RENJZU13Q2dTUUt6djJlYVVmUT09XCIsXCJ1c2VySWRcIjpcImFkbWluLXN1Yi12aW1vbmRcIn0iLCJpYXQiOjE3MDQ0ODc0OTcsImp0aSI6ImJ3MEVlK2xBcnY3NUV6YTlWT2V1XC9RPT0ifQ.s8f2PtvAwnU6TUu5uqg28NseP4jqBRBojGssyWL8xbva91w5dLWa39Q4Yq0plirJPhb-6nQ_OJMgCwr_Y_Cte'}

    license request failed:
     
    b'<!doctype html><html lang="en"><head><title>HTTP Status 403 \xe2\x80\x93 Forbidden</title><style type="text/css">body {font-family:Tahoma,Arial,sans-serif;} h1, h2, h3, b {color:white;background-color:#525D76;} h1 {font-size:22px;} h2 {font-size:16px;} h3 {font-size:14px;} p {font-size:12px;} a {color:black;} .line {height:1px;background-color:#525D76;border:none;}</style></head><body><h1>HTTP Status 403 \xe2\x80\x93 Forbidden</h1></body></html>'

    4testing these headers:
    {
    'x-dt-auth-token''eyJhbGciOiJIUzUxMiJ9.eyJjcnQiOiJbe1wiYWNjb3VudGluZ0lkXCI6XCJiMWI2ODJlMi1kNWU2LTRjNWMtOTQwNS0wOWI1M2I0MGM1MmJcIixcImFzc2V0SWRcIjpcInR2bWVkaWEtMjA1MjI3MDJcIixcInByb2ZpbGVcIjp7XCJyZW50YWxcIjp7XCJhYnNvbHV0ZUV4cGlyYXRpb25cIjpcIjIwMjQtMDEtMDZUMjA6NDQ6NTcuMDU3WlwiLFwicGxheUR1cmF0aW9uXCI6ODY0MDAwMDB9fSxcIm91dHB1dFByb3RlY3Rpb25cIjp7XCJkaWdpdGFsXCI6dHJ1ZSxcImFuYWxvZ3VlXCI6dHJ1ZSxcImVuZm9yY2VcIjpmYWxzZX0sXCJuck9mU2ltdWx0YW5lb3VzU3RyZWFtc1wiOjAsXCJzdG9yZUxpY2Vuc2VcIjpmYWxzZX1dIiwib3B0RGF0YSI6IntcIm1lcmNoYW50XCI6XCJhMmRcIixcInNlc3Npb25JZFwiOlwiem94RENJZU13Q2dTUUt6djJlYVVmUT09XCIsXCJ1c2VySWRcIjpcImFkbWluLXN1Yi12aW1vbmRcIn0iLCJpYXQiOjE3MDQ0ODc0OTcsImp0aSI6ImJ3MEVlK2xBcnY3NUV6YTlWT2V1XC9RPT0ifQ.s8f2PtvAwnU6TUu5uqg28NseP4jqBRBojGssyWL8xbva91w5dLWa39Q4Yq0plirJPhb-6nQ_OJMgCwr_Y_Cte''specConform''true''assetId''tvmedia-20522702'}

    license request failed:
     
    b'<!doctype html><html lang="en"><head><title>HTTP Status 403 \xe2\x80\x93 Forbidden</title><style type="text/css">body {font-family:Tahoma,Arial,sans-serif;} h1, h2, h3, b {color:white;background-color:#525D76;} h1 {font-size:22px;} h2 {font-size:16px;} h3 {font-size:14px;} p {font-size:12px;} a {color:black;} .line {height:1px;background-color:#525D76;border:none;}</style></head><body><h1>HTTP Status 403 \xe2\x80\x93 Forbidden</h1></body></html>'

    5testing these headers:
    {
    'x-dt-auth-token''eyJhbGciOiJIUzUxMiJ9.eyJjcnQiOiJbe1wiYWNjb3VudGluZ0lkXCI6XCJiMWI2ODJlMi1kNWU2LTRjNWMtOTQwNS0wOWI1M2I0MGM1MmJcIixcImFzc2V0SWRcIjpcInR2bWVkaWEtMjA1MjI3MDJcIixcInByb2ZpbGVcIjp7XCJyZW50YWxcIjp7XCJhYnNvbHV0ZUV4cGlyYXRpb25cIjpcIjIwMjQtMDEtMDZUMjA6NDQ6NTcuMDU3WlwiLFwicGxheUR1cmF0aW9uXCI6ODY0MDAwMDB9fSxcIm91dHB1dFByb3RlY3Rpb25cIjp7XCJkaWdpdGFsXCI6dHJ1ZSxcImFuYWxvZ3VlXCI6dHJ1ZSxcImVuZm9yY2VcIjpmYWxzZX0sXCJuck9mU2ltdWx0YW5lb3VzU3RyZWFtc1wiOjAsXCJzdG9yZUxpY2Vuc2VcIjpmYWxzZX1dIiwib3B0RGF0YSI6IntcIm1lcmNoYW50XCI6XCJhMmRcIixcInNlc3Npb25JZFwiOlwiem94RENJZU13Q2dTUUt6djJlYVVmUT09XCIsXCJ1c2VySWRcIjpcImFkbWluLXN1Yi12aW1vbmRcIn0iLCJpYXQiOjE3MDQ0ODc0OTcsImp0aSI6ImJ3MEVlK2xBcnY3NUV6YTlWT2V1XC9RPT0ifQ.s8f2PtvAwnU6TUu5uqg28NseP4jqBRBojGssyWL8xbva91w5dLWa39Q4Yq0plirJPhb-6nQ_OJMgCwr_Y_Cte''assetId''tvmedia-20522702'}

    license request failed:
     
    b'<!doctype html><html lang="en"><head><title>HTTP Status 403 \xe2\x80\x93 Forbidden</title><style type="text/css">body {font-family:Tahoma,Arial,sans-serif;} h1, h2, h3, b {color:white;background-color:#525D76;} h1 {font-size:22px;} h2 {font-size:16px;} h3 {font-size:14px;} p {font-size:12px;} a {color:black;} .line {height:1px;background-color:#525D76;border:none;}</style></head><body><h1>HTTP Status 403 \xe2\x80\x93 Forbidden</h1></body></html>' 
    Some are bad requests, some are forbidden. Not sure which is closest? I'd say a forbidden request is better than a bad one.
    No idea what to do about it though.
    I'll have a re-read of the Dungeon of despair, perhaps HttpToolkit will help me.
    Last edited by insideoutegg; 7th Jan 2024 at 04:48.
    Quote Quote  
  6. Originally Posted by Sviests View Post
    You can just download 1080p HLS via streamlink

    streamlink "https://vod.streaming.a2d.tv/662bdcbd-4d1e-4ad4-89ac-a3547b2302d1/e7dbd3e0-6285-11ee-8ec1-4109d0dc33a2_20694345.ism/.m3u8?start_index=3" best -o output.mp4
    Will grab 1080p easy,no decryption needed.Tested it,it works.

    Edit,if you for whatever reason still need licence url and want to get it via dash, network threw something like this licence out:

    "https://playback2.a2d.tv/play/d95c4c7c9cf95c7e4c74?service=tv4play&device=browse r&protocol=hls%2Cdash&drm=widevine&browser=GoogleChrome&capabilities=live-drm-adstitch-2%2Cyospace3"

    You need this token from it in headers:
    X-Jwt: 'Bearer (and whatever follows here)'

    You can get .mpd by just changing it from .m3u8
    "https://vod.streaming.a2d.tv/662bdcbd-4d1e-4ad4-89ac-a3547b2302d1/e7dbd3e0-6285-11ee-8ec1-4109d0dc33a2_20694345.ism/.mpd"
    Ah, now that looks interesting!

    Using your link I can get it, but my link looks different and is encrypted.. could that be due to me having a "premium" account and not a free one?
    Did you get that link by going to inspector and finding the m3u8 or am I in the wrong place?

    My link looks like this:
    Code:
    https://vod.streaming.a2d.tv/9dd39cc4-8b43-4dba-a7ce-be966a8b1d3d/7ad43580-48cc-11ee-a97f-e19c58263f14_20522702.ism/.m3u8?start_index=3
    and my streamlink output says it's encrypted:
    Code:
    PS C:\tv4\streamlink-6.5.0-2-py311-x86_64\bin> .\streamlink.exe "https://vod.streaming.a2d.tv/9dd39cc4-8b43-4dba-a7ce-be966a8b1d3d/7ad43580-48cc-11ee-a97f-e19c58263f14_20522702.ism/.m3u8?start_index=3" worst -o output.mp4
    [cli][info] Found matching plugin hls for URL https://vod.streaming.a2d.tv/9dd39cc4-8b43-4dba-a7ce-be966a8b1d3d/7ad43580-48cc-11ee-a97f-e19c58263f14_20522702.ism/.m3u8?start_index=3
    [cli][info] Available streams: 216p (worst), 360p, 432p, 576p, 720p, 1080p (best)
    [cli][info] Opening stream: 216p (hls-multi)
    [cli][info] Writing output to
    C:\tv4\streamlink-6.5.0-2-py311-x86_64\bin\output.mp4
    File output.mp4 already exists! Overwrite it? [y/N] y
    [utils.named_pipe][info] Creating pipe streamlinkpipe-30180-1-2780
    [utils.named_pipe][info] Creating pipe streamlinkpipe-30180-2-1449
    [stream.hls][error] Failed to create decryptor: Unable to decrypt cipher SAMPLE-AES
    [cli][error] Try 1/1: Could not open stream <MuxedHLSStream ['hls-multi', 'https://vod.streaming.a2d.tv/9dd39cc4-8b43-4dba-a7ce-be966a8b1d3d/7ad43580-48cc-11ee-a97f-e19c58263f14_20522702.ism/.m3u8?start_index=3']> (No data returned from stream)
    error: Could not open stream <MuxedHLSStream ['hls-multi', 'https://vod.streaming.a2d.tv/9dd39cc4-8b43-4dba-a7ce-be966a8b1d3d/7ad43580-48cc-11ee-a97f-e19c58263f14_20522702.ism/.m3u8?start_index=3']>, tried 1 times, exiting
    [cli][info] Closing currently open stream...
    I'll have a go with that other tip of yours, looks promising!
    Quote Quote  
  7. Average video editor Sviests's Avatar
    Join Date
    Sep 2018
    Location
    USA,Sweden
    Search Comp PM
    I used free account,so the the URL is not exactly a match. I don't know if there's any difference inbetween 2 of them.
    Quote Quote  
  8. Originally Posted by Sviests View Post
    I used free account,so the the URL is not exactly a match. I don't know if there's any difference inbetween 2 of them.
    Well, I'll be ... tried a free account - works great.
    So all premium content is encrypted then I suppose.

    I can't get streamlink to fetch me the subtitles, but using N_m3u8DL-RE worked a treat.
    For anyone stumbling upon this, a simple way to get content from tv4play, including subtitles, is this:
    Code:
    1. Download N_m3u8DL-RE (and mkvtoolnix (mkvmerge specifically) if you want to mux the result automatically to mkv)
    2. Create a free account at tv4play and log in
    3. Open Inspector / dev tools (F12) and start the video you want
    4. Wait for commercials to end and search for m3u8, then copy the found address/link that has "start_index=3" in the name
    5. Open a cmd / powershell window / terminal and run:
    .\N_m3u8DL-RE.exe "<link to m3u8 you copied>" --save-dir <output-dir> --save-name <output-filename-without-extension> -M format=mkv:muxer=mkvmerge
    6. Select the streams you want (can be automated with --auto-select if you always want max quality)
    And that's it.
    mkvmerge needs to be in PATH or same dir as N_m3u8DL-RE.exe.
    Remove the -M part if you don't want to mux to mkv, or change to format=mp4 for mp4. Might need mp4mux.exe to work, don't know.
    Edit: Just occurred to me, an even simpler way is to just use svtplay-dl with your free token since they aren't encrypted..

    Still would be nice to get the encrypted ones working for the future though.
    If you have any more ideas, please keep them coming. I'll keep investigating.
    Last edited by insideoutegg; 7th Jan 2024 at 04:47.
    Quote Quote  
  9. Member
    Join Date
    Oct 2024
    Location
    Finland
    Search PM
    Hello, new lurker here. I'm struggling to get this working. Some videos are protected but are free to watch. svtplay-dl doesnt support fetching these videos.

    Video I'm trying to get https://www.tv4play.se/video/11fdbeb7b5dcc5debdac/avsnitt-1-granslandet

    I have found PSSH, token and license url but somehow I still get either 412 or 403 responses. Maybe my header is wrong?
    Code:
    header = {
        'authority': 'lic46.drmtoday.com',
        'accept': '*/*',
        'accept-language': 'en,sv-SE;q=0.9,sv;q=0.8',
        'dnt': '1',
        'origin': 'https://www.tv4play.se',
        'referer': 'https://www.tv4play.se/',
        'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:131.0) Gecko/20100101 Firefox/131.0',
        'x-dt-auth-token': 'ey...',
        'Client-Name': 'tv4-web',
        'Client-Version': '5.2.0',
        'Content-Type': 'application/json',
        'assetId': '20850861',}
    Quote Quote  
  10. Originally Posted by dimian View Post
    Hello, new lurker here. I'm struggling to get this working. Some videos are protected but are free to watch. svtplay-dl doesnt support fetching these videos.
    Have you tried the tools from Angela and FoxRefire?
    I have moved on to using the firefox extension (https://forum.videohelp.com/threads/414140-%5BRelease%5D-Widevine-L3-Guesser-Extension...-Chrome-All-OS) or allhell/allhellgui (https://forum.videohelp.com/threads/415503-%5Brelease%5D-AllHellGui) - works great for everything I've thrown at it, huge thanks to Angela/FoxRefire for these!

    Found your key with allhell by just giving it the mpd (m3u with different extension, as you seem to have found) and pasted curl (posix) from license in Firefox for the license request.
    This is with a "premium" account, perhaps the free account is the culprit if it still doesn't work?
    Code:
    MPD URL? https://vod.streaming.a2d.tv/5b392694-6872-4661-862b-2dad78581084/5073af00-71b6-11ef-9af3-896bc81e1e3b_20850861.ism/.mpd?start_index=3
    Found default_KID using regex: 40DEAB67-482C-3A89-87B9-4245B4E26EAE
    Found pssh element: AAAA...GcyTVNKOQ==
    Extracted or generated PSSH: AAAA...GcyTVNKOQ==
    Next.
    1. Paste your cURL of license request.
    2. Press Ctrl-D (Linux) or Ctrl-Z (Windows) to save it.
    cURL?
    
    URL: https://lic46.drmtoday.com/license-proxy-widevine/cenc/?specConform=true&assetId=tvmedia-20850861
    Method: POST
    Headers: {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:131.0) Gecko/20100101 Firefox/131.0', 'Accept': '*/*', 'Accept-Language': 'en-US,en;q=0.5', 'Accept-Encoding': 'gzip, deflate, br, zstd', 'x-dt-auth-token': 'ey...', 'Origin': 'https://www.tv4play.se', 'Connection': 'keep-alive', 'Sec-Fetch-Dest': 'empty', 'Sec-Fetch-Mode': 'cors', 'Sec-Fetch-Site': 'cross-site'}
    Data: None
    
    --key 40deab67482c3a8987b94245b4e26eae:066dc5b0fa016a0cf77fbc6d25d99cd3
    
    Save Video as?
    If you don't want to use those tools, perhaps you can adapt your headers using the above?
    Iirc you only need the token for drmtoday, but not sure.
    Quote Quote  



Similar Threads

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