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:
TL;DR: How to find the correct PSSH so I can get the key? Please point me in the right direction.PHP Code:
headers = {
'x-dt-auth-token': 'eyJhbGciOiJIUzUxMiJ9.eyJjcnQiOiJbe1wiYWNjb3VudGluZ0lkXCI6XCI3ZTNmMjgzZC0xMWNlLTQwMDktOGU1NS01NTc1M2Q0ZTI2ZjdcIixcImFzc2V0SWRcIjpcInR2bWVkaWEtMjA1MjI3MDJcIixcInByb2ZpbGVcIjp7XCJyZW50YWxcIjp7XCJhYnNvbHV0ZUV4cGlyYXRpb25cIjpcIjIwMjQtMDEtMDZUMTE6MTc6MzguOTUzWlwiLFwicGxheUR1cmF0aW9uXCI6ODY0MDAwMDB9fSxcIm91dHB1dFByb3RlY3Rpb25cIjp7XCJkaWdpdGFsXCI6dHJ1ZSxcImFuYWxvZ3VlXCI6dHJ1ZSxcImVuZm9yY2VcIjpmYWxzZX0sXCJuck9mU2ltdWx0YW5lb3VzU3RyZWFtc1wiOjAsXCJzdG9yZUxpY2Vuc2VcIjpmYWxzZX1dIiwib3B0RGF0YSI6IntcIm1lcmNoYW50XCI6XCJhMmRcIixcInVzZXJJZFwiOlwiYWRtaW4tc3ViLXZpbW9uZFwiLFwic2Vzc2lvbklkXCI6XCJ0bTYyTkUxcmwxblNaRzlDRGJvaTZnPT1cIn0iLCJpYXQiOjE3MDQ0NTM0NTgsImp0aSI6IkRjOFl6M3M2UWc3Mlc5XC80dFp3RVh3PT0ifQ.Dh6a_xH-Dxr9-G94mBqVxVpF0I8PgA9nhSN-aothEfZKW7Kuqa6xY5GGZQnhbEScJr0bDJb3DSqkXsEpB2QqF',
}
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?):
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.PHP Code:
(pyenv-wks-photobuf4) PS > 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-photobuf4) PS >
Searching for "m3u8" I find ".m3u8?start_index=3" containing this:
And I do see some "AAAA..." strings in there so seems right.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"
I tried using the first one as-is in wks-keys:
Not error 404, but 403 instead.. how come?PHP Code:
(pyenv-wks-photobuf4) PS > python.exe .\l3.py
PSSH: AAAAYnBzc2gAAAAA7e+LqXnWSs6jyCfc1R0h7QAAAEISEGyBAcqZljQovWCNtJ6RL9IiKGV5SmhjM05sZEVsa0lqb2lkSFp0WldScFlTMHlNRFV5TWpjd01pSjlI88aJmwY=
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 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-photobuf4) PS >
Tried to do base64 to hex on that one gives me:
which is the same as what is right after in the "KEYFORMAT" part, but with hyphens.Code:edef8ba979d64acea3c827dcd51d21ed
but:
and googling that error didn't get me any closer to a solution I'm afraid.PHP Code:
(pyenv-wks-photobuf4) PS > python.exe .\l3.py
PSSH: edef8ba979d64acea3c827dcd51d21ed
License URL: https://lic46.drmtoday.com/license-proxy-widevine/cenc/?specConform=true&assetId=tvmedia-20522702
unable to parse, unsupported 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 28, in <module>
correct, keys = WV_Function(pssh, lic_url)
^^^^^^^^^^^^^^^^^^^^^^^^^^
File "WKS_KEYS_l3_correction\l3.py", line 19, in WV_Function
widevine_license = requests.post(url=lic_url, data=wvdecrypt.get_challenge(), headers=headers.headers)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "pyenv-wks-photobuf4\Lib\site-packages\requests\api.py", line 115, in post
return request("post", url, data=data, json=json, **kwargs)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "pyenv-wks-photobuf4\Lib\site-packages\requests\api.py", line 59, in request
return session.request(method=method, url=url, **kwargs)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "pyenv-wks-photobuf4\Lib\site-packages\requests\sessions.py", line 589, in request
resp = self.send(prep, **send_kwargs)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "pyenv-wks-photobuf4\Lib\site-packages\requests\sessions.py", line 703, in send
r = adapter.send(request, **kwargs)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "pyenv-wks-photobuf4\Lib\site-packages\requests\adapters.py", line 486, in send
resp = conn.urlopen(
^^^^^^^^^^^^^
File "pyenv-wks-photobuf4\Lib\site-packages\urllib3\connectionpool.py", line 790, in urlopen
response = self._make_request(
^^^^^^^^^^^^^^^^^^^
File "pyenv-wks-photobuf4\Lib\site-packages\urllib3\connectionpool.py", line 496, in _make_request
conn.request(
File "pyenv-wks-photobuf4\Lib\site-packages\urllib3\connection.py", line 363, in request
chunks_and_cl = body_to_chunks(body, method=method, blocksize=self.blocksize)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "pyenv-wks-photobuf4\Lib\site-packages\urllib3\util\request.py", line 247, in body_to_chunks
raise TypeError(
TypeError: 'body' must be a bytes-like object, file-like object, or iterable. Instead was 1
(pyenv-wks-photobuf4) PS >
Thought that perhaps it's a "kid" string, and tried to convert it:
but again, 404 error from wks.PHP Code:
PS > python .\psshfromkid.py
Please input KID in hex string: edef8ba979d64acea3c827dcd51d21ed
PSSH AAAAMnBzc2gAAAAA7e+LqXnWSs6jyCfc1R0h7QAAABISEO3vi6l51krOo8gn3NUdIe0=
PS >
Tried the second string in the m3u8:
-> must be byte objectCode:AAAAn3Bzc2gAAAAAPV5tNZuaQei4Q908bnLELAAAAH97InZlcnNpb24iOiJWMS4wIiwia2lkcyI6WyJiSUVCeXBtV05DaTlZSTIwbnBFdjBnPT0iXSwiY29udGVudElEIjoiZXlKaGMzTmxkRWxrSWpvaWRIWnRaV1JwWVMweU1EVXlNamN3TWlKOSIsImVuc2NoZW1hIjoiY2JjcyJ9
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?
+ Reply to Thread
Results 1 to 12 of 12
-
Last edited by insideoutegg; 7th Jan 2024 at 04:49.
-
-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.
-
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.
-
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
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.
-
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
PSSH = AAAAYnBzc2gAAAAA7e+LqXnWSs6jyCfc1R0h7QAAAEISEGyBAc qZljQovWCNtJ6RL9IiKGV5SmhjM05sZEVsa0lqb2lkSFp0W
ldScFlTMHlNRFV5TWpjd01pSjlI88aJmwY=
As for license, i find this:
[Attachment 76040 - Click to enlarge]
which is this url:
Code:https://lic46.drmtoday.com/license-proxy-widevine/cenc/?specConform=true&assetId=tvmedia-20522702
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=params, headers=headers, data=data)
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)
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:(widevine) PS C:\tv4\WKS_KEYS> python .\l3.py
PSSH: AAAAYnBzc2gAAAAA7e+LqXnWSs6jyCfc1R0h7QAAAEISEGyBAcqZljQovWCNtJ6RL9IiKGV5SmhjM05sZEVsa0lqb2lkSFp0WldScFlTMHlNRFV5TWpjd01pSjlI88aJmwY=
License URL: https://lic46.drmtoday.com/license-proxy-widevine/cenc/?specConform=true
0: testing 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>'
1: testing 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>'
2: testing 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>'
3: testing 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>'
4: testing 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>'
5: testing 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>'
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.
-
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
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 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.
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.
-
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',}
-
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?
Iirc you only need the token for drmtoday, but not sure. -
Thank you for your fast reply!
I was able to get the key using AllHell (with free account), thank you!
The headers seems to be correct on my end but I think the license is not accepting my wvd device? Maybe I did something wrong when I generated it... I tried using my wvd file on allhell but the license is responding with 403 error.
Anyway, Thanks again! -
Oh it seems the tokens expires so you have to check for new token if you get 403 error.
btw I find it strange that Firefox have trouble finding the correct m3u8. I had to switch to Chrome to get the correct m3u8.
Similar Threads
-
Finding the correct headers from kocowa.com.
By konomi in forum Newbie / General discussionsReplies: 1Last Post: 10th Oct 2023, 13:45 -
Trouble finding the VVC codec for Potplayer
By imkira3 in forum Software PlayingReplies: 0Last Post: 2nd Oct 2023, 14:10 -
Trouble finding key (Or maybe licence URL, or maybe everything?)
By newbi33 in forum Video Streaming DownloadingReplies: 7Last Post: 13th Aug 2023, 02:24 -
Need help finding correct m3u8/mpd
By Mart006 in forum Video Streaming DownloadingReplies: 7Last Post: 3rd Aug 2023, 14:03 -
Trouble finding the right conversion settings
By ricardouk in forum Video ConversionReplies: 15Last Post: 25th Jun 2021, 05:25